Graylog: Używanie z Pythonem

Jak wysyłać logi z Pythona do Graylog

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Graylog cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczony i dedykowany serwer e-mail SMTP w zestawie.
  • Bezproblemowe aktualizacje za pomocą jednego kliknięcia.
  • Dostosowywalna nazwa domeny zabezpieczona za pomocą HTTPS (na przykład, https://logs.twoja-firma.com).
  • Optymalna wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Graylog cloud hosting Stackhero!

Wysyłanie logów z Pythona do Graylog jest proste. W tym przykładzie użyjemy pakietów graypy i logging, aby to osiągnąć.

Po stronie Graylog musisz utworzyć wejście GELF TCP.

Przejdź do panelu administracyjnego Graylog, następnie w "System"/"Inputs" i utwórz nowe wejście "GELF TCP". Zaznacz pole "global", dodaj "title" i upewnij się, że port jest ustawiony na 12201.

Nie aktywuj tutaj żadnej opcji TLS. Szyfrowanie TLS będzie obsługiwane przez reverse proxy dołączone do Twojej instancji.

Konfiguracja wejściaKonfiguracja wejścia

Na pulpicie Stackhero przejdź do swojej usługi Graylog i kliknij "Configure".

Upewnij się, że port TCP 12201 jest poprawnie zdefiniowany i włącz "TLS encryption" dla niego, a następnie zatwierdź swoją konfigurację.

Konfiguracja portu wejściowegoKonfiguracja portu wejściowego

Powinieneś sprawdzić w "Firewall" swojej usługi, czy zezwoliłeś przynajmniej swojemu IP na wysyłanie danych do portu TCP 12201. Do celów testowych może być łatwiej zezwolić na wszystkie IP (0.0.0.0/0), co jest ustawieniem domyślnym.

W tym przykładzie użyjemy biblioteki graypy. Możesz ją po prostu zainstalować za pomocą pip install graypy.

Następnie możesz napisać następujący kod w pliku o nazwie graylog-example.py i zastąpić XXXXX.stackhero-network.com nazwą hosta swojego serwera:

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

my_logger.debug('To jest test z skryptu Python!')

Przejdź do panelu administracyjnego Graylog, kliknij na zakładkę "Search", kliknij ikonę odtwarzania i wybierz "Update every 1 second". Następnie możesz uruchomić skrypt za pomocą tej komendy: python graylog-example.py.

Skrypt wyśle log do Graylog i powinieneś go zobaczyć na swojej stronie wyszukiwania Graylog!

Twój pierwszy log otrzymany w GraylogTwój pierwszy log otrzymany w Graylog

Kliknij na zdanie "To jest test z skryptu Python!" i zobaczysz przydatne informacje, takie jak nazwa skryptu, linia, która tworzy log, itp.

Szczegółowy logSzczegółowy log

Przydatną funkcją jest przechwytywanie błędów i wysyłanie ich do Graylog, aby mieć globalny przegląd błędów wywołanych przez Twoją aplikację. Będziesz mieć nawet możliwość wysyłania powiadomień o takich błędach za pomocą e-maila lub używając Slacka czy Mattermost.

W tym przykładzie próbujemy wywołać funkcję unknown_function, która nie istnieje. Nie zapomnij zastąpić wartości "XXXXX.stackhero-network.com" nazwą hosta swojej instancji.

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

try:
  unknown_function()
except NameError:
  my_logger.debug('Funkcja "unknown_function" wywołała błąd', exc_info=1)

Uruchom skrypt i wróć do panelu administracyjnego Graylog. Zobaczysz błąd "NameError: name 'unknown_function' is not defined" i pełny ślad stosu!

Przykład logu błęduPrzykład logu błędu

W poprzednich przykładach używaliśmy TLS do szyfrowania komunikacji, ale nie sprawdzaliśmy ważności certyfikatu. Było to w celach demonstracyjnych, ale do produkcji powinieneś sprawdzić ważność certyfikatu.

Możesz to zrobić, po prostu dodając opcje validate i ca_certs w ten sposób:

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')

Powinieneś upewnić się, że plik /etc/ssl/certs/ca-certificates.crt istnieje:

  • Na Ubuntu/Debian możesz go zainstalować za pomocą sudo apt install ca-certificates.
  • Na Alpine Linux zainstaluj go za pomocą apk add ca-certificates.
  • Na macOS jest zainstalowany domyślnie, ale nazwany /etc/ssl/cert.pem.

Jeśli nie otrzymujesz logów w swoim Graylog, możesz chcieć sprawdzić te punkty:

  1. Graylog powinien mieć zdefiniowane wejście typu "GELF TCP", nasłuchujące na porcie 12201, bez zdefiniowanej konfiguracji TLS.
  2. Konfiguracja Graylog na pulpicie Stackhero (przycisk "Configure") powinna mieć zdefiniowany port 12201, z TCP i TLS aktywowanymi w "Input ports".
  3. Firewall na pulpicie Stackhero powinien pokazywać port "12201/tcp" jako "ACCEPT", najlepiej na pozycji #1 z zdefiniowanym źródłem 0.0.0.0/0 (do celów testowych).
  4. Powinieneś obserwować logi na panelu administracyjnym Graylog w "Search". Aby upewnić się, że widzisz swoje logi, wybierz "Search in the last 1 hour", kliknij ikonę odtwarzania i wybierz "Update every 1 second".