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

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

Chase Hollander
Sviluppatore AEM presso Arbory Digital

Agile Certified Professional, sviluppatore e consulente con esperienza in AEM

Contatta Chase su Linkedin

Ti è piaciuto quello che hai sentito? Hai domande su cosa sia giusto per te? Ci piacerebbe parlare! Contattaci

Articoli correlati

category
AEM Technical Help
tags
number of rows
1