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.
Konfiguracja 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ścia
Konfiguracja usługi w Stackhero
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ś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.
Przykład: Wysyłanie logów z Pythona
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 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 logu
Wysyłanie logów błędów
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łędu
Wzmacnianie bezpieczeństwa komunikacji
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.
Rozwiązywanie problemów
Jeśli nie widzisz swoich logów w Graylog, sprawdź następujące kwestie:
- 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.
- W panelu Stackhero, w sekcji "Configure", potwierdź, że port 12201 jest skonfigurowany jako TCP z włączonym TLS w "Input ports".
- 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.
- 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.