Graylog: Gebruik met Python
Hoe logs van Python naar Graylog te sturen
👋 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!
Het verzenden van logs van Python naar Graylog is eenvoudig. In dit voorbeeld gebruiken we de pakketten graypy en logging om dit te bereiken.
Graylog configureren
Aan de Graylog-kant moet u een GELF TCP-ingang maken.
Ga naar uw Graylog-beheerpaneel, dan naar "System"/"Inputs" en maak een nieuwe "GELF TCP" ingang. Vink het vakje "global" aan, voeg een "title" toe en zorg ervoor dat de poort is ingesteld op 12201.
Activeer hier geen TLS-optie. De TLS-versleuteling wordt afgehandeld door de reverse proxy die bij uw instantie is inbegrepen.
Ingangsconfiguratie
De service configureren
Ga op het Stackhero-dashboard naar uw Graylog-service en klik op "Configure".
Zorg ervoor dat de TCP-poort 12201 correct is gedefinieerd en schakel "TLS-encryptie" ervoor in, valideer vervolgens uw configuratie.
Ingangspoortconfiguratie
U moet in de "Firewall" van uw service controleren of u ten minste uw IP hebt toegestaan om gegevens naar de TCP-poort 12201 te verzenden. Voor testdoeleinden kan het eenvoudiger zijn om alle IP's toe te staan (0.0.0.0/0), wat de standaardinstelling is.
Voorbeeld van Python-code
Voor dit voorbeeld gebruiken we de graypy-bibliotheek. U kunt deze eenvoudig installeren met pip install graypy.
Vervolgens kunt u de volgende code schrijven in een bestand genaamd graylog-example.py en XXXXX.stackhero-network.com vervangen door de hostnaam van uw server:
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('Dit is een test vanuit een Python-script!')
Ga naar uw Graylog-beheerpaneel, klik op het tabblad "Search", klik op het afspeelicoon en selecteer "Update every 1 second". Vervolgens kunt u het script uitvoeren met deze opdrachtregel: python graylog-example.py.
Het script stuurt de log naar Graylog, en u zou het op uw Graylog-zoekpagina moeten zien!
Uw eerste log ontvangen op Graylog
Klik op de zin "Dit is een test vanuit een Python-script!" en u zult nuttige informatie zien zoals de scriptnaam, de regel die de log creëert, enz.
Gedetailleerde log
Fouten naar Graylog sturen
Een nuttige functie is om fouten op te vangen en naar Graylog te sturen, zodat u een globaal overzicht heeft van fouten die door uw applicatie worden gegenereerd. U krijgt zelfs de mogelijkheid om meldingen over dergelijke fouten te verzenden via e-mail, of met behulp van Slack of Mattermost.
In dit voorbeeld proberen we de functie unknown_function aan te roepen, die niet bestaat. Vergeet niet de waarde "XXXXX.stackhero-network.com" te vervangen door de hostnaam van uw instantie.
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('De functie "unknown_function" veroorzaakte een fout', exc_info=1)
Voer het script uit en ga terug naar uw Graylog-beheerpaneel. U zult de fout "NameError: name 'unknown_function' is not defined" en de volledige stacktrace zien!
Voorbeeld van foutlog
Beveiliging van communicatie versterken
In de vorige voorbeelden hebben we TLS gebruikt om de communicatie te versleutelen, maar we hebben de geldigheid van het certificaat niet gecontroleerd. Dit was voor demonstratiedoeleinden, maar voor productie moet u de geldigheid van het certificaat controleren.
U kunt dit doen door eenvoudig de opties validate en ca_certs toe te voegen zoals dit:
handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')
U moet ervoor zorgen dat het bestand /etc/ssl/certs/ca-certificates.crt bestaat:
- 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 heet het
/etc/ssl/cert.pem.
Problemen oplossen
Als u geen logs ontvangt in uw Graylog, wilt u misschien deze punten controleren:
- Graylog moet een gedefinieerde ingang hebben van het type "GELF TCP", luisterend op poort 12201, zonder enige TLS-configuratie gedefinieerd.
- Graylog-configuratie in het Stackhero-dashboard (knop "Configure") moet de poort 12201 gedefinieerd hebben, met TCP en TLS geactiveerd in "Input ports".
- De firewall op het Stackhero-dashboard moet u de poort "12201/tcp" als "ACCEPT" tonen, idealiter op positie #1 met bron 0.0.0.0/0 gedefinieerd (voor testdoeleinden).
- U moet de logs bekijken op het beheerpaneel van uw Graylog in "Search". Om ervoor te zorgen dat u uw logs ziet, selecteert u "Search in the last 1 hour", klikt u op het afspeelicoon en selecteert u "Update every 1 second".