View a markdown version of this page

Abilitazione della correlazione tra traccia e log - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Abilitazione della correlazione tra traccia e log

In Application Signals è possibile abilitare la correlazione tra traccia e log. Questo inserisce automaticamente gli ID di traccia e gli ID di intervallo nei log delle applicazioni pertinenti. Dopodiché, quando si apre una pagina dei dettagli di traccia nella console Application Signals, le voci di log pertinenti (se presenti) correlate alla traccia corrente vengono visualizzate automaticamente nella parte inferiore della pagina.

Ad esempio, se noti un picco in un grafico di latenza, puoi selezionare il punto corrispondente sul grafico per caricare le informazioni di diagnostica relative a quel momento. Quindi puoi scegliere la traccia pertinente per ottenere maggiori informazioni. Quando visualizzi le informazioni relative alla traccia, puoi scorrere verso il basso per vedere i log associati alla traccia. Questi log potrebbero rivelare schemi o codici di errore associati ai problemi che causano il picco di latenza.

Strumentate l'applicazione prima di configurare la correlazione dei log di tracciamento

L'applicazione deve essere già configurata per Application Signals prima di configurare la correlazione dei trace log. La strumentazione Application Signals è ciò che compila i valori trace_idspan_id, e trace_flags MDC in fase di esecuzione. Senza strumentazione, questi valori rimangono vuoti (ad esempiotrace_id=) e la correlazione non funziona.

Per ottenere la correlazione tra traccia e log, Application Signals si basa su quanto segue:

La OpenTelemetry comunità fornisce tutte queste strumentazioni. Application Signals le utilizza per inserire contesti di traccia come ID di traccia e ID di intervallo nei log delle applicazioni. Per abilitare la correlazione, è necessario modificare manualmente la configurazione di registrazione per abilitare l'instrumentazione automatica.

A seconda dell'architettura su cui viene eseguita l'applicazione, potrebbe essere necessario impostare anche una variabile di ambiente per abilitare la correlazione tra traccia e log, oltre a seguire i passaggi descritti in questa sezione.

  • Su Amazon EKS, non è necessaria alcuna variabile di ambiente aggiuntiva. È comunque necessario configurare l'output di registrazione come descritto negli esempi seguenti e il logger deve scrivere su stdout in modo che Container Insights possa raccogliere i log.

  • Su Amazon ECS, non è necessaria alcuna variabile di ambiente aggiuntiva. È comunque necessario configurare l'output di registrazione come descritto negli esempi seguenti e il logger deve scrivere su stdout in modo che Container Insights possa raccogliere i log.

  • Su Amazon EC2, consulta il passaggio 4 della procedura riportata in Passaggio 3: instrumentazione e avvio dell'applicazione.

OpenTelemetry Container Insights non abilita automaticamente la correlazione dei log di traccia

L'attivazione del percorso di raccolta dei log di OpenTelemetry-based Container Insights (ad esempio, tramite il componente aggiuntivo CloudWatch Observability EKS) raccoglie e invia i log dei container ai CloudWatch Logs, ma non strumenta l'applicazione per Application Signals né inserisce il contesto di traccia in tali log. Per correlare le tracce con i log, è necessario abilitare separatamente la strumentazione Application Signals e configurare il modello di registrazione come descritto in questa pagina.

Dopo aver abilitato la correlazione dei log di traccia, quando si apre una pagina dei dettagli della traccia, tutte le voci di registro che contengono lo stesso ID di traccia vengono visualizzate automaticamente nella parte inferiore della pagina. Con la correlazione dei log di traccia, è possibile passare rapidamente da una traccia ai log dell'applicazione pertinenti senza effettuare ricerche manuali.

Esempi di configurazione della correlazione tra traccia e log

Questa sezione contiene esempi di impostazione della correlazione tra traccia e log in diversi ambienti.

Spring Boot per Java

Supponiamo di avere un'applicazione Spring Boot in una cartella chiamata custom-app. La configurazione dell'applicazione è in genere un file YAML denominato custom-app/src/main/resources/application.yml che potrebbe somigliare a questo:

spring: application: name: custom-app config: import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/} ...

Per abilitare la correlazione tra traccia e log, aggiungi la seguente configurazione di registrazione.

spring: application: name: custom-app config: import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/} ... logging: pattern: level: trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p
Spring Boot e la configurazione XML sono alternative

L'approccio Spring Boot application.yml (logging.pattern.level) e gli approcci di configurazione Logback/Log4j2/Log4j XML mostrati nelle sezioni seguenti sono alternative. Usate l'uno o l'altro, non entrambi. Se imposti il patternapplication.yml, la configurazione Logback predefinita di Spring Boot lo riprende automaticamente e non logback.xml è necessario separarlo.

EKS ed ECS: scrivi i log su stdout

Container Insights raccoglie i log dal contenitore stdout/stderr, non dai file scritti all'interno del contenitore. Configura il tuo logger per scrivere sulla console (stdout). Una FileAppender scrittura su un file come questa app.log produce righe con tag di traccia correttamente, ma queste non vengono raccolte e non appaiono correlate nella pagina dei dettagli della traccia. Se è necessario accedere a un file, è inoltre necessario spedire quel file (ad esempio, un raccoglitore sidecar che legge un volume condiviso), il che non rientra nell'ambito di questa pagina.

Logback per Java

Nella configurazione di registrazione (come logback.xml), inserisci il contesto di traccia trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p nel pattern dell'Encoder. Ad esempio, la seguente configurazione antepone il contesto di traccia al messaggio di log.

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n</pattern> </encoder> </appender>

Per ulteriori informazioni sugli encoder in Logback, consulta Encoders nella documentazione di Logback.

Log4j2 per Java

Nella configurazione di registrazione (come log4j2.xml), inserisci il contesto di traccia trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p nel PatternLayout. Ad esempio, la seguente configurazione antepone il contesto di traccia al messaggio di log.

<Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n"/> </Console> </Appenders>

Per ulteriori informazioni sui layout degli schemi in Log4j2, consulta Pattern Layout nella documentazione di Log4j2.

Log4j per Java

Nella configurazione di registrazione (come log4j.xml), inserisci il contesto di traccia trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %5p nel PatternLayout. Ad esempio, la seguente configurazione antepone il contesto di traccia al messaggio di log.

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %5p - %m%n"/> </layout> </appender>

Per ulteriori informazioni sui layout degli schemi in Log4j, consulta Pattern Layout nella documentazione di Log4j.

Python

Imposta la variabile di ambiente OTEL_PYTHON_LOG_CORRELATION su true durante l'esecuzione dell'applicazione. Per ulteriori informazioni, vedete Enable trace context injection nella documentazione di Python OpenTelemetry .

Node.js

Per ulteriori informazioni sull'abilitazione dell'iniezione del contesto di traccia Node.js per le librerie di registrazione che la supportano, consulta le documentazioni sull'utilizzo di NPM delle autostrumentazioni Pino, Winston o Bunyan per. https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan Node.js

Verifica la configurazione

Dopo aver ridistribuito l'applicazione, verificate che una riga di registro mostri ora un campo compilato trace_id (ad esempio, eseguendo). kubectl logs pod-name Quindi aprite una pagina con i dettagli della traccia nella console di Application Signals e verificate che le voci di registro correlate siano visualizzate nella parte inferiore della pagina.

Su Amazon EKS, i log vengono scritti nel gruppo di log dell'applicazione Container Insights (/aws/containerinsights/cluster-name/applicationo /aws/otel/containerinsights/cluster-name/application quando il percorso di log di OpenTelemetry Container Insights è abilitato).