分散トレース
概要
分散トレースの利用によって、あるアプリケーションから別のアプリケーションへとなされるトランザクション トレースの追跡が可能となります。アプリケーション間で行われる呼び出しの監視ができるため、問題の絞り込みに有用です。
コンテンツ:
トレースとは
トレースはトランザクションの実行フローであり、そのメソッド呼び出し、データベース クエリ、例外を含みます。トランザクションは指定のしきい値を超えると、トレースとして捕捉されます。
分散トレースとは
現代のアプリケーションは、モノリシックなものからマイクロサービスや分散型システムへと進化しています。このような環境における問題の分析には、システム全体に広がる複数のサービスからのデータの関連付けが必要です。問題を診断しトラブルシューティングをするためには、より洗練されたトレースメカニズムが必要です。分散トレースは、アプリケーションやサービスの境界を越えてWebトランザクションの全てのパスをトレースすることが可能です。
分散トレース有効化の要件
- 監視するアプリケーションすべてにAPMインサイト エージェントをインストールしてください。
- エージェントが次のバージョンにアップデートされているか確認ください。
- Javaエージェント バージョン4.9.0
- .NETエージェント バージョン4.8.0
- Node.jsエージェント バージョン1.7.2
- PHPエージェント バージョン3.2
メモ:
- 分散トレースは、1台のApplications Managerで監視するアプリケーション間のみを監視します。複数のApplications Managerをご利用の場合や、当社製品外のリソースを利用していたりする場合は、全体像を統合して見ることはできません。
- 分散トレースが可能な環境は、同じ種類のエージェント同士のみです。例えば、Javaエージェント同士は分散トレースが可能ですが、Javaエージェントと.NETエージェント間の分散トレースはできません。
- PHPエージェントで分散トレースを有効にするには、PHPフレームワークのphp.iniファイルに zpa.capture_distributed_trace=1 というキーを追加してください。
分散トレースのしくみ
- アプリケーションやサービスがAPIリクエストを他アプリやサービスに行うと、Applications ManagerのAPMインサイトは、サービス リクエストの追跡に必要なメタデータを含んだHTTPヘッダーを付加します。
- Applications ManagerのAPMインサイトが対応する他サービスでも有効の場合、受信側でHTTPヘッダーを処理して、呼び出し側にトラッキング情報をレスポンス ヘッダーで返します。
- 呼び出された側のサービスが別のサービスを呼び出す場合は、ヘッダーの伝播が続き、分散システム上のパス全体を、最初のアプリケーションが追跡できるようになっています。
メモ:
- トレースの取得は、各サービスで定義したしきい値レベルを、リクエストが超過した場合のみ発生します
- アプリケーションがプロキシを利用している場合、該当するX-Appmanager-IdキーとX-Appmanager-DT-Dataキーをリクエスト・レスポンス ヘッダーに付加し、エージェントがトランザクションを追跡できるようにしてください。
データの表示
分散トレースを表示するには、次の手順に従います。
- Applications Managerにログインし、APM → アプリケーションと移動します。
- トレースを確認するアプリケーションをクリックしてください。
- [Traces]をクリックすると、トレース欄に、「分散」というタイトルを確認できます。
- こちらに、他のアプリケーションへの呼び出しと対応するトランザクションがリストアップされています。
メトリックと推論
分散トレース タブでは各種メトリックを確認でき、トレースの結果の分析に役立ちます。
分散トレース テーブルで表示されるメトリックは次のとおりです。
パラメーター | 説明 |
---|---|
開始時刻 | トランザクションの開始時刻を表します。 |
トランザクション | トランザクションの名前です。 |
応答時間 | アプリケーションにあるトランザクションが応答に要する時間を指します(ミリ秒)。 |
アプリケーション名 | アプリケーションの名前を指します。 |
アプリケーション名の右側からツリー ビューの展開をクリックすると、リクエストの完了に時間を要しているメソッド呼び出しとコードブロックが表示されます。
通常は、トランザクション トレースはコンテキストの記載なしで表示されます。分散トレースを利用すれば、特定アプリケーションからの1トランザクションでリクエストされたメソッド呼び出しを正確に把握でき、しきい値レベル超過の状況も理解できます。これにより、デバッグの簡略化が可能です。