

# ログ相関のトレースを有効にする
<a name="Application-Signals-TraceLogCorrelation"></a>

Application Signals でログ相関のトレースを有効にできます。これにより、トレース ID とスパン ID が関連するアプリケーションログに自動的に挿入されます。次に、Application Signals コンソールでトレースの詳細ページを開くと、現在のトレースに関連するログエントリがあれば、ページの下部に自動的に表示されます。

例えば、レイテンシーグラフにスパイクがあることに気付いたとします。グラフ上のそのポイントを選択すると、その時点の診断情報をロードできます。次に、関連するトレースを選択すると、詳細情報が表示されます。トレース情報を表示すると、下にスクロールしてそのトレースに関連付けられているログを参照できます。こうしたログを調べると、レイテンシーのスパイクを引き起こしている問題を突き止め、関連するパターンやエラーコードを明らかにできる可能性があります。

トレースログの相関を実現するために、Application Signals は以下を利用します。
+ Java の場合は [Logger MDC 自動計測](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/logger-mdc-instrumentation.md)。
+ Python の場合は [OpenTelemetry Logging 計測](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html)。
+ Node.js の場合は [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino)、[Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston)、または [Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) 自動計測。

いずれの計測も、OpenTelemetry コミュニティから提供されています。Application Signals は、これらを使用して、トレース ID やスパン ID などのトレースコンテキストをアプリケーションログに挿入します。これを有効にするには、自動計測を有効にするようにログ記録設定を手動で変更する必要があります。

アプリケーションが動作するアーキテクチャによっては、このセクションのステップに従うだけでなく、トレースログの相関を有効にする環境変数も設定する必要があります。
+ Amazon EKS では、これ以上のステップは必要ありません。
+ Amazon ECS では、これ以上のステップは必要ありません。
+ Amazon EC2 では、「[ステップ 3: 計測を設定しアプリケーションを起動する](CloudWatch-Application-Signals-Enable-EC2Main.md#CloudWatch-Application-Signals-Enable-Other-instrument)」の手順のステップ 4 を参照してください。

トレースログの相関を有効にした後 

## トレースログの相関の設定例
<a name="Application-Signals-TraceLogCorrelation-Examples"></a>

このセクションでは、いくつかの環境でトレースログの相関を設定する例を示します。

**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
```

**Logback for Java**

ログ記録設定 (logback.xml など) で、トレースコンテキスト `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` をエンコーダーの `pattern` に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。

```
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>app.log</file>
  <append>true</append>
  <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](https://logback.qos.ch/manual/encoders.html)」を参照してください。

**Log4j2 for Java**

ログ記録設定 (log4j2.xml など) で、トレースコンテキスト `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` を `PatternLayout` に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。

```
<Appenders>
  <File name="FILE" fileName="app.log">
    <PatternLayout pattern="trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n"/>
  </File>
</Appenders>
```

Log4j2 のパターンレイアウトの詳細については、Log4j2 ドキュメントの「[Pattern Layout](https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout)」を参照してください。

**Log4j for Java**

ログ記録設定 (log4j.xml など) で、トレースコンテキスト `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` を `PatternLayout` に挿入します。例えば、以下の設定はトレースコンテキストの先頭にログメッセージを付加します。

```
<appender name="FILE" class="org.apache.log4j.FileAppender">;
  <param name="File" value="app.log"/>;
  <param name="Append" value="true"/>;
  <layout class="org.apache.log4j.PatternLayout">;
    <param name="ConversionPattern" value="trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n"/>;
  </layout>;
</appender>;
```

Log4j のパターンレイアウトの詳細については、Log4j ドキュメントの「[Class Pattern Layout](https://logging.apache.org/log4j/1.x/apidocs/org/apache/log4j/PatternLayout.html)」を参照してください。

**Python**

アプリケーションの実行中に環境変数 `OTEL_PYTHON_LOG_CORRELATION` を `true` に設定します。詳細については、Python OpenTelemetry ドキュメントの「[Enable trace context injection](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html#enable-trace-context-injection)」を参照してください。

**Node.js**

Node.js 対応のロギングライブラリを使用できるように Node.js でトレースコンテキストの挿入を有効にする方法の詳細については、Node.js での [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino)、[Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston)、[Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) のいずれかの自動計測に NPM を使用する方法を解説したドキュメントを参照してください。