ログ相関のトレースを有効にする
Application Signals でログ相関のトレースを有効にできます。これにより、トレース ID とスパン ID が関連するアプリケーションログに自動的に挿入されます。次に、Application Signals コンソールでトレースの詳細ページを開くと、現在のトレースに関連するログエントリがあれば、ページの下部に自動的に表示されます。
例えば、レイテンシーグラフにスパイクがあることに気付いたとします。グラフ上のそのポイントを選択すると、その時点の診断情報をロードできます。次に、関連するトレースを選択すると、詳細情報が表示されます。トレース情報を表示すると、下にスクロールしてそのトレースに関連付けられているログを参照できます。こうしたログを調べると、レイテンシーのスパイクを引き起こしている問題を突き止め、関連するパターンやエラーコードを明らかにできる可能性があります。
トレースログ相関を設定する前にアプリケーションを計装する
トレースログ相関を設定する前に、Application Signals 用にアプリケーションがすでに計装されている必要があります。Application Signals の計装により、ランタイム時に trace_id、span_id、および trace_flags の MDC 値が設定されます。計装がない場合、これらの値は空のままとなり (例えば、trace_id=)、相関機能は動作しません。
トレースログの相関を実現するために、Application Signals は以下を利用します。
Java の場合は Logger MDC 自動計測
。 Python の場合は OpenTelemetry Logging 計測
。
OpenTelemetry コミュニティは、これらの計装をすべて提供しています。Application Signals は、これらを使用して、トレース ID やスパン ID などのトレースコンテキストをアプリケーションログに挿入します。これを有効にするには、自動計測を有効にするようにログ記録設定を手動で変更する必要があります。
アプリケーションが動作するアーキテクチャによっては、このセクションのステップに従うだけでなく、トレースログの相関を有効にする環境変数も設定する必要があります。
Amazon EKS では、追加の環境変数は必要ありません。以下の例で説明されているように、ログ出力の設定はまだ必要であり、Container Insights がログを収集できるように、ロガーは stdout に書き込む必要があります。
Amazon ECS では、追加の環境変数は必要ありません。以下の例で説明されているように、ログ出力の設定はまだ必要であり、Container Insights がログを収集できるように、ロガーは stdout に書き込む必要があります。
Amazon EC2 では、「ステップ 3: 計測を設定しアプリケーションを起動する」の手順のステップ 4 を参照してください。
OpenTelemetry Container Insights はトレースログ相関を自動的に有効にしません
CloudWatch Observability EKS アドオン などを介して OpenTelemetry ベースの Container Insights ログ収集パスを有効にしても、コンテナログは CloudWatch Logs に収集されて転送されますが、Application Signals 用にアプリケーションが計装されるわけではなく、それらのログにトレースコンテキストが注入されるわけではありません。トレースとログを相関させるには、Application Signals の計装を個別に有効にし、かつ、このページで説明されているとおりにログパターンを設定する必要があります。
トレースログ相関を有効にした後、トレース詳細ページを開くと、同じトレース ID を含むログエントリが自動的にページの下部に表示されます。トレースログ相関を使用すると、手動で検索せずに、トレースから関連するアプリケーションログへ迅速に移行できます。
トレースログの相関の設定例
このセクションでは、いくつかの環境でトレースログの相関を設定する例を示します。
Spring Boot for Java
custom-app というフォルダに Spring Boot アプリケーションがあるとします。このアプリケーション設定は通常、custom-app/src/main/resources/application.yml という名前の YAML ファイルであり、次のようになります。
spring: application: name: custom-app config: import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/} ...
トレースログの相関を有効にするには、次のログ記録設定を追加します。
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 と XML 構成は代替手段です
Spring Boot の application.yml (logging.pattern.level) アプローチと、次のセクションに示す Logback/Log4j2/Log4j XML 構成アプローチは代替手段です。両方ではなく、どちらか一方を使用してください。application.yml でパターンを設定すると、Spring Boot のデフォルトの Logback 構成によって自動的に認識され、別の logback.xml は必要ありません。
EKS および ECS: ログを stdout に書き込む
Container Insights は、コンテナ内で書き込まれたファイルではなく、コンテナの stdout/stderr からログを収集します。ロガーがコンソール (stdout) に書き込むように設定します。app.log のようなファイルに書き込む FileAppender は、正しくトレース/タグ付けされた行を生成しますが、これらは収集されず、トレース詳細ページに相関されて表示されることはありません。ファイルにログ記録する必要がある場合は、そのファイルをさらに転送する必要もあります (例えば、共有ボリュームを読み取るサイドカーコレクターなど)。これはこのページのスコープ外です。
Logback for Java
ログ記録設定 (logback.xml など) で、トレースコンテキスト trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p をエンコーダーの pattern に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。
<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>
Logback のエンコーダーの詳細については、Logback ドキュメントの「Encoders
Log4j2 for Java
ログ記録設定 (log4j2.xml など) で、トレースコンテキスト trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p を PatternLayout に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。
<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>
Log4j2 のパターンレイアウトの詳細については、Log4j2 ドキュメントの「Pattern Layout
Log4j for Java
ログ記録設定 (log4j.xml など) で、トレースコンテキスト trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %5p を PatternLayout に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。
<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>
Log4j のパターンレイアウトの詳細については、Log4j ドキュメントの「Class Pattern Layout
Python:
アプリケーションの実行中に環境変数 OTEL_PYTHON_LOG_CORRELATION を true に設定します。詳細については、Python OpenTelemetry ドキュメントの「Enable trace context injection
Node.js
Node.js 対応のロギングライブラリを使用できるように Node.js でトレースコンテキストの挿入を有効にする方法の詳細については、Node.js での Pino
セットアップを確認する
アプリケーションを再デプロイした後、ログ行に trace_id が設定されていることを確認してください (例えば、kubectl logs を実行するなど)。次に、Application Signals コンソールでトレース詳細ページを開き、相関ログエントリがページの下部に表示されることを確認してください。pod-name
Amazon EKS では、ログは Container Insights アプリケーションロググループ (/aws/containerinsights/、または OpenTelemetry Container Insights ログパスが有効な場合は cluster-name/application/aws/otel/containerinsights/) に書き込まれます。cluster-name/application