Application Real-Time Monitoring Service (ARMS) を使用すると、Java アプリケーションのログにトレース ID を関連付けることができます。これにより、アプリケーションでエラーが発生した場合、トレース ID に関連付けられたログにアクセスして、エラーを特定し、トラブルシューティングすることができます。
前提条件
Application Real-Time Monitoring Service Basic Edition は、この機能をサポートしていません。
Application Real-Time Monitoring Service (ARMS) エージェントが V2.6.1.2 以降にスペックアップされています。詳細については、「Java アプリケーションの ARMS エージェントを更新する」をご参照ください。
ログは、Simple Log Service を使用して収集されます。詳細については、「データ収集の概要」をご参照ください。
背景情報
ARMS では、トレース ID は、Mapped Diagnostic Context(MDC)メカニズムに基づいてアプリケーションのログに関連付けることができます。 Log4j、Log4j 2、Logback などの主要なログ フレームワークがサポートされています。
手順
ARMS コンソール にログオンします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーでリージョンを選択し、アプリケーションをクリックします。
説明[言語] 列のアイコンは、アプリケーションのプログラミング言語を示します。
: Java
: Go
: Python- (ハイフン): Managed Service for OpenTelemetry で監視されているアプリケーション
上部のナビゲーションバーで、 を選択します。
[アプリケーションログ関連付け構成] セクションの [カスタム構成] タブで、[ログソース] を [Log Service SLS] に設定します。[ビジネスログを TraceId と自動的に関連付ける] をオンにし、Simple Log Service がデプロイされているリージョンを選択し、プロジェクトと Logstore をバインドします。
必要に応じて、[ログに traceId が自動的に入力される] と [ログに spanId が自動的に入力される] もオンにすることができます。
説明[ビジネスログを TraceId とリンクする] を有効にすると、ログにトレース ID が自動的に生成されます。この場合、ステップ 5 は無視してください。
エラーのトラブルシューティング方法については、「トレースとログを分析してビジネス例外を特定する」をご参照ください。
(任意) 手動でトレース ID を関連付けます。
ログレイアウトの
Patternプロパティに%X{EagleEye-TraceID}を追加します。SkyWalking プロトコルを使用する場合は、代わりに%X{Skywalking-TraceID}を追加します。%X{span_id}を追加することで、スパン ID を関連付けることもできます。重要スパン ID の関連付けは、ARMS エージェント V4.x 以降でのみサポートされています。
コードで
{EagleEye-TraceID}を取得する方法については、「ARMS SDK」をご参照ください。
以下の例では、Log4j、Log4j2、および Logback フレームワークの構成ファイルを変更する方法について説明します。
Log4j 構成ファイル log4j.properties を変更します:
log4j.appender.warn.layout=org.apache.log4j.PatternLayout log4j.appender.warn.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %m%nLog4j2 構成ファイル log4j2.xml を変更します:
パターンレイアウト
<console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %m%n"/> <!-- パターンレイアウト --> </console>JsonLayout
NoneLogback 構成ファイル logback.xml を変更します。
PatternLayout
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %msg%n</pattern> </encoder>JsonLayout
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp/> <threadName/> <logLevel/> <loggerName/> <message/> <callerData/> <stackTrace/> <pattern> <pattern> { "EagleEye-TraceID": "%X{EagleEye-TraceID}", "span_id": "%X{span_id}" } </pattern> </pattern> </providers> </encoder>
アプリケーションを再起動します。
トレース ID がアプリケーション ログに表示されている場合、ログは次の図に示すようにトレース ID に関連付けられます。

(オプション) ログ収集を設定し、アプリケーションログをプロジェクトと Logstore にアップロードします。
デフォルトでは、Java 用 ARMS エージェントはアプリケーションログを収集しません。