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 za pomocą pakietów graypy i logging przekazywać logi z aplikacji Python do instancji Graylog.

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

Przejdź do panelu administracyjnego Graylog. W sekcji "System" > "Inputs" możesz utworzyć nowe wejście typu "GELF TCP". Zaznacz pole "global", nadaj "title" dla wejścia 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

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 sekcji "Firewall" swojej usługi, czy przynajmniej Twój adres IP ma pozwolenie 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:

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ę play i ustaw odświeżanie na każdą sekundę. Skrypt uruchomisz poleceniem:

python graylog-example.py

Po uruchomieniu skryptu wiadomość logu zostanie wysłana do Graylog i powinna pojawić się w wynikach wyszukiwania.

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

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

Szczegóły loguSzczegóły logu

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

Poniżej 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)

Ten skrypt możesz uruchomić 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 w testach, ale w środowisku produkcyjnym ważne jest sprawdzenie ważności certyfikatu.

Możesz włączyć walidację certyfikatu, dodając opcje validate i 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 domyślnie zainstalowany, 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", potwierdź, że 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.