トレース サンプリング

トレース サンプリングでは、Cloud Trace が取り込むリクエストとスパンを決定します。これにより、ストレージ費用を管理し、割り当て内に収めながら、パフォーマンスのトラブルシューティングに十分なデータを取得できます。リクエスト量の多い状況を管理するため、分散トレース システムのコンポーネントは通常、トレースのサブセットのみをサンプリングするか、親スパンのサンプリング決定に従います。

サンプリングはコンテキスト伝播とは異なります。サンプリングはコンポーネントがスパンデータを記録するかどうかを制御しますが、コンテキスト伝播はトレース ID をコンポーネント間で渡して、サンプリングされたスパンをリンクできるようにします。

サンプリング戦略

サンプリングの決定は、ヘッドベースとテールベースのいずれかです。ヘッドベースのサンプリングでは、スパンを処理するコンポーネントがリクエストを受信したときにサンプリングの決定が行われます。テールベースのサンプリングでは、トレース全体が使用可能になるまでサンプリングの決定が遅れます。

分散トレース システムのドキュメントで「100% サンプリング」というフレーズが出現する場合があります。このフレーズは、トレースまたはコンポーネントに対して適用します。トレースに適用した場合、すべてのスパンがサンプリングされた、または同等に、トレースが完了したことを意味します。コンポーネントに適用した場合、コンポーネントは、処理するすべてのスパンにサンプリングすることを意味します。

ヘッドベースのサンプリング

ヘッドベースのサンプラーは通常、常にスパンをサンプリングするか、確率的サンプリング戦略を用いるように構成されています。

  • 常にサンプリングの構成では、トレースデータを処理して書き込むコンポーネントはすべてのスパンをサンプリングします。理想的には、すべてのトレースが完了しているため、障害のトラブルシューティングに必要な情報があります。ただし、常にサンプリングする構成では、割り当てまたはストレージ費用の上限を超える場合があります。

  • 確率的サンプリングでは、すべてのスパンがサンプリングされるわけではありません。このアプローチの実際の動作は、コンポーネントの実装によって異なります。一部の実装では、すべてのスパンのサンプリングされる確率は同じです。それ以外では、親のサンプリング決定が、スパンがサンプリングされるかどうかに影響します。

トレースにすべてのスパンが含まれない場合があります。確率的サンプリングを使用している場合、割り当てを超過している場合、またはスパンを処理するがサンプリングしないコンポーネントを使用している場合は、不完全なトレースが予想されます。

テールベースのサンプリング

Cloud Trace はテールベースのサンプリングをサポートしていません。サンプリングの決定は、Cloud Trace にデータを送信するコンポーネントで行う必要があります。

テールベースのサンプリングを使用する場合は、中間サーバーを使用してトレースデータを受信し、サンプリングの決定を評価して、サンプリングされたスパンを Trace に中継することもできます。たとえば、OpenTelemetry Collector を Tail Sampling Processor と使用することで、遅延サンプリングの決定を行うことができます。

テール サンプリングを使用する場合は、次の点を考慮してください。

  • サンプリングの決定を行う前に、すべてのスパンをトレースに保存する必要があります。そのため、大量の一時ストレージが必要になる、または他のオーバーヘッドが発生する場合があります。
  • 一般に、トレースのスパンを生成できるすべてのコンポーネントを調整する必要があります。通常、OpenTelemetry を使用するデベロッパーは、同じトレース ID のすべてのスパンを同じコレクタに転送します。

コンポーネントがサンプリングの決定を行う

処理中のスパンをサンプリングするかどうかは、各コンポーネントで決まります。ただし、トレース コンテキストを介してコンポーネントで使用できる親のサンプリングの決定は、コンポーネントの決定に影響を与える可能性があります。traceparent ヘッダーを使用するアプリケーションは、sampled フラグを使用して親のサンプリング決定を渡すことができます。

たとえば、「親スパンをサンプリングする場合は、現在のスパンをサンプリングし、それ以外の場合はスパンの 50% をサンプリングする」というルールがすべてのコンポーネントにあるとします。このシナリオでは、次のようになります。

  • ルートスパンは、トレース内のすべてのスパンがサンプリングされるかどうかを決定します。
  • ルートスパンがサンプリングされると、トレース内のすべてのスパンがサンプリングされます。したがって、トレースが完了しています。

サンプリングと Google Cloud サービス

各 Google Cloud サービスは独自のサンプリング決定を行います。すべての Google Cloud サービスがサンプリングするわけではありません。つまり、サービスが Cloud Trace にデータを決して送信しない場合があります。

サンプリングが Google Cloud サービスでサポートされている場合、通常、そのサービスは次の処理を実装します。

  • デフォルトのサンプルレート。
  • 親のサンプリング決定を、スパンをサンプリングするかどうかのヒントとして使用するメカニズム。
  • 最大サンプリング レート。

Google Cloud サービスにサンプリングのサポートを追加するようリクエストするには、Google Issue Tracker を使用します。

次のステップ