JAVA¶
Guance を使用して JAVA アプリケーションに接続します:
- アプリケーションからカスタムメトリクスデータを収集する;
- アプリケーションからトレースデータを収集する;
- アプリケーションのすべてのログを管理する。
設定¶
メトリクス収集¶
jvm ドキュメント を参照してください
トレース収集¶
アプリケーションで対応するコレクターを有効にしてから、JAVA agent ツールを使用して traces 情報を取得し、Guance に送信します。
ログ連携¶
opentelemetry-java(以下「Agent」)は javaagent 方式でアプリケーションに注入されます。アプリケーションが trace 情報を生成した後、MDC を設定することで traceId と spanId を log のパラメータとして渡せます。これにより、log の出力時に traceId と spanId が付与されます。
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>-