Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die Korrelation von Ablaufverfolgung zu Protokollen aktivieren
Sie können die Korrelation von Ablaufverfolgung zu Protokollen in Application Signals aktivieren. Dadurch werden automatisch Ablaufverfolgungs-IDs und Span-IDs in die entsprechenden Anwendungsprotokolle eingefügt. Wenn Sie dann eine Ablaufverfolgungs-Detailseite in der Application-Signals-Konsole öffnen, werden die entsprechenden Protokolleinträge (falls vorhanden), die mit der aktuellen Ablaufverfolgung korrelieren, automatisch unten auf der Seite angezeigt.
Angenommen, Sie bemerken z. B. eine Spitze im Latenzdiagramm. Sie können den Punkt im Diagramm auswählen, an dem die Diagnoseinformationen für diesen Zeitpunkt geladen werden sollen. Anschließend wählen Sie die entsprechende Ablaufverfolgung aus, um weitere Informationen zu erhalten. Wenn Sie sich die Ablaufverfolgungsinformationen ansehen, können Sie nach unten scrollen, um die mit der Ablaufverfolgung verknüpften Protokolle zu sehen. Diese Protokolle können Muster oder Fehlercodes aufdecken, die mit den Problemen zusammenhängen, die die Latenzspitze verursacht haben.
Instrumentieren Sie Ihre Anwendung, bevor Sie die Trace-Log-Korrelation konfigurieren
Ihre Anwendung muss bereits für Anwendungssignale instrumentiert sein, bevor Sie die Trace-Log-Korrelation konfigurieren. Die Application-Signals-Instrumentierung füllt die Wertetrace_id,span_id, und trace_flags MDC-Werte zur Laufzeit auf. Ohne Instrumentierung bleiben diese Werte leer (z. B.trace_id=) und die Korrelation funktioniert nicht.
Um eine Korrelation der Ablaufverfolgungsprotokolle zu erreichen, nutzt Application Signals Folgendes:
Automatische Logger-MDC-Instrumentierung
für Java. OpenTelemetry Protokollierungs-Instrumentierung
für Python. Die automatischen Instrumentierungen von Pino
, Winston oder Bunyan für. Node.js
Die OpenTelemetry Community stellt all diese Instrumente zur Verfügung. Application Signals verwendet sie, um Ablaufverfolgungskontexte wie Ablaufverfolgungs-ID und Span-ID in Anwendungsprotokolle einzufügen. Um das zu aktivieren, müssen Sie Ihre Protokollierungskonfiguration manuell ändern, um die automatische Instrumentierung zu aktivieren.
Je nach Architektur, auf der Ihre Anwendung ausgeführt wird, müssen Sie möglicherweise zusätzlich zu den Schritten in diesem Abschnitt auch eine Umgebungsvariable festlegen, um die Korrelation der Ablaufverfolgungsprotokolle zu aktivieren.
Auf Amazon EKS ist keine zusätzliche Umgebungsvariable erforderlich. Sie müssen Ihre Logging-Ausgabe trotzdem wie in den folgenden Beispielen beschrieben konfigurieren, und Ihr Logger muss in stdout schreiben, damit Container Insights die Protokolle sammeln kann.
Auf Amazon ECS ist keine zusätzliche Umgebungsvariable erforderlich. Sie müssen Ihre Logging-Ausgabe trotzdem wie in den folgenden Beispielen beschrieben konfigurieren, und Ihr Logger muss in stdout schreiben, damit Container Insights die Logs sammeln kann.
In Amazon EC2 siehe Schritt 4 des Verfahrens unter Schritt 3: Ihre Anwendung instrumentieren und starten.
OpenTelemetry Container Insights aktiviert die Trace-Log-Korrelation nicht automatisch
Wenn Sie den OpenTelemetry-based Container Insights-Protokollerfassungspfad aktivieren (z. B. über das CloudWatch Observability EKS-Add-on), werden Ihre Container-Logs erfasst und an CloudWatch Logs gesendet, aber Ihre Anwendung wird nicht nach Anwendungssignalen instrumentiert oder Trace-Kontext in diese Protokolle eingefügt. Um Traces mit Logs zu korrelieren, müssen Sie die Application Signals Instrumentation separat aktivieren und Ihr Logging-Muster wie auf dieser Seite beschrieben konfigurieren.
Nachdem Sie die Trace-Log-Korrelation aktiviert haben und eine Trace-Detailseite öffnen, werden alle Logeinträge, die dieselbe Trace-ID enthalten, automatisch unten auf der Seite angezeigt. Mit der Ablaufprotokollkorrelation können Sie schnell von einem Trace zu den entsprechenden Anwendungsprotokollen wechseln, ohne manuell suchen zu müssen.
Beispiele zur Einrichtung der Korrelation von Ablaufverfolgungsprotokollen
Dieser Abschnitt enthält Beispiele für die Einrichtung der Korrelation von Ablaufverfolgungsprotokollen in verschiedenen Umgebungen.
Spring Boot für Java
Angenommen, Sie haben eine Spring-Boot-Anwendung in einem Ordner namens custom-app. Die Anwendungskonfiguration ist normalerweise eine YAML-Datei mit dem Namen custom-app/src/main/resources/application.yml, die wie folgt aussehen könnte:
spring: application: name: custom-app config: import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/} ...
Um die Korrelation von Ablaufverfolgungsprotokollen zu aktivieren, fügen Sie die folgende Protokollierungskonfiguration hinzu.
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 und XML-Konfiguration sind Alternativen
Der Spring Boot application.yml (logging.pattern.level) -Ansatz und die in den folgenden Abschnitten gezeigten Logback/Log4j2/Log4j XML-Konfigurationsansätze sind Alternativen. Verwenden Sie das eine oder das andere, nicht beide. Wenn Sie das Muster angebenapplication.yml, wird es von der Standard-Logback-Konfiguration von Spring Boot automatisch übernommen und es logback.xml ist kein separates Muster erforderlich.
EKS und ECS: Schreiben Sie Protokolle auf stdout
Container Insights sammelt Protokolle aus denen des Containers stdout/stderr, nicht aus Dateien, die in den Container geschrieben wurden. Konfigurieren Sie Ihren Logger so, dass er in die Konsole schreibt (stdout). Beim FileAppender Schreiben in eine Datei wie z. B. werden Zeilen app.log erzeugt, die zwar korrekt mit Trace-Tags versehen sind, aber sie werden nicht erfasst und erscheinen auch nicht korreliert auf der Trace-Detailseite. Wenn Sie sich in eine Datei einloggen müssen, müssen Sie zusätzlich diese Datei versenden (z. B. einen Sidecar-Collector, der ein gemeinsam benutztes Volume liest), was den Umfang dieser Seite sprengt.
Logback für Java
Fügen Sie in der Protokollierungskonfiguration (z. B. logback.xml) den Ablaufverfolgungskontext trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p in pattern von Encoder ein. In der folgenden Konfiguration wird beispielsweise der Ablaufverfolgungskontext der Protokollnachricht vorangestellt.
<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>
Weitere Informationen zu Encodern in Logback unter Encoders
Log4j2 für Java
Fügen Sie in der Protokollierungskonfiguration (z. B. log4j2.xml) den Ablaufverfolgungskontext trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p in PatternLayout ein. In der folgenden Konfiguration wird beispielsweise der Ablaufverfolgungskontext der Protokollnachricht vorangestellt.
<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>
Weitere Informationen zu Musterlayouts in Log4j2 finden Sie unter Muster-Layout
Log4j für Java
Fügen Sie in der Protokollierungskonfiguration (z. B. log4j.xml) den Ablaufverfolgungskontext trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %5p in PatternLayout ein. In der folgenden Konfiguration wird beispielsweise der Ablaufverfolgungskontext der Protokollnachricht vorangestellt.
<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>
Weitere Informationen zu Musterlayouts in Log4j finden Sie unter Klassen-Muster-Layout
Python
Stellen Sie die Umgebungsvariable OTEL_PYTHON_LOG_CORRELATION auf true ein, während Ihre Anwendung ausgeführt wird. Weitere Informationen finden Sie in der
Node.js
Weitere Informationen zur Aktivierung der Trace-Kontext-Injektion in den Protokollierungsbibliotheken, die dies unterstützen, finden Sie in den NPM-Nutzungsdokumentationen der automatischen Instrumentierung von Pino
Überprüfen Sie das Setup
Vergewissern Sie sich nach der erneuten Bereitstellung Ihrer Anwendung, dass in einer Protokollzeile nun ein Wert angezeigt wird, der aufgefüllt ist trace_id (z. B. durch Ausführenkubectl logs ). Öffnen Sie dann eine Trace-Detailseite in der Application Signals Console und vergewissern Sie sich, dass die entsprechenden Protokolleinträge unten auf der Seite angezeigt werden.pod-name
Auf Amazon EKS werden Protokolle in die Container Insights-Anwendungsprotokollgruppe geschrieben (/aws/containerinsights/oder cluster-name/application/aws/otel/containerinsights/ wenn der OpenTelemetry Container Insights-Protokollpfad aktiviert ist).cluster-name/application