サービス時間ではなくリクエスト全体の時間を計測する

クライアント側から見たリクエスト全体の時間を計測する方法

OpenTelemetry eBPF Instrumentation は eBPF ベースのアプリケーション自動計装ツールで、サーバーサイドのアプリケーションコードについてリクエストの総時間を追跡できます。

リモートサービスへのリクエストを行う際、クライアントが体感する応答時間は、サーバー側で計測される応答時間とは異なります。

次の図は、クライアント視点で発生しうるさまざまな遅延を示しています。

Web サービスリクエストのライフサイクル
  • Total Request Time: クライアント視点での時間。ネットワーク、ロードバランサー、サービス内部での処理時間によるレイテンシーを含みます。
  • Service Time: サービス視点での時間。ネットワークレイテンシーやロードバランサーのオーバーヘッドは含みません。

サービス時間だけを監視していると、ユーザー体験に影響する重要なパフォーマンスの問題を見落とすかもしれません。 たとえば、ロードバランサーの遅延、ネットワーク輻輳、DNS 解決の問題などです。

eBPF を使うことで、手動による計装ツールの制約を克服できます。 OBI はカーネルの connect / receive / write / close 関数(Go アプリケーションの場合は Go ランタイムにも)にトレースポイントを挿入します。 この低レベルな計装によって、より正確なメトリクスが得られるとともに、クライアント視点でのリクエスト時間を取得できるようになります。

OBI は、複数のスパンに分割されたトレースを報告します。

OBI のトレースとスパン

上の画像は、OBI が報告する典型的なトレースの構造を示しています。

  • Total Request Time: クライアント視点での時間
  • Service Time: サービス視点での時間
  • SQL Time: SQL クエリに費やされた時間(該当する場合)

トレーススパンはカーネルレベルで生成され、クライアント視点でのリクエスト全体の時間を取得できます。 これにより、サービス視点だけでは見えない問題を特定できます。