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. デフォルトの sampler
Red Hat ビルドの 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 ヘッダー(特に トレース状態
)のフィルタリングと、呼び出し元の信頼に関する適切な測定を評価する必要があります。
詳細は、W3C Trace コンテキスト のドキュメント を参照してください。