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.
Konfiguracja 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ś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 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.
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, 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 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 logu
Wysyłanie logów błędów
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łędu
Wzmacnianie bezpieczeństwa komunikacji
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.
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", sprawdź, czy 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.