Graylog: Utilisation avec Python
Comment envoyer des logs de Python à Graylog
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Graylog cloud prête à l'emploi qui offre de nombreux avantages, notamment :
- Serveur e-mail SMTP illimité et dédié inclus.
- Mises à jour sans effort en un clic.
- Nom de domaine personnalisable sécurisé avec HTTPS (par exemple, https://logs.votre-entreprise.com).
- Performance optimale et sécurité robuste grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Graylog cloud hosting de Stackhero !
Envoyer des logs de Python à Graylog est simple. Dans cet exemple, nous utiliserons les packages graypy et logging pour y parvenir.
Configurer Graylog
Du côté de Graylog, vous devez créer une entrée GELF TCP.
Accédez à votre panneau d'administration Graylog, puis dans "System"/"Inputs" et créez une nouvelle entrée "GELF TCP". Cochez la case "global", ajoutez un "title" et assurez-vous que le port est défini sur 12201.
N'activez pas d'option TLS ici. Le chiffrement TLS sera géré par le reverse proxy inclus avec votre instance.
Configuration de l'entrée
Configurer le service
Sur le tableau de bord Stackhero, accédez à votre service Graylog et cliquez sur "Configurer".
Assurez-vous que le port TCP 12201 est correctement défini et activez le "chiffrement TLS" pour celui-ci, puis validez votre configuration.
Configuration du port d'entrée
Vous devriez vérifier dans le "Firewall" de votre service que vous avez autorisé au moins votre IP à envoyer des données au port TCP 12201. Pour des tests, il peut être plus simple d'autoriser toutes les IPs (0.0.0.0/0), ce qui est le paramètre par défaut.
Exemple de code Python
Pour cet exemple, nous utiliserons la bibliothèque graypy. Vous pouvez simplement l'installer avec pip install graypy.
Ensuite, vous pouvez écrire le code suivant dans un fichier nommé graylog-example.py et remplacer XXXXX.stackhero-network.com par le nom d'hôte de votre serveur :
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('Ceci est un test depuis un script Python !')
Accédez à votre panneau d'administration Graylog, cliquez sur l'onglet "Search", cliquez sur l'icône de lecture et sélectionnez "Update every 1 second". Ensuite, vous pouvez exécuter le script avec cette commande : python graylog-example.py.
Le script enverra le log à Graylog, et vous devriez le voir sur votre page de recherche Graylog !
Votre premier log reçu sur Graylog
Cliquez sur la phrase "Ceci est un test depuis un script Python !" et vous verrez des informations utiles comme le nom du script, la ligne qui crée le log, etc.
Log détaillé
Envoyer des erreurs à Graylog
Une fonctionnalité utile est de capturer les erreurs et de les envoyer à Graylog, afin d'avoir une vue d'ensemble des erreurs déclenchées par votre application. Vous aurez même la possibilité d'envoyer des notifications sur ces erreurs via e-mail, ou en utilisant Slack ou Mattermost.
Dans cet exemple, nous essayons d'appeler la fonction unknown_function, qui n'existe pas. N'oubliez pas de remplacer la valeur "XXXXX.stackhero-network.com" par le nom d'hôte de votre instance.
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('La fonction "unknown_function" a déclenché une erreur', exc_info=1)
Exécutez le script et retournez à votre panneau d'administration Graylog. Vous verrez l'erreur "NameError: name 'unknown_function' is not defined" et la trace complète de l'erreur !
Exemple de log d'erreur
Renforcer la sécurité des communications
Dans les exemples précédents, nous avons utilisé TLS pour chiffrer la communication mais nous n'avons pas vérifié la validité du certificat. C'était à des fins de démonstration, mais pour la production, vous devriez vérifier la validité du certificat.
Vous pouvez le faire en ajoutant simplement les options validate et ca_certs comme ceci :
handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')
Vous devriez vous assurer que le fichier /etc/ssl/certs/ca-certificates.crt existe :
- Sur Ubuntu/Debian, vous pouvez l'installer avec
sudo apt install ca-certificates. - Sur Alpine Linux, installez-le avec
apk add ca-certificates. - Sur macOS, il est installé par défaut mais nommé
/etc/ssl/cert.pem.
Dépannage
Si vous ne recevez pas de logs dans votre Graylog, vous pourriez vouloir vérifier ces points :
- Graylog doit avoir une entrée définie de type "GELF TCP", écoutant sur le port 12201, sans configuration TLS définie.
- La configuration de Graylog dans le tableau de bord Stackhero (bouton "Configurer") doit avoir le port 12201 défini, avec TCP et TLS activés dans "Input ports".
- Le pare-feu sur le tableau de bord Stackhero devrait vous montrer le port "12201/tcp" comme "ACCEPT", idéalement en position #1 avec la source 0.0.0.0/0 définie (pour des tests).
- Vous devriez surveiller les logs sur le panneau d'administration de votre Graylog dans "Search". Pour vous assurer de voir vos logs, sélectionnez "Search in the last 1 hour", cliquez sur l'icône de lecture et sélectionnez "Update every 1 second".