アプリケーションで例外がスローされたり、予期しない動作が発生したりした場合、ログは根本原因を特定するための最も迅速な手段です。Application Real-Time Monitoring Service (ARMS) は、Simple Log Service (SLS) に保存されているアプリケーションログを分散トレース ID と関連付けます。設定後、トレースからそのリクエスト中に記録されたログエントリに直接ジャンプしたり、トレース ID でログを検索して正確な実行パスを特定したりできます。
アプリケーションモニタリングは、新しい課金モードを有効化したユーザー向けに、新しいアプリケーション詳細ページを提供します。詳細については、「課金(新)」をご参照ください。新しい課金モードを有効化していない場合は、[新バージョンに切り替える] をクリックし、[アプリケーション一覧] ページから新しいインターフェイスにアクセスしてください。
仕組み
SLS Logstore を ARMS アプリケーションにバインドすると、ARMS はロギングフレームワークを介してアプリケーションログにトレース ID を挿入します。各ログエントリには、それを生成したリクエストのトレース ID がタグ付けされます。これにより、次の 2 つのワークフローが可能になります。
トレースからログへ:トレースエクスプローラーでトレースを開き、そのリクエスト中に生成されたすべてのログエントリを表示します。
ログからトレースへ:トレース ID でログを検索し、特定のログエントリの分散トレースを特定します。
ARMS は Logstore にログを収集しません。ログ収集は SLS で別途設定してください。詳細については、「データ収集の概要」をご参照ください。
サポートされているロギングフレームワーク
トレース ID の自動挿入は、次の Java ロギングフレームワークで機能します。
log4j
log4j2
Logback
ご利用のアプリケーションが別のロギングフレームワークを使用している場合、自動挿入はサポートされていません。代替アプローチについては、「手動でのトレース ID の取得」をご参照ください。
トレース ID が利用可能な場合
トレースコンテキストは、リクエストのエントリポイントにのみ存在します。これらのコンテキスト外で出力されたログは、トレース ID と関連付けることができません。
| シナリオ | トレース ID は利用可能か? | 理由 |
|---|---|---|
| アプリケーションが HTTP リクエストを受信し、データベースクエリを実行してログを出力する | はい | HTTP エントリポイントがトレースコンテキストを作成する |
| HTTP リクエストがスレッドプールを介して非同期タスクをトリガーし、データベースクエリを実行してログを出力する (エージェント v4.x) | はい | v4.x は非同期スレッド間でトレースコンテキストを伝播する |
| HTTP リクエストがスレッドプールを介して非同期タスクをトリガーし、データベースクエリを実行してログを出力する (エージェント v3.x) | いいえ | v3.x は非同期スレッド間でトレースコンテキストを伝播しない |
| アプリケーションが JDK スレッドプールを使用して、起動時に定期的なデータベースクエリを実行する | いいえ | リクエストのエントリポイントが存在しない |
ログエントリのスレッド名を確認して、どのシナリオが適用されるかを判断してください。Tomcat スレッドは http-nio- で始まり、Dubbo スレッドは DubboServerHandler- で始まります。これらのスレッドからのログには、トレース ID が含まれているはずです。
前提条件
開始する前に、次のものが揃っていることを確認してください。
ARMS によってモニタリングされているアプリケーション。詳細については、「アプリケーションモニタリングの概要」をご参照ください。
Simple Log Service が有効化されていること。Simple Log Service コンソールにログインし、画面の指示に従ってください。
SLS プロジェクト
トレースデータが収集され、SLS にインポートされていること。詳細については、「データ収集の概要」をご参照ください。
ステップ 1:ビジネスログとトレース ID の関連付け
ARMS コンソールにログインします。 左側のナビゲーションウィンドウで、[アプリケーションモニタリング] > [アプリケーションリスト] を選択します。
「[アプリケーション一覧]」ページで、上部のナビゲーションバーからリージョンを選択し、アプリケーション名をクリックします。
説明「[言語]」列は、各アプリケーションが使用する言語を示します:
: Java
: Go
: Pythonハイフン (-): OpenTelemetry 向けマネージドサービスでモニタリングされているアプリケーション
トップナビゲーションバーで、[構成] > [カスタム構成] を選択します。
[アプリケーションログの関連付け構成] セクションで、以下の設定を構成します。
[ログソース] を [Log Service SLS] に設定します。
[ビジネスログを TraceId と自動で関連付ける] をオンにします。
アプリケーションログが保存されているリージョン、プロジェクト、および Logstore を選択します。
[保存] をクリックします。
ステップ 2:ログのクエリと分析
手動でのトレース ID の取得
トレース ID の自動挿入がご利用のロギングフレームワークで機能しない場合は、ARMS SDK for Java を使用してプログラムでトレース ID を取得し、ログメッセージに含めます。
Span span = Tracer.builder().getSpan(); // No new span is created.
String traceId = span.getTraceId();
logger.warn("traceId={} this is your log message", traceId);よくある質問
XML 設定を更新した後、ログからトレース ID が欠落するのはなぜですか?
まず、ログが SLS Logstore に到達していることを確認し、ARMS コンソールの [アプリケーションログ関連付け構成] で正しいプロジェクトと Logstore が選択されていることを確認します。
SLS にログは存在するがトレース ID が欠落している場合、根本原因は問題の範囲によって異なります。
すべてのログでトレース ID が欠落している場合
これらの原因を (最も一般的なものから順に) 確認してください。
ARMS エージェントがマウントされていません。ARMS コンソールでアプリケーションメトリックが正常に表示されることを確認してください。
エージェントまたはプラグインが無効になっています。 アプリケーションの詳細ページに移動し、[プローブスイッチ設定] セクションを [カスタム設定] タブで確認します。メインスイッチと関連するプラグイン(例:Tomcat プラグイン)が有効になっていることを確認してください。
ご利用のサーバーフレームワークがサポートされていません。サポートされていない Web コンテナ、RPC フレームワーク、定期タスクフレームワーク、またはメッセージフレームワークは、トレース ID の挿入を妨げます。完全な互換性リストについては、「ARMS がサポートする Java コンポーネントとフレームワーク」をご参照ください。
ご利用のロギングフレームワークがサポートされていません。log4j、log4j2、および Logback のみがサポートされています。これらのフレームワークを大幅に変更すると、挿入が中断される可能性もあります。
ログの XML 設定にエラーがあります。これを切り分けるには:
エージェント v4.1.6 以降では、トレース ID の自動入力を有効にします。トレース ID が表示される場合、問題は XML 設定にあります。
ARMS SDK を使用して手動でトレース ID を取得します (「手動でのトレース ID の取得」をご参照ください)。トレース ID が返される場合、問題は XML 設定にあります。
どちらの方法でもうまくいかない場合は、チケットを送信してください。
一部のログでトレース ID が欠落している場合
トレースコンテキストは、リクエストのエントリポイント (HTTP インターフェイス、RPC インターフェイス、定期タスク、メッセージ消費) にのみ存在します。これらのコンテキスト外で出力されたログ (例:一般的なバックグラウンド操作中) は、トレース ID と関連付けることができません。詳細な内訳については、「トレース ID が利用可能な場合」をご参照ください。
これらのシナリオのいずれも問題を説明しない場合は、チケットを送信してください。
トレースエクスプローラーからログを表示すると空になるのはなぜですか?
アプリケーションのすべてのログでトレース ID が欠落していないか確認します。その場合は、前のよくある質問をご参照ください。
特定のインターフェイスのみにログがない場合、それらのインターフェイスは内部でログ出力を生成していない可能性があります。
どちらの説明にも該当しない場合は、チケットを送信。
プロジェクトにバインドした後、Logstore にログがないのはなぜですか?
ARMS は、お客様に代わって Logstore にログを収集しません。SLS ドキュメントに従って、SLS でアプリケーションのログ収集を別途設定してください。
ビジネスログは成功するのに、アプリケーションログがトレース ID との関連付けに失敗するのはなぜですか?
エージェント v3.x には、Spring Cloud Gateway の計測に関する既知の問題があります。これを解決するには、エージェント v4.x にアップグレードしてください。
TraceCallable.wrap() でラップした後、非同期タスクのログがトレース ID との関連付けに失敗するのはなぜですか?
エージェント v4.x にアップグレードしてください。v4.x エージェントは、コードの変更を必要とせずに、非同期スレッド間でトレースコンテキストを自動的に伝播します。
トレース ID の自動入力を有効にした後、トレース ID の関連付けに失敗するのはなぜですか?
すべてのログが影響を受ける場合:設定がエージェントに到達できませんでした。Application Configuration Management (ACM) サーバーの接続性を確認してください。詳細については、「Java 用 ARMS エージェントで必要なネットワーク設定」をご参照ください。
一部のログが影響を受ける場合:「XML 設定を更新した後、ログからトレース ID が欠落するのはなぜですか?」をご参照ください。
