JSON Logging & Datadog
Pourquoi utiliser le JSON pour la journalisation
Si vous n’utilisez pas la journalisation JSON aujourd’hui, vous comptez probablement sur les journaux en clair et les regex pour les comprendre. Cela peut fonctionner au début, mais cela commencera à se décomposer, à perdre sa structure, et à empirer à mesure que les systèmes grandissent. La journalisation JSON est la norme. Dans les applications modernes, disposer de journaux structurés et facilement analysables n’est plus optionnel. Cela offre un certain niveau de cohérence entre les services tout en conservant de la flexibilité.
Datadog recommande la journalisation JSON pour une raison. Lorsque les journaux sont émis en JSON valide, le préprocesseur de Datadog analyse automatiquement vos journaux et les associe à un certain nombre d’attributs réservés qui réduisent la surcharge et garantissent une extraction cohérente des champs. Aucune configuration supplémentaire n’est nécessaire car ces attributs réservés fournissent les champs les plus pertinents, facilitant l’intégration avec d’autres systèmes, le filtrage des journaux, la recherche efficace et la mise en place des alertes. Les attributs réservés cruciaux incluent l’hôte, le service, le statut, l’id de trace, l’id span, et d’autres, essentiels pour l’observabilité et le dépannage.
Comment l’installer
D’après mon expérience, il y avait une abondance de ressources pour mieux configurer la journalisation JSON. La principale référence que j’ai utilisée était la documentation de Datadog : https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. j’ai trouvé que c’était le mieux car Datadog était l’outil principal d’observabilité que nous utilisions et ils pouvaient dépanner plus facilement si des problèmes survenaient.
En utilisant la documentation Datadog comme guide, j’ai commencé par créer le fichier de configuration logback-spring.xml . C’est là que se fait la majeure partie du travail. Au début, j’ai expérimenté divers encodeurs JSON et ajouté des champs que je pensais utiles. Finalement, j’ai compris le pouvoir de la simplicité : une configuration propre et minimaliste est plus facile à entretenir et moins susceptible de se casser.
<springProfile name="json-logs">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
Après avoir ajouté les dépendances de connexion requises et ajouté ce code à mon fichier logback-spring.xml, la dernière étape majeure consiste à définir 'json-logs' comme profil Spring actif dans le YAML de votre application. Cela garantit que la journalisation JSON est activée dans tout votre environnement et fonctionne de manière cohérente sur tous les services.
Si ces étapes ont été suivies correctement, vous devriez pouvoir suivre vos journaux et voir les résultats. Ils devraient être dans un journal clé-valeur similaire à celui-ci :
{"@timestamp":"2025-1-13T13:02:27.512333-02:00","@version":"1","message":"Tomcat initialized with port 8080(http)",
"logger_name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","thread_name":"main","level":"INFO",
"level_value":20000,"appName":"json-logs"}
À ce stade, vos journaux dans Datadog devraient être structurés, la corrélation de traces devrait fonctionner pour les journaux avec des identifiants de trace, et vous devriez voir des attributs plus détaillés et cohérents.
Erreurs courantes et conseils
- Utilisez un fichier annexe si cela fonctionne le mieux pour votre système. Pour notre environnement, l’appendice console répondait mieux à nos besoins
- Ne vous laissez pas emporter par la variété des options d’encodeurs JSON ; Plus simple, c’est généralement mieux, du moins au début
- Vérifiez les règles de traitement des journaux existantes dans votre agent Datadog. Ces règles peuvent interférer avec les journaux JSON et empêcher qu’ils soient correctement analysés ou livrés. Assurez-vous que les loggers hérités ne sont pas en conflit avec votre configuration
- Pour plus de contrôle, envisagez de créer plusieurs profils Spring. Cela vous permet de basculer entre les niveaux de journalisation ou les formats entre environnements sans modifier le code de l’application
- Si le traçage ne fonctionne pas pour beaucoup de vos journaux sur Datadog, c’est parce qu’ils échantillonnent automatiquement le traçage pour beaucoup de vos journaux. Le JSON fonctionne, ne vous inquiétez pas, mais vous pouvez le régler à un rythme différent
Avec la bonne configuration, la connexion JSON dans Datadog devient fiable et beaucoup plus facile à maintenir. En supprimant les hypothèses héritées et en gardant votre configuration simple, vous obtenez des journaux structurés, des champs cohérents, une corrélation de traces, ainsi qu’un filtrage et une alerte plus faciles. La journalisation JSON n’est pas seulement une bonne pratique ; Il est essentiel pour améliorer l’observabilité dans les applications modernes.
À propos de l’auteur
Tu as aimé ce que tu as entendu ? Vous avez des questions sur ce qui vous convient ? Nous serions ravis de discuter ! Contactez-nous