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 prostym procesem. W tym przewodniku pokażemy, jak użyć pakietów graypy oraz logging, aby przekazywać logi z Twojej aplikacji Python do instancji Graylog.

Najpierw należy skonfigurować wejście GELF TCP na swoim serwerze Graylog.

Przejdź do panelu administracyjnego Graylog. W sekcji "System" > "Inputs" możesz utworzyć nowe wejście typu "GELF TCP". Zaznacz pole "global", wpisz "title" dla swojego wejścia i upewnij się, że port jest ustawiony na 12201.

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

Konfiguracja wejściaKonfiguracja wejścia

W panelu Stackhero wybierz swoją usługę Graylog i kliknij "Configure".

Upewnij się, że port TCP 12201 jest poprawnie skonfigurowany oraz że "TLS encryption" jest włączone dla tego portu. Zapisz zmiany, aby zastosować konfigurację.

Konfiguracja portu wejściowegoKonfiguracja portu wejściowego

Sprawdź w zakładce "Firewall" swojej usługi, czy masz zezwolenie przynajmniej dla swojego adresu IP na wysyłanie danych na port TCP 12201. Do testów najłatwiej jest zezwolić na wszystkie adresy IP (0.0.0.0/0), co jest ustawieniem domyślnym.

W tym przykładzie możesz użyć biblioteki graypy. Aby rozpocząć, zainstaluj ją poleceniem pip install graypy.

Następnie utwórz plik o nazwie graylog-example.py i zamień <XXXXXX>.stackhero-network.com na nazwę hosta swojego serwera. Oto przykładowy skrypt, który możesz przetestować:

import logging
import graypy

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

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

my_logger.debug('This is a test from a Python script!')

Aby zobaczyć swoje logi, otwórz panel administracyjny Graylog, przejdź do zakładki "Search", kliknij ikonę odtwarzania i ustaw odświeżanie na każdą sekundę. Skrypt uruchom poleceniem:

python graylog-example.py

Po uruchomieniu skryptu Twój komunikat logu zostanie wysłany do Graylog i powinien pojawić się w wynikach wyszukiwania.

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

Kliknięcie na wiadomość "This is a test from a Python script!" wyświetli szczegóły, takie jak nazwa skryptu oraz dokładna linia, która wygenerowała log.

Szczegóły loguSzczegóły logu

Graylog służy nie tylko do zwykłych komunikatów logów. Możesz również przechwytywać i przekazywać błędy, aby lepiej monitorować zachowanie swojej aplikacji. Ułatwia to nadzór oraz otrzymywanie powiadomień o problemach przez email, Slack lub Mattermost.

Poniżej znajduje się przykład, w którym celowo wywołujemy nieistniejącą funkcję, aby wygenerować błąd. Pamiętaj, aby zamienić "<XXXXXX>.stackhero-network.com" na nazwę hosta swojej instancji.

import logging
import graypy

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

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

try:
    unknown_function()
except NameError:
    my_logger.debug('The "unknown_function" raised an error', exc_info=1)

Możesz uruchomić ten skrypt tak samo jak poprzedni. W panelu administracyjnym Graylog zobaczysz komunikat błędu "NameError: name 'unknown_function' is not defined" wraz z pełnym stack trace.

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

Chociaż powyższe przykłady używają szyfrowania TLS, nie wykonują one walidacji certyfikatu. Jest to akceptowalne do testów, ale w środowisku produkcyjnym ważne jest, aby zweryfikować ważność certyfikatu.

Możesz włączyć walidację certyfikatu, dodając opcje validate oraz ca_certs w następujący sposób:

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

Upewnij się, że plik /etc/ssl/certs/ca-certificates.crt istnieje w Twoim systemie:

  • Na Ubuntu/Debian zainstalujesz go poleceniem sudo apt install ca-certificates.
  • Na Alpine Linux poleceniem apk add ca-certificates.
  • Na macOS jest instalowany domyślnie, ale plik nazywa się /etc/ssl/cert.pem.

Jeśli nie widzisz swoich logów w Graylog, sprawdź następujące kwestie:

  1. Upewnij się, że Graylog ma wejście GELF TCP nasłuchujące na porcie 12201 i że TLS nie jest włączony na tym wejściu.
  2. W panelu Stackhero, w sekcji "Configure", sprawdź, czy port 12201 jest skonfigurowany jako TCP z włączonym TLS w "Input ports".
  3. Zweryfikuj, czy ustawienia firewalla w Stackhero pokazują port "12201/tcp" jako "ACCEPT", najlepiej na pozycji #1 ze źródłem ustawionym na 0.0.0.0/0 do testów.
  4. W panelu administracyjnym Graylog, w zakładce "Search", upewnij się, że przeglądasz logi z ostatniej godziny i ustaw widok na odświeżanie co sekundę, aby wychwycić nowe wiadomości na bieżąco.