トレース
トレースは、リクエストがアプリケーションの異なるコンポーネントを通過する際の全体的な流れを表現します。
ログやメトリクスとは異なり、トレース は複数のアプリケーションやサービスからのイベントで構成され、レスポンスのレイテンシー、サービスの障害、リクエストパラメータ、メタデータなど、サービス間の接続に関する情報も含まれます。
ログ とトレースには概念的な類似性がありますが、トレースはクロスサービスのコンテキストで考慮されることを意図しているのに対し、ログは通常、単一のサービスやアプリケーションの実行に限定されます。
今日の開発者は、モジュール化された分散アプリケーションの構築を志向しています。 Service Oriented Architecture と呼ぶ人もいれば、マイクロサービス と呼ぶ人もいます。 名称に関係なく、これらの疎結合なアプリケーションで問題が発生した場合、ログやイベントを見るだけでは、インシデントの根本原因を追跡するのに十分ではない場合があります。 リクエストフローの完全な可視性を持つことが不可欠であり、これがトレースが価値を提供する部分です。 トレースは、エンドツーエンドのリクエストフローを描写する因果関係のある一連のイベントを通じて、その可視性を提供します。
トレースは、システムに入ってくるリクエストの流れに関する基本的な情報を提供するため、オブザーバビリティの重要な柱となっています。
トレースの一般的なユースケースには、パフォーマンスのプロファイリング、本番環境の問題のデバッグ、障害の根本原因分析が含まれます。
すべての統合ポイントを計装する
すべてのワークロード機能とコードが 1 か所にある場合、ソースコードを見てリクエストが異なる機能間でどのように受け渡されるかを確認するのは簡単です。 システムレベルでは、アプリケーションが実行されているマシンを把握でき、問題が発生した場合は迅速に根本原因を特定できます。 異なるコンポーネントが疎結合で分散環境で実行されているマイクロサービスベースのアーキテクチャでこれを行うことを想像してみてください。 相互接続されたリクエストからそれぞれのログを確認するために、多数のシステムにログインすることは、不可能でなくとも非現実的でしょう。
これはオブザーバビリティが役立つところです。 計装はオブザーバビリティを向上させるための重要なステップです。 広義では、計装とはコードを使用してアプリケーション内のイベントを測定することです。
一般的な計装アプローチは、システムに入る各リクエストに一意のトレース識別子を割り当て、追加のメタデータを付加しながら、そのトレース ID を異なるコンポーネント間で伝播させることです。
あるサービスから別のサービスへのすべての接続は、トレースを中央コレクターに送信するように計装する必要があります。このアプローチにより、ワークロードの不透明な側面を可視化できます。
自動計装エージェントやライブラリを使用することで、アプリケーションの計装は大部分を自動化できます。
トランザクション時間とステータスの測定が重要です!
適切に計装されたアプリケーションは、エンドツーエンドのトレースを生成できます。これは以下のようなウォーターフォールグラフとして表示できます:
またはサービスマップとして表示できます:
すべての相互作用におけるトランザクション時間とレスポンスコードを測定することが重要です。 これにより、全体的な処理時間を計算し、SLA、SLO、またはビジネス KPI との適合性を追跡することができます。
相互作用のレスポンス時間とステータスコードを理解し記録することでのみ、全体的なリクエストパターンとワークロードの健全性に影響を与える要因を把握することができます。
メタデータ、アノテーション、ラベルは最高の味方です
トレースは永続化され、一意の ID が割り当てられ、各トレースは スパン または セグメント (使用するツールによって異なります) に分割され、リクエストパス内の各ステップが記録されます。 スパンは、トレースが相互作用するエンティティを示し、親トレースと同様に、各スパンには一意の ID とタイムスタンプが割り当てられ、追加のデータやメタデータも含めることができます。 この情報は、問題が発生した正確な時間と場所を示すため、デバッグに役立ちます。
これは実践的な例で説明するのが最適です。 E コマースアプリケーションは、認証、認可、配送、在庫、決済処理、注文処理、商品検索、レコメンデーションなど、多くのドメインに分かれている場合があります。 これらの相互接続されたドメインからのトレースをすべて検索するのではなく、トレースに顧客 ID でラベル付けすることで、その特定の人に関連する相互作用のみを検索できます。 これにより、運用上の問題を診断する際に、即座に検索範囲を絞り込むことができます。
ベンダー間で命名規則は異なる場合がありますが、各トレースにメタデータ、ラベル、またはアノテーションを追加でき、これらはワークロード全体で検索可能です。 追加にはコードの記述が必要ですが、ワークロードのオブザーバビリティを大幅に向上させます。
トレースはログではないため、トレースに含めるメタデータは必要最小限にしてください。 また、高いサンプリングレートであっても、トレースデータはフォレンジックや監査を目的としたものではありません。