Graylog: Verwendung mit Python
Wie man Logs von Python zu Graylog sendet
👋 Willkommen bei der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Graylog Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:
- Unbegrenzter und dedizierter SMTP-E-Mail-Server inklusive.
- Mühelose Updates mit nur einem Klick.
- Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://logs.ihre-firma.com).
- Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Graylog Cloud Hosting-Lösung von Stackhero auszuprobieren!
Das Senden von Logs von Python zu Graylog ist unkompliziert. In diesem Beispiel verwenden wir die Pakete graypy und logging, um dies zu erreichen.
Graylog konfigurieren
Auf der Graylog-Seite müssen Sie ein GELF TCP-Input erstellen.
Gehen Sie zu Ihrem Graylog-Admin-Panel, dann zu "System"/"Inputs" und erstellen Sie ein neues "GELF TCP"-Input. Aktivieren Sie das Kästchen "global", fügen Sie einen "title" hinzu und stellen Sie sicher, dass der Port auf 12201 eingestellt ist.
Aktivieren Sie keine TLS-Option hier. Die TLS-Verschlüsselung wird vom Reverse-Proxy Ihrer Instanz übernommen.
Input-Konfiguration
Dienst konfigurieren
Gehen Sie im Stackhero-Dashboard zu Ihrem Graylog-Dienst und klicken Sie auf "Konfigurieren".
Stellen Sie sicher, dass der TCP-Port 12201 korrekt definiert ist und aktivieren Sie die "TLS-Verschlüsselung" dafür, dann bestätigen Sie Ihre Konfiguration.
Input-Port-Konfiguration
Sie sollten in der "Firewall" Ihres Dienstes überprüfen, dass Sie mindestens Ihre IP-Adresse zum Senden von Daten an den TCP-Port 12201 zugelassen haben. Für Testzwecke könnte es einfacher sein, alle IPs (0.0.0.0/0) zuzulassen, was die Standardeinstellung ist.
Beispiel für Python-Code
Für dieses Beispiel verwenden wir die graypy-Bibliothek. Sie können sie einfach mit pip install graypy installieren.
Dann können Sie den folgenden Code in eine Datei namens graylog-example.py schreiben und XXXXX.stackhero-network.com durch den Hostnamen Ihres Servers ersetzen:
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('Dies ist ein Test von einem Python-Skript!')
Gehen Sie zu Ihrem Graylog-Admin-Panel, klicken Sie auf den "Search"-Tab, klicken Sie auf das Play-Symbol und wählen Sie "Update every 1 second". Dann können Sie das Skript mit diesem Befehl ausführen: python graylog-example.py.
Das Skript sendet das Log an Graylog, und Sie sollten es auf Ihrer Graylog-Suchseite sehen!
Ihr erstes Log auf Graylog empfangen
Klicken Sie auf den Satz "Dies ist ein Test von einem Python-Skript!" und Sie werden nützliche Informationen wie den Skriptnamen, die Zeile, die das Log erstellt, usw. sehen.
Detailliertes Log
Fehler an Graylog senden
Eine nützliche Funktion ist es, Fehler abzufangen und an Graylog zu senden, sodass Sie einen globalen Überblick über die von Ihrer Anwendung ausgelösten Fehler haben. Sie haben sogar die Möglichkeit, Benachrichtigungen über solche Fehler per E-Mail oder mit Slack oder Mattermost zu senden.
In diesem Beispiel versuchen wir, die Funktion unknown_function aufzurufen, die nicht existiert. Vergessen Sie nicht, den Wert "XXXXX.stackhero-network.com" durch den Hostnamen Ihrer Instanz zu ersetzen.
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('Die Funktion "unknown_function" hat einen Fehler ausgelöst', exc_info=1)
Führen Sie das Skript aus und kehren Sie zu Ihrem Graylog-Admin-Panel zurück. Sie werden den Fehler "NameError: name 'unknown_function' is not defined" und die vollständige Fehlerverfolgung sehen!
Beispiel für einen Fehlerlog
Kommunikationssicherheit verstärken
In den vorherigen Beispielen haben wir TLS verwendet, um die Kommunikation zu verschlüsseln, aber wir haben die Gültigkeit des Zertifikats nicht überprüft. Dies war zu Demonstrationszwecken, aber für die Produktion sollten Sie die Gültigkeit des Zertifikats überprüfen.
Sie können dies tun, indem Sie einfach die Optionen validate und ca_certs wie folgt hinzufügen:
handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')
Sie sollten sicherstellen, dass die Datei /etc/ssl/certs/ca-certificates.crt existiert:
- Auf Ubuntu/Debian können Sie sie mit
sudo apt install ca-certificatesinstallieren. - Auf Alpine Linux installieren Sie sie mit
apk add ca-certificates. - Auf macOS ist sie standardmäßig installiert, aber als
/etc/ssl/cert.pembenannt.
Fehlerbehebung
Wenn Sie keine Logs in Ihrem Graylog erhalten, sollten Sie diese Punkte überprüfen:
- Graylog sollte ein definiertes Input vom Typ "GELF TCP" haben, das auf Port 12201 hört, ohne definierte TLS-Konfiguration.
- Die Graylog-Konfiguration im Stackhero-Dashboard (Schaltfläche "Konfigurieren") sollte den Port 12201 definiert haben, mit TCP und TLS aktiviert in "Input ports".
- Die Firewall im Stackhero-Dashboard sollte Ihnen den Port "12201/tcp" als "ACCEPT" anzeigen, idealerweise an Position #1 mit der Quelle 0.0.0.0/0 definiert (für Testzwecke).
- Sie sollten die Logs auf Ihrem Graylog-Admin-Panel in "Search" überwachen. Um sicherzustellen, dass Sie Ihre Logs sehen, wählen Sie "Search in the last 1 hour", klicken Sie auf das Play-Symbol und wählen Sie "Update every 1 second".