21.4. サンプリング
サンプラーは、トレースを破棄するか転送するかを決定し、コレクターに送信される収集されたトレースの数を制限することでオーバーヘッドを効果的に削減します。これはリソース消費の管理に役立ち、すべてのリクエストをトレーシングするための膨大なストレージコストと潜在的なパフォーマンスの低下を回避します。
実稼働環境の場合は、インフラストラクチャーコストを最小限に抑えるために、サンプリングを適切に設定する必要があります。
Red Hat build of Keycloak は、次のようないくつかの組み込み OpenTelemetry サンプラーをサポートしています。
- always_on
- always_off
- traceidratio (デフォルト)
- parentbased_always_on
- parentbased_always_off
- parentbased_traceidratio
使用されるサンプラーは、tracing-sampler-type
プロパティーを介して変更できます。
21.4.1. デフォルトのサンプラー
Red Hat build of Keycloak のデフォルトのサンプラーは traceidratio
です。これは、tracing-sampler-ratio
プロパティーで設定可能な指定された比率に基づいてトレースサンプリングのレートを制御します。
21.4.1.1. トレース比率
デフォルトのトレース比率は 1.0
です。これは、すべてのトレースがサンプリングされ、コレクターに送信されることを意味します。比率は (0,1]
の範囲の浮動小数点数です。たとえば、比率が 0.1
の場合、トレースの 10% のみがサンプリングされます。
実稼働環境の場合、トレースストアインフラストラクチャーの膨大なコストを防ぎ、パフォーマンスのオーバーヘッドを回避するために、トレース比率を小さくする必要があります。
21.4.1.2. 理由
サンプラーは、parentbased_traceidratio
サンプラーを使用する場合と同様に、親スパンで行われた決定に関係なく、サンプリングされたスパンの現在の比率に基づいて独自のサンプリング決定を行います。
parentbased_traceidratio
サンプラーは、親スパンと子スパンの間のサンプリングの一貫性を確保するため、推奨されるデフォルトタイプになる可能性があります。具体的には、親スパンがサンプリングされると、そのすべての子スパンもサンプリングされます。つまり、すべてに対して同じサンプリング決定が行われます。すべてのスパンをまとめて保持し、不完全なトレースの保存を防ぐのに役立ちます。
ただし、DoS 攻撃につながる特定のセキュリティーリスクが発生する可能性があります。外部の呼び出し元がトレースヘッダーを操作したり、親スパンを注入したり、トレースストアが過負荷になったりする可能性があります。適切な HTTP ヘッダー (特に tracestate
) フィルタリングと、呼び出し元の信頼性を評価するための十分な対策が必要です。
詳細は、W3C Trace コンテキスト ドキュメントを参照してください。