JSON Logging & Datadog
Perché dovresti usare JSON per il logging
Se oggi non usi il logging JSON, probabilmente ti affidi ai log in chiaro e ai regex per capirli. All'inizio potrebbe funzionare, ma inizierà a rompersi, perdere struttura e peggiorare sempre di più man mano che i sistemi crescono. Il log JSON è lo standard. Nelle applicazioni moderne, avere logs strutturati e facilmente analizzabili non è più opzionale. Fornisce un livello di coerenza tra i servizi pur mantenendo flessibilità.
Datadog consiglia il logging JSON per un motivo. Quando i log vengono emessi come JSON valido, il preprocessore di Datadog analizza automaticamente i tuoi log e li mappa a un numero di attributi riservati che riducono il sovraccarico e garantiscono un'estrazione coerente dei campi. Non è necessaria alcuna configurazione aggiuntiva poiché questi attributi riservati forniscono i campi più rilevanti, facilitano l'integrazione con altri sistemi, filtrano i log, cerchino in modo efficiente e configurano gli avvisi. Gli attributi riservati cruciali includono host, service, status, trace id, span id e altri, essenziali per l'osservabilità e la risoluzione dei problemi.
Come configurarlo
Per mia esperienza, c'erano molte risorse su come configurare al meglio il logging JSON. Il riferimento principale che ho usato è stata la documentazione di Datadog: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. l'ho trovata migliore perché Datadog era lo strumento principale di osservabilità che usavamo e loro potevano risolvere i problemi più facilmente se si verificavano problemi.
Usando la documentazione di Datadog come guida, ho iniziato creando il file di configurazione logback-spring.xml . Qui avviene la maggior parte del lavoro. Inizialmente ho sperimentato vari encoder JSON e aggiunto campi che pensavo potessero essere utili. Alla fine, ho capito il potere della semplicità: una configurazione pulita e minimalista è più facile da mantenere e meno probabile che si rompa.
<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>
Dopo aver aggiunto le dipendenze di logback richieste e aggiunto questo codice al mio file logback-spring.xml, l'ultimo passo importante è impostare 'json-logs' come profilo Spring attivo nella tua applicazione YAML. Questo garantisce che la registrazione JSON sia abilitata in tutto il tuo ambiente e funzioni in modo coerente su tutti i servizi.
Se questi passaggi sono stati seguiti correttamente, dovresti riuscire a seguire i tuoi log e vedere i risultati. Dovrebbero trovarsi in un registro chiave-valore simile a questo:
{"@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"}
A questo punto, i tuoi log in Datadog dovrebbero essere strutturati, la correlazione tra tracce dovrebbe funzionare per i log con ID di traccia, e dovresti vedere attributi più dettagliati e coerenti.
Errori comuni e consigli
- Usa un file appender se funziona meglio per il tuo sistema. Per il nostro ambiente, l'appendice della console si adattava meglio alle nostre esigenze
- Non farti prendere dalla varietà di opzioni di encoder JSON; Più semplice è di solito meglio, almeno all'inizio
- Controlla le regole di elaborazione dei log esistenti nel tuo agente Datadog. Queste regole possono interferire con i log JSON e impedirne che vengano analizzate o consegnate correttamente. Assicurati che i log legacy non siano in conflitto con la tua configurazione
- Per avere più controllo, considera di creare più profili Spring. Questo ti permette di alternare livelli di logging o formati tra ambienti senza cambiare il codice applicativo
- Se il tracciamento non funziona per molti dei tuoi log su Datadog, è perché campionano automaticamente il tracciamento per molti dei tuoi log. Il JSON funziona, non preoccuparti, ma puoi impostarlo a una velocità diversa
Con la giusta configurazione, il login JSON in Datadog diventa affidabile e molto più facile da mantenere. Eliminando le ipotesi legacy e mantenendo la configurazione semplice, ottieni log strutturati, campi coerenti, correlazione tra tracce e filtraggio e avvisi più semplici. Il logging JSON non è solo una buona pratica; È essenziale per migliorare l'osservabilità nelle applicazioni moderne.
Informazioni sull'autore
Ti è piaciuto quello che hai sentito? Hai domande su cosa sia giusto per te? Ci piacerebbe parlare! Contattaci