Application Real-Time Monitoring Service (ARMS) を使用すると、トレース ID を Java アプリケーションのログに関連付けることができます。このようにして、アプリケーションでエラーが発生した場合、トレース ID に関連付けられたログにアクセスして、エラーを特定し、トラブルシューティングを行うことができます。
前提条件
Application Monitoring ベーシック版では、この機能はサポートされていません。
Application Real-Time Monitoring Service (ARMS) エージェントが V2.6.1.2 以降にアップグレードされていること。詳細については、Java アプリケーションの ARMS エージェントを更新する を参照してください。
ログは Simple Log Service を使用して収集されます。詳細については、データ収集の概要 を参照してください。
背景情報
ARMS では、Mapped Diagnostic Context (MDC) メカニズムに基づいて、トレース ID をアプリケーションのログに関連付けることができます。Log4j、Log4j 2、Logback などの主要なログフレームワークがサポートされています。
手順
ARMS コンソール にログインします。左側のナビゲーションペインで、 を選択します。
アプリケーションリスト ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
: Java アプリケーション
: Go アプリケーション
: Python アプリケーション
ハイフン (-): Managed Service for OpenTelemetry で監視されているアプリケーション。
上部のナビゲーションバーで、
を選択します。アプリケーションログの関連付け構成 セクションの カスタム構成 タブで、ログソース を ログサービス SLS に設定します。 ビジネスログをtraceidに自動的に関連付ける をオンにし、Simple Log Service がデプロイされているリージョンを選択し、プロジェクトとログストアを選択します。
必要に応じて、ログに traceId を自動的に入力する および ログに spanId を自動的に入力する をオンにすることもできます。
説明ビジネスログと TraceId をリンクするを有効にすると、ログにトレース ID が自動的に生成されます。この場合、手順 5 は無視してください。
エラーのトラブルシューティング方法については、トレースとログを分析してビジネス例外を特定する を参照してください。
(オプション) ログのレイアウトのパターン properties に
%X{EagleEye-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%n
Log4j2 構成ファイル log4j2.xml を変更します。
PatternLayout
<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
<JsonLayout complete="false" compact="true" eventEol="true" properties="false" locationInfo="true" includeStacktrace="true" stacktraceAsString="true" objectMessageAsJsonObject="true" > <KeyValuePair key="EagleEye-TraceID" value="${ctx:EagleEye-TraceID}" /> <KeyValuePair key="span_id" value="${ctx:span_id}" /> </JsonLayout>
Logback 構成ファイル 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 に関連付けられています。
(オプション) ログ収集を設定し、アプリケーションログをプロジェクトとログストアにアップロードします。
デフォルトでは、ARMS はアプリケーションログを収集しません。