JSON Logging & Datadog
Warum du JSON für das Logging verwenden solltest
Wenn du heute kein JSON-Logging benutzt, verlässt du dich wahrscheinlich auf Klartext-Logs und Regex, um sie zu verstehen. Das mag anfangs funktionieren, aber es wird anfangen zu brechen, Struktur verlieren und mit wachsender Systeme immer schlechter werden. JSON-Logging ist der Standard. In modernen Anwendungen ist es nicht mehr optional, strukturierte, leicht entschlüsselbare Logs. Es bietet ein gewisses Maß an Konsistenz zwischen den Diensten und bietet dennoch Flexibilität.
Datadog empfiehlt das JSON-Logging aus gutem Grund. Wenn Logs als gültiges JSON ausgegeben werden, parst der Preprozessor von Datadog Ihre Logs automatisch und ordnet sie einer Reihe reservierter Attribute zu, die den Overhead reduzieren und eine konsistente Feldextraktion gewährleisten. Es ist keine zusätzliche Konfiguration erforderlich, da diese reservierten Attribute die relevantesten Felder bereitstellen, die Integration mit anderen Systemen erleichtern, Logs filtern, effizient suchen und Benachrichtigungen einrichten. Wichtige reservierte Attribute umfassen Host, Service, Status, Trace ID, SPAN-ID und weitere, die für Observabilität und Fehlerbehebung unerlässlich sind.
Wie man es einrichtet
Meiner Erfahrung nach gab es eine Fülle von Ressourcen zur besten Konfiguration von JSON-Logging. Die Hauptreferenz, die ich verwendet habe, war die Dokumentation von Datadog: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. ich fand sie am besten, weil Datadog das primäre Observabilitätstool war, das wir verwendet haben, und sie leichter Fehler beheben konnten, falls Probleme auftreten.
Mit den Datadog-Dokumenten als Leitfaden begann ich damit , die logback-spring.xml-Konfigurationsdatei zu erstellen. Hier findet die meiste Arbeit statt. Anfangs habe ich mit verschiedenen JSON-Encodern experimentiert und Felder hinzugefügt, von denen ich dachte, sie könnten hilfreich sein. Schließlich erkannte ich die Kraft der Einfachheit: Eine saubere, minimalistische Konfiguration ist leichter zu warten und weniger wahrscheinlich zu brechen.
<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>
Nachdem ich die erforderlichen Logback-Abhängigkeiten hinzugefügt und diesen Code zu meiner logback-spring.xml-Datei hinzugefügt habe, ist der letzte große Schritt, 'json-logs' als aktives Spring-Profil in deiner Anwendungs-YAML einzustellen. Dies stellt sicher, dass JSON-Logging in Ihrer Umgebung aktiviert ist und über alle Dienste hinweg konsistent funktioniert.
Wenn diese Schritte korrekt befolgt wurden, sollten Sie Ihre Protokolle abschließen und die Ergebnisse sehen können. Sie sollten in einem Schlüssel-Wert-Logbuch ähnlich wie diesem sein:
{"@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"}
An diesem Punkt sollten deine Logs in Datadog strukturiert sein, die Trace-Korrelation sollte für Logs mit Trace-IDs funktionieren, und du solltest detailliertere und konsistentere Attribute sehen.
Häufige Fehler und Ratschläge
- Verwende einen Dateianhänger, wenn das für dein System am besten funktioniert. Für unsere Umgebung passte der Konsolenanschluss besser zu unseren Bedürfnissen
- Lassen Sie sich nicht von der Vielzahl der JSON-Encoder-Optionen mitreißen; Einfacher ist meist besser, zumindest am Anfang
- Überprüfen Sie bestehende Protokollverarbeitungsregeln in Ihrem Datadog-Agenten. Diese Regeln können JSON-Logs stören und verhindern, dass sie korrekt geparst oder geliefert werden. Stelle sicher, dass Legacy-Logger nicht mit deiner Konfiguration kollidieren.
- Für mehr Kontrolle solltest du mehrere Spring-Profile erstellen. Dadurch können Sie zwischen Loging-Ebenen oder -formaten zwischen verschiedenen Umgebungen wechseln, ohne den Anwendungscode ändern zu müssen
- Wenn das Nachverfolgen bei vielen deiner Logs auf Datadog nicht funktioniert, liegt das daran, dass sie automatisch für viele deiner Logs das Samp-Tracing übernehmen. Das JSON funktioniert, keine Sorge, aber du kannst es auf eine andere Rate einstellen.
Mit der richtigen Einrichtung wird das JSON-Logging in Datadog zuverlässig und viel einfacher zu warten. Indem Sie Altannahmen entfernen und Ihre Konfiguration einfach halten, erhalten Sie strukturierte Logs, konsistente Felder, Trace-Korrelation sowie einfachere Filterung und Benachrichtigungen. JSON-Logging ist nicht nur eine Best Practice; Sie ist unerlässlich, um die Beobachtbarkeit in modernen Anwendungen zu verbessern.
Über den Autor
Gefällt dir, was du gehört hast? Haben Sie Fragen dazu, was für Sie am besten ist? Wir würden uns sehr freuen! Kontaktieren Sie uns