Intégration de Python JSON Logger avec Grafana et Loki pour une journalisation améliorée

Introduction
À l’ère des applications modernes, la journalisation joue un rôle essentiel dans la compréhension de l’état et des performances des systèmes. Traditionnellement, les journaux étaient rédigés en texte brut, mais à mesure que les systèmes évoluent, le besoin d’une journalisation structurée devient essentiel. La journalisation JSON est une solution puissante pour la journalisation structurée, permettant aux journaux d’être analysés, filtrés et analysés facilement. Il est devenu une norme pour les applications où l’observabilité, le débogage et la surveillance des performances sont des priorités clés. Les journaux JSON offrent un moyen structuré de stocker les données des journaux, facilitant ainsi la gestion de gros volumes de journaux. L’intégration de la journalisation JSON avec des outils de visualisation tels que Grafana offre des capacités de surveillance en temps réel, permettant aux entreprises de rester au top des performances de leur système et de répondre rapidement aux anomalies.
Pourquoi les journaux JSON ?
- JSON (JavaScript Object Notation) est un format texte léger, facilement lisible et inscriptible par les humains et les machines. Bien que les journaux en texte brut servent à fournir des informations, ils nécessitent souvent une logique d’analyse supplémentaire lorsque les machines doivent les analyser. Avec les journaux JSON, chaque entrée de journal est un objet structuré avec des paires clé-valeur, ce qui permet une analyse automatique par la plupart des outils de traitement des journaux, des systèmes de surveillance et des plateformes d’alerte.
- JSON est la lingua franca des API et des services modernes, ce qui le rend pris en charge de manière native par presque toutes les plateformes de journalisation comme AWS CloudWatch, Datadog et Grafana. Ces outils peuvent directement ingérer des journaux JSON et vous permettent de les visualiser à l’aide de diagrammes, de graphiques et de tableaux de bord sans nécessiter de transformations complexes. Cela permet de fournir des informations en temps réel sur la santé et les performances de votre système.
- Lorsque nous stockons les journaux au format JSON, vous débloquez la possibilité d’effectuer des requêtes avancées à l’aide d’outils tels que LogQL (utilisé dans Loki de Grafana) et JSMPath (un langage de requête JSON). Ces outils permettent des informations plus approfondies et un filtrage plus fin des données de journaux, vous donnant ainsi plus de contrôle sur la façon dont vous accédez et visualisez vos journaux.
Exemple concret : implémentation de la journalisation JSON dans ReadyEducation
À PrêtÉducationnous avons d’abord été confrontés à des difficultés dues au manque de journalisation structurée et d’outils permettant d’interroger ou de visualiser les données de journalisation. Cela a créé plusieurs problèmes, notamment au niveau du débogage et de l’obtention d’informations sur les performances de l’application. Les bugs critiques étaient difficiles à retracer, et il n’y avait pas de visibilité claire sur des métriques telles que :
- Nombre de requêtes par seconde que le système recevait.
- Quels points de terminaison consommaient plus de temps que prévu ?
- Identifier les clients générant des charges de trafic élevées.
- Sans ces données, il était difficile d’optimiser notre infrastructure ou de prendre des décisions éclairées pour améliorer les performances du système.
Transition vers la journalisation JSON et Grafana
Après avoir implémenté l’enregistreur JSON de Python, nous avons commencé à sauvegarder les journaux dans un format JSON structuré. Ces journaux ont ensuite été collectés par Grafana Loki et visualisés via les tableaux de bord Grafana. La transformation nous a permis de :
- Créez plusieurs tableaux de bord pour surveiller les indicateurs clés et la santé des applications.
- Configurez des alertes, par exemple en déclenchant des notifications si nous recevons plus d’un certain seuil d’erreurs HTTP 500 ou en surveillant les requêtes non autorisées par minute.
- Obtenez des informations sur les performances des API et la gestion de l’infrastructure en identifiant les points de terminaison ou les clients à l’origine des problèmes, ce qui nous permet de les optimiser.
- Déboguer tout bogue de production critique qui ne peut pas être répliqué dans l’environnement QA, nous recherchons les journaux dans Grafana pendant un intervalle de temps donné et le client vérifie les journaux et trouve la cause première.
- Cette décision a considérablement amélioré notre capacité à gérer et à faire évoluer notre infrastructure, à fournir des informations en temps réel et à améliorer nos capacités de débogage.

Tableau de bord

Journaux d’applications
Configuration de Python JSON Logger avec Loki, Promtail et Grafana
Maintenant que nous avons vu comment la journalisation JSON a amélioré les performances chez ReadyEducation, voyons comment configurer un enregistreur Python JSON et l’intégrer à Loki, Promtail et Grafana pour interroger, visualiser et surveiller vos journaux.

Intégration de Loki
Étape 1 : configuration de la journalisation Python JSON
- Tout d’abord, vous devez configurer votre application Python pour qu’elle se connecte au format JSON. Installez le python-json-logger
pip install python-json-logger
- Ensuite, configurez votre enregistreur pour qu’il génère les journaux au format JSON, cette configuration garantit que les journaux sont écrits au format JSON et qu’il vide les journaux dans le dossier /var/log/, qui peuvent ensuite être facilement traités par Loki et Promtail en tant que promtail par défaut. vérifiez les journaux sur le chemin /var/log/*log si nous le souhaitons, nous pouvons modifier le chemin par défaut dans le fichier promtail-config.yaml.
import logging from pythonjsonlogger import jsonlogger import os # Ensure the /var/log directory exists os.makedirs('/var/log', exist_ok=True) # Set up logger logger = logging.getLogger("app_logger") logger.setLevel(logging.INFO) # Create a file handler logHandler = logging.FileHandler('/var/log/app_logger.log') # Configure the JSON logger formatter = jsonlogger.JsonFormatter() logHandler.setFormatter(formatter) logger.addHandler(logHandler) # Example log message logger.info("Application started", extra={"service": "api", "version": "1.0.0"})
Étape 2 : Intégration avec Loki, Promtail et Grafana
Pour collecter, stocker et visualiser efficacement les journaux, vous devez configurer trois composants principaux : Loki pour l’agrégation des journaux, Promtail comme agent d’expédition des journaux et Grafana pour la visualisation.
- Loki Loki est un système d’agrégation de journaux multi-locataires, évolutif horizontalement et hautement disponible, inspiré de Prometheus. Il est conçu pour être très rentable et facile à utiliser, car il n’indexe pas le contenu des journaux, mais plutôt un ensemble d’étiquettes pour chaque flux de journaux. Grafana Loki peut être utilisé pour rechercher, analyser et alerter sur les journaux. Il peut également être utilisé conjointement avec Grafana, un outil de visualisation de données open source populaire, pour créer des tableaux de bord et des visualisations de données de journaux.
- Promtail Promtail (abréviation de « Prometheus Log Tail ») est un démon qui lit les fichiers journaux et envoie les données du journal à une instance Loki. Il est conçu pour fonctionner en conjonction avec Grafana Loki pour fournir une solution d’agrégation et d’analyse de journaux. Promtail s’exécute sur chaque nœud d’un cluster et lit les fichiers journaux, extrayant les métadonnées pertinentes (telles que les étiquettes) et envoyant les données du journal à une instance Loki. Il peut découvrir automatiquement de nouveaux fichiers journaux et peut être configuré pour gérer les journaux provenant de diverses sources, telles que les conteneurs Docker, les pods Kubernetes et les journaux système. Cela permet un système de gestion des journaux plus efficace et centralisé.
- Grafana est l’outil de tableau de bord utilisé pour interroger, visualiser et configurer des alertes pour vos journaux.
Pour des instructions d’installation détaillées, veuillez suivre leur guide d’installation officiel :
Une fois Loki et Promtail configurés, vous pouvez utiliser Grafana pour visualiser vos journaux et créer des alertes pour les conditions critiques, telles que des taux d’erreur élevés ou des problèmes de performances.
Configurer Loki comme source de données dans Grafana
- Grafana est utilisé pour visualiser et surveiller les journaux stockés dans Loki.
- Accédez au tableau de bord Grafana en accédant à http://localhost:3000.
- Accédez à Configuration > Sources de données > Ajouter une source de données.
- Sélectionnez Loki dans la liste des sources de données disponibles et configurez l’URL (par exemple, http://localhost:3100).
Loki comme source de données
- Étape 3 : interroger les journaux avec LogQL
Une fois Loki intégré, vous pouvez utiliser LogQLun langage de requête puissant, pour rechercher, filtrer et analyser vos journaux à partir de la section Explorer.
Conclusion
L’intégration de l’enregistreur Python JSON, Loki, Promtail et Grafana améliore considérablement les pratiques de journalisation, offrant des journaux structurés, des informations en temps réel et des requêtes faciles. Cette configuration offre aux équipes une meilleure observabilité, un débogage plus rapide et une gestion améliorée de l’infrastructure.
VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE
Source link