Graylog: Gebruik met Python
Hoe u logs van Python naar Graylog verzendt
👋 Welkom bij de Stackhero documentatie!
Stackhero biedt een kant-en-klare Graylog cloud oplossing die tal van voordelen biedt, waaronder:
- Onbeperkte en toegewijde SMTP e-mailserver inbegrepen.
- Moeiteloze updates met slechts één klik.
- Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://logs.uw-bedrijf.com).
- Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.
Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Graylog cloud hosting oplossing van Stackhero te proberen!
Logs van Python naar Graylog sturen is een eenvoudig proces. In deze handleiding laten we zien hoe u de pakketten graypy en logging gebruikt om logs van uw Python-applicatie door te sturen naar uw Graylog-instantie.
Graylog instellen
Stel eerst een GELF TCP-input in op uw Graylog-server.
Ga naar het Graylog-beheerpanel. Onder "System" > "Inputs" kunt u een nieuwe input van het type "GELF TCP" aanmaken. Vink het vakje "global" aan, geef een "title" op voor uw input en controleer of de poort is ingesteld op 12201.
Activeer hier geen enkele TLS-optie. De TLS-versleuteling wordt afgehandeld door de reverse proxy die bij uw instantie is inbegrepen.
Inputconfiguratie
Uw service configureren in Stackhero
Selecteer in het Stackhero-dashboard uw Graylog-service en klik op "Configure".
Controleer of de TCP-poort 12201 correct is ingesteld en dat "TLS encryption" is ingeschakeld voor deze poort. Sla uw wijzigingen op om de configuratie toe te passen.
Inputpoortconfiguratie
Controleer in de "Firewall" van uw service of u ten minste uw eigen IP-adres heeft toegestaan om data te versturen naar TCP-poort 12201. Voor testdoeleinden is het wellicht eenvoudiger om alle IP-adressen toe te staan (0.0.0.0/0), wat de standaardinstelling is.
Voorbeeld: Logs verzenden vanuit Python
Voor dit voorbeeld kunt u de graypy-bibliotheek gebruiken. Installeer deze eenvoudig met pip install graypy.
Maak vervolgens een bestand aan met de naam graylog-example.py en vervang <XXXXXX>.stackhero-network.com door de hostnaam van uw eigen server. Hier is een voorbeeldscript dat u kunt proberen:
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!')
Om uw logs te bekijken, opent u het Graylog-beheerpanel, gaat u naar het tabblad "Search", klikt u op het afspeelicoon en stelt u in dat de weergave elke seconde wordt bijgewerkt. U kunt uw script uitvoeren met:
python graylog-example.py
Zodra het script draait, wordt uw logbericht naar Graylog gestuurd en zou u het in de zoekresultaten moeten zien verschijnen.
Uw eerste log ontvangen op Graylog
Door te klikken op het bericht "This is a test from a Python script!" krijgt u nuttige details te zien, zoals de naam van het script en de exacte regel die de log heeft gegenereerd.
Gedetailleerde log
Foutlogs verzenden
Graylog is niet alleen bedoeld voor reguliere logberichten. U kunt ook fouten opvangen en doorsturen voor beter inzicht in het gedrag van uw applicatie. Dit maakt het eenvoudiger om te monitoren en notificaties te ontvangen bij problemen via e-mail, Slack of Mattermost.
Hier is een voorbeeld waarbij we expres een niet-bestaande functie aanroepen om een fout te genereren. Vergeet niet "<XXXXXX>.stackhero-network.com" te vervangen door de hostnaam van uw eigen instantie.
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)
U kunt dit script op dezelfde manier uitvoeren als het vorige. In het Graylog-beheerpanel ziet u het foutbericht "NameError: name 'unknown_function' is not defined" samen met de volledige stacktrace.
Voorbeeld van foutlog
Communicatiebeveiliging versterken
Hoewel de vorige voorbeelden gebruikmaken van TLS-versleuteling, wordt het certificaat niet gevalideerd. Dit is prima voor testdoeleinden, maar in een productieomgeving is het belangrijk om de geldigheid van het certificaat te controleren.
U kunt certificaatvalidatie inschakelen door de opties validate en ca_certs toe te voegen, zoals hieronder:
handler = graypy.GELFTLSHandler('<XXXXXX>.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')
Controleer of het bestand /etc/ssl/certs/ca-certificates.crt op uw systeem aanwezig is:
- Op Ubuntu/Debian kunt u het installeren met
sudo apt install ca-certificates. - Op Alpine Linux installeert u het met
apk add ca-certificates. - Op macOS is het standaard geïnstalleerd, maar het bestand heet
/etc/ssl/cert.pem.
Problemen oplossen
Als u uw logs niet in Graylog ziet verschijnen, controleer dan het volgende:
- Zorg ervoor dat Graylog een GELF TCP-input heeft die luistert op poort 12201, en dat TLS niet is ingeschakeld op deze input.
- Controleer in het Stackhero-dashboard onder "Configure" of poort 12201 is ingesteld met TCP en TLS ingeschakeld onder "Input ports".
- Controleer of de firewall-instellingen in Stackhero poort "12201/tcp" als "ACCEPT" tonen, bij voorkeur op positie #1 met de bron ingesteld op 0.0.0.0/0 voor testdoeleinden.
- Controleer in het Graylog-beheerpanel onder "Search" of u logs van het afgelopen uur bekijkt en stel de weergave in op elke seconde bijwerken om nieuwe berichten direct te zien.