マイクロサービスアーキテクチャにおけるビジネス上の例外の診断は、困難で時間がかかることがよくあります。Application Real-Time Monitoring Service (ARMS) は、トレースとログを関連付けることでこれを簡素化し、問題の根本原因を迅速に特定して診断効率を向上させることができます。
前提条件
Simple Log Service (SLS) が有効になっていること。有効になっていない場合は、SLS コンソールにログインし、画面の指示に従ってサービスを有効化してください。
プロジェクトが作成済みであること。詳細については、「プロジェクトの管理」をご参照ください。
Logstore が作成済みであること。詳細については、「基本的な Logstore の作成」をご参照ください。
背景情報
トレースとログを使用してトラブルシューティングを行う前に、メトリクス、トレーシング、ロギングという 3 つの主要な概念を理解しておくと役立ちます。
メトリクス:Application Service Request、Application Service Average Response Time、Application Dependent Service Request など、アプリケーションの主要なパフォーマンスメトリクスです。
トレーシング:エンドツーエンドの完全なリクエストパスを表します。単一のトレースは、アプリケーション内のすべての関連するインターフェイス呼び出しとアクションをリンクします。
ロギング:アプリケーションが各インターフェイス呼び出しとリクエスト・レスポンスアクションに対して生成する詳細なビジネスログを指します。
アプリケーションでビジネス上の例外が発生すると、そのメトリクスチャートにはしばしば大きな変動が見られます。これらのチャートを予備分析に使用できます。完全なトレースとビジネスログを調べることで、例外の根本原因を正確に特定できます。
ビジネスログとトレース ID の関連付け
ARMS コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
上部メニューでリージョンを選択し、アプリケーションをクリックします。
説明[Language] 列のアイコンは、アプリケーションのプログラミング言語を示します。
:Java
:Go
:Python[-] (ハイフン):Managed Service for OpenTelemetry で監視されているアプリケーション
左側のナビゲーションバーで、アプリケーションの設定をクリックし、右側でカスタム設定タブをクリックします。
カスタム設定 タブの アプリケーションログの関連付け設定 エリアで、ログソースとして ログサービス を選択し、[ビジネスログとトレース ID の関連付け] スイッチをオンにし、リージョンを選択して、プロジェクトと Logstore をバインドします。
[Associated Index]ドロップダウンリストから、full-text indexを選択します。カスタム設定 タブの左下隅で、保存 をクリックします。
アプリケーションメトリクスによる例外のトラブルシューティング
ARMS コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
上部メニューでリージョンを選択し、アプリケーションをクリックします。
説明[Language] 列のアイコンは、アプリケーションのプログラミング言語を示します。
:Java
:Go
:Python[-] (ハイフン):Managed Service for OpenTelemetry で監視されているアプリケーション
左側のナビゲーションバーで アプリの概要 をクリックし、ページの上部で 概要分析 を選択し、右上隅で対象期間を選択またはカスタマイズします。
概要分析 ページには、[Application Service Request]、[Application Service Average Response Time]、[Application Dependent Service Request] など、対象アプリケーションの主要なメトリクスが表示されます。
概要分析 ページで、アプリケーションメトリックを選択し、その折れ線グラフ上でマウスをドラッグして対象の時間範囲を選択します。
この例では、Application Service Average Response Time メトリクスを使用します。時間範囲を選択すると、ポップアップメニューに [Enter Selected Time Range]、[View Diagnostic Report for Selected Time Range]、[View Traces for Selected Time Range]、[View Logs for Selected Time Range] というオプションが表示されます。
選択した時間範囲のトレースを調査します。
[選択した時間範囲のトレースを表示] をクリックします。
トレースリストパネルで、ステータス が異常なトレースレコード (
アイコンで示されます) を選択し、[TraceId] 列のトレース ID 値をクリックします。トレースレコードの 操作 列にある View Logs をクリックして、その時点のビジネスログを表示し、ビジネス例外の原因を分析することもできます。
[Traces] タブをクリックし、詳細 列の
アイコンをクリックします。メソッドスタック をクリックし、トレース詳細ページでエラーメッセージを見つけ、エラーメッセージにカーソルを合わせると例外の原因が表示されます。
トレース詳細ページの左側には、呼び出し回数と期間を含むメソッド呼び出しのツリーが表示されます。右側には、
java.lang.RuntimeExceptionなどの例外タイプや、「Failed to create Grafana folder」などの特定のエラーメッセージを含む例外の詳細が表示されます。
選択した時間範囲のビジネスログを確認します。
[選択した時間範囲のログを表示] をクリックします。
ログ分析 ページで、例外およびエラー情報を選択してログを表示し、ビジネス例外の原因を特定します。
たとえば、
traceIdを使用してログエントリをフィルタリングし、ログ詳細で例外スタックトレースを表示し、根本原因が Failed to create Grafana folder であるjava.lang.RuntimeExceptionをスローしたRegisterPromClusterServletを特定できます。
インターフェイス呼び出しによる例外のトラブルシューティング
ARMS コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
上部メニューでリージョンを選択し、アプリケーションをクリックします。
説明[Language] 列のアイコンは、アプリケーションのプログラミング言語を示します。
:Java
:Go
:Python[-] (ハイフン):Managed Service for OpenTelemetry で監視されているアプリケーション
左側のナビゲーションペインで Interface Invocation をクリックします。
Interface Invocation ページで、インターフェイスリストエリアの対象インターフェイスをクリックし、Call chain query タブをクリックします。
Call chain query タブで、ステータス が失敗となっている (
で表示) インターフェイス呼び出しレコードを選択します。フィルタリング後、リストには異常なインターフェイス呼び出しレコードが表示されます。テーブルには、
[生成時刻]、[インターフェイス名]、[アプリケーション]、[期間]、[ステータス]、[トレース ID]、および[アクション]列が含まれます。この例では、[ステータス]が302のレコードが 3 つ、期間が 2.5s のレコードが 2 つ表示されています。特定の呼び出しの詳細を調査するには、[アクション]列にある[ログの表示]をクリックします。インターフェイス呼び出しのトレースを表示します。
対象のインターフェイス呼び出しレコードの [TraceId] 列で、トレース ID をクリックします。
[Traces] タブをクリックし、詳細 列の
アイコンをクリックします。メソッドスタック をクリックし、トレース詳細ページでエラーメッセージを見つけ、エラーメッセージにカーソルを合わせると例外の原因が表示されます。
トレース詳細ページの左側には、呼び出し回数と期間を含むメソッド呼び出しのツリーが表示されます。右側には、
java.lang.RuntimeExceptionなどの例外タイプや、「Failed to create Grafana folder」などの特定のエラーメッセージを含む例外の詳細が表示されます。
インターフェイス呼び出しのログを表示します。
対象のインターフェイス呼び出しレコードの 操作 列で View Logs をクリックします。
ログ分析 ページで、例外およびエラー情報を選択してログを表示し、ビジネス例外の原因を特定します。
たとえば、
traceIdを使用してログエントリをフィルタリングし、ログ詳細で例外スタックトレースを表示し、根本原因が Failed to create Grafana folder であるjava.lang.RuntimeExceptionをスローしたRegisterPromClusterServletを特定できます。
関連トピック
メトリクスの異常を検出するためのアラートを作成することもできます。詳細については、「Application Monitoring alert rules」をご参照ください。