Fermer

septembre 27, 2024

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

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é, débogage et surveillance des performances sont des priorités essentielles. 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.

En savoir plus: Amélioration dynamique de la réponse JSON dans AEM avec les filtres Sling

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 pour un intervalle de temps et un client donnés, vérifions les journaux et trouvons 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.
Non

Tableau de bord

Non

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 Python Enregistreur JSON et intégrez-le à Loki, Promtail et Grafana pour interroger, visualiser et surveiller vos journaux.

Non

Intégration de Loki

En savoir plus: Introduction de Drupal JSON:API

É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 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 (abréviation de « Prometheus Log Tail ») est un démon qui lit les fichiers journaux et envoie les données du journal à une instance de 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.

Configuration de 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
Non

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.

Chez TO THE NEW, nous pensons que Pythonen tant que langage dynamique, a la capacité de fournir les solutions les plus complexes en un minimum de temps. Nous choisissons Python pour fournir des applications métier sur mesure qui nécessitent un développement rapide et des efforts de maintenance supplémentaires liés à l’évolutivité.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link