コンテンツにスキップ

JAVA

Guance を使用して JAVA アプリケーションに接続します:

  • アプリケーションからカスタムメトリクスデータを収集する;
  • アプリケーションからトレースデータを収集する;
  • アプリケーションのすべてのログを管理する。

設定

メトリクス収集

jvm ドキュメント を参照してください

トレース収集

アプリケーションで対応するコレクターを有効にしてから、JAVA agent ツールを使用して traces 情報を取得し、Guance に送信します。

ログ連携

opentelemetry-java(以下「Agent」)は javaagent 方式でアプリケーションに注入されます。アプリケーションが trace 情報を生成した後、MDC を設定することで traceIdspanIdlog のパラメータとして渡せます。これにより、log の出力時に traceIdspanId が付与されます。

MDC について

マッピング診断コンテキスト (MDC) は、さまざまなソースからの交錯したログ出力を区別するためのツールです。— log4j MDC ドキュメント

これはスレッドローカルのコンテキスト情報を含み、ログライブラリが取得する各ログイベントへ複製されます。

OTEL JAVA Agent は、現在の span に関するいくつかの情報を各ログ記録イベントの MDC コピーへ注入します:

  • trace_id 現在のトレース id(Span.current().getSpanContext().getTraceId() と同じ);
  • span_id 現在の span id(Span.current().getSpanContext().getSpanId() と同じ);
  • trace_flags 現在のトレースフラグ。W3C trace flags 形式(Span.current().getSpanContext().getTraceFlags().asHex() と同じ)でフォーマットされます。

これら 3 つの情報は、パターン/フォーマット内で指定することで、ログライブラリが生成するログ文に含めることができます。

ヒント:logback を使用する SpringBoot 設定では、以下のみを上書きすることで MDC をログ行 logging.pattern.level に追加できます:

logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

こうすることで、アプリケーションログを解析する任意のサービスやツールが、トレース/ span をログ文に関連付けられます。

ログ設定

APM ツールによってログ pattern の設定は異なります。logback.xml を例にします:

OpenTelemetry MDC パラメータ:

  • trace_id
  • span_id
<property name="log.pattern" value="%d{HH:mm:ss} [%thread] %-5level %logger{10} [traceId=%X{trace_id} spanId=%X{span_id} userId=%X{user-id}] %msg%n" />

<!-- %m は出力内容、%p はログレベル、%t はスレッド名、%d は日付、%c はクラスの完全名,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

DDTrace MDC パラメータ:

  • dd.service
  • dd.trace_id
  • dd.span_id
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - [%method,%line] %X{dd.service} %X{dd.trace_id} %X{dd.span_id} - %msg%n" />

<!-- %m は出力内容、%p はログレベル、%t はスレッド名、%d は日付、%c はクラスの完全名,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>-

参考ドキュメント

DDTrace Log

springboot-ddtrace-server

springboot-opentelemetry-otlp-server

フィードバック

このページは役に立ちましたか?