トレース
トレースは、リクエストがアプリケーションのさまざまなコンポーネントを横断する際の全体的な経路を表します。
ログやメトリクスとは異なり、トレースは複数のアプリケーションまたはサービスからのイベントで構成されており、レスポンスのレイテンシー、サービスの障害、リクエストパラメータ、メタデータなど、サービス間の接続に関するコンテキストも含まれています。
ログとトレースの間には概念的な類似性がありますが、トレースはクロスサービスのコンテキストで考慮されることを意図しているのに対し、ログは通常、単一のサービスまたはアプリケーションの実行に限定されています。
今日の開発者は、モジュール式で分散したアプリケーションの構築に傾いています。これらをサービス指向アーキテクチャと呼ぶ人もいれば、マイクロサービスと呼ぶ人もいます。名称に関わらず、これらの疎結合アプリケーションで何か問題が発生した場合、インシデントの根本原因を追跡するためにログやイベントを見るだけでは不十分な場合があります。リクエストフローへの完全な可視性を持つことは不可欠であり、ここでトレースが価値を発揮します。エンドツーエンドのリクエストフローを描写する因果関係のある一連のイベントを通じて、トレースはその可視性を得るのに役立ちます。
トレースは、リクエストがシステムに入り、システムから出るまでのフローに関する基本的な情報を提供するため、オブザーバビリティの重要な柱です。
トレースの一般的なユースケースには、パフォーマンスプロファイリング、本番環境の問題のデバッグ、および障害の根本原因分析が含まれます。
すべての統合ポイントをインストルメント化する
すべてのワークロード機能とコードが一か所にまとまっている場合、ソースコードを見ることでリクエストがさまざまな関数をどのように渡されるかを簡単に確認できます。システムレベルでは、アプリがどのマシンで実行されているかを把握でき、何か問題が発生した場合でも、根本原因を迅速に特定できます。異なるコンポーネントが疎結合で分散環境で実行されているマイクロサービスベースのアーキテクチャでそれを行うことを想像してみてください。相互接続された各リクエストのログを 確認するために多数のシステムにログインすることは、不可能とは言わないまでも、非現実的です。
ここでオブザーバビリティが役立ちます。インストルメンテーションは、そのオブザーバビリティを高めるための重要なステップです。広い意味でのインストルメンテーションとは、コードを使用してアプリケーション内のイベントを計測することです。
一般的なインストルメンテーションのアプローチは、システムに入る各リクエストに一意のトレース識別子を割り当て、そのトレース ID をさまざまなコンポーネントを通過する際に引き継ぎながら、追加のメタデータを付加することです。
あるサービスから別のサービスへのすべての接続は、トレースを中央コレクターに送信するようにインストルメント化する必要があります。このアプローチにより、ワークロードの不透明な側面を可視化できます。