3.12. Tail Sampling Processor
Tail Sampling Processor は、すべてのスパンの完了時に、ユーザー定義のポリシーに従ってトレースをサンプリングします。テールベースのサンプリングを使用すると、関心のあるトレースをフィルタリングし、データの取り込みと保存のコストを削減できます。
Tail Sampling Processor はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
このプロセッサーは、スパンを新しいバッチに再構成し、スパンから元のコンテキストを削除します。
- このプロセッサーは、パイプラインにおいて、コンテキストに依存するプロセッサーの下流に配置してください。たとえば、Kubernetes Attributes Processor の後に配置します。
- Collector をスケーリングする場合は、指定されたサンプリングポリシーに基づいてこのプロセッサーがサンプリングに関する決定を正しく行えるように、1 つの Collector インスタンスが同じトレースのすべてのスパンを受信するようにしてください。これを実現するには、2 つの Collector レイヤーをセットアップします。1 つ目の Collector レイヤーには Load Balancing Exporter を設定し、2 つ目の Collector レイヤーには Tail Sampling Processor を設定します。
Tail Sampling Processor を使用する場合の OpenTelemetry Collector カスタムリソースの例
# ...
config:
processors:
tail_sampling:
decision_wait: 30s
num_traces: 50000
expected_new_traces_per_sec: 10
policies:
[
{
<definition_of_policy_1>
},
{
<definition_of_policy_2>
},
{
<definition_of_policy_3>
},
]
# ...
次のリストからポリシーを選択して組み合わせることができます。
次のポリシーはすべてのトレースをサンプリングします。
# ... policies: [ { name: <always_sample_policy>, type: always_sample, }, ] # ...次のポリシーは、指定された範囲内の期間のトレースのみをサンプリングします。
# ... policies: [ { name: <latency_policy>, type: latency, latency: {threshold_ms: 5000, upper_threshold_ms: 10000}1 }, ] # ...- 1
- 指定されている
5000および10000という値は例です。最も早い開始時刻の値と最も遅い終了時刻の値を確認することで、必要なレイテンシーの値を推定できます。upper_threshold_msフィールドを省略すると、このポリシーは指定されたthreshold_ms値を超えるすべてのレイテンシーをサンプリングします。
次のポリシーは、リソースおよびレコード属性の数値のマッチによってトレースをサンプリングします。
# ... policies: [ { name: <numeric_attribute_policy>, type: numeric_attribute, numeric_attribute: {key: <key1>, min_value: 50, max_value: 100}1 }, ] # ...- 1
- 指定されている
50および100という値は例です。
次のポリシーは、トレースの一部のみをサンプリングします。
# ... policies: [ { name: <probabilistic_policy>, type: probabilistic, probabilistic: {sampling_percentage: 10}1 }, ] # ...- 1
- 指定されている
10という値は例です。
次のポリシーは、ステータスコード (
OK、ERROR、またはUNSET) 別にトレースをサンプリングします。# ... policies: [ { name: <status_code_policy>, type: status_code, status_code: {status_codes: [ERROR, UNSET]} }, ] # ...次のポリシーは、リソースおよびレコード属性の文字列値のマッチによってトレースをサンプリングします。
# ... policies: [ { name: <string_attribute_policy>, type: string_attribute, string_attribute: {key: <key2>, values: [<value1>, <val>*], enabled_regex_matching: true, cache_max_size: 10}1 }, ] # ...- 1
- このポリシー定義は、完全一致と正規表現による値のマッチングの両方をサポートしています。
cache_max_sizeフィールドに指定されている10という値は例です。
次のポリシーは、1 秒あたりのスパン数のレートによってトレースをサンプリングします。
# ... policies: [ { name: <rate_limiting_policy>, type: rate_limiting, rate_limiting: {spans_per_second: 35}1 }, ] # ...- 1
- 指定されている
35という値は例です。
次のポリシーは、スパンの最小数と最大数 (両端の値を含む) によってトレースをサンプリングします。
# ... policies: [ { name: <span_count_policy>, type: span_count, span_count: {min_spans: 2, max_spans: 20}1 }, ] # ...- 1
- トレース内の全スパンの合計がしきい値の範囲外である場合、トレースはサンプリングされません。指定されている
2および20という値は例です。
次のポリシーは、
TraceState値のマッチによってトレースをサンプリングします。# ... policies: [ { name: <trace_state_policy>, type: trace_state, trace_state: { key: <key3>, values: [<value1>, <value2>] } }, ] # ...次のポリシーは、ブール属性 (リソースとレコード) によってトレースをサンプリングします。
# ... policies: [ { name: <bool_attribute_policy>, type: boolean_attribute, boolean_attribute: {key: <key4>, value: true} }, ] # ...次のポリシーは、スパンまたはスパンイベントの特定の OTTL ブール条件によってトレースをサンプリングします。
# ... policies: [ { name: <ottl_policy>, type: ottl_condition, ottl_condition: { error_mode: ignore, span: [ "attributes[\"<test_attr_key_1>\"] == \"<test_attr_value_1>\"", "attributes[\"<test_attr_key_2>\"] != \"<test_attr_value_1>\"", ], spanevent: [ "name != \"<test_span_event_name>\"", "attributes[\"<test_event_attr_key_2>\"] != \"<test_event_attr_value_1>\"", ] } }, ] # ...次のポリシーは、複数のポリシーの組み合わせに基づいてトレースをサンプリングする
ANDポリシーです。# ... policies: [ { name: <and_policy>, type: and, and: { and_sub_policy: [ { name: <and_policy_1>, type: numeric_attribute, numeric_attribute: { key: <key1>, min_value: 50, max_value: 100 }1 }, { name: <and_policy_2>, type: string_attribute, string_attribute: { key: <key2>, values: [ <value1>, <value2> ] } }, ] } }, ] # ...- 1
- 指定されている
50および100という値は例です。
次のポリシーは、複数のポリシーの組み合わせに基づいてサンプリングからトレースをドロップする
DROPポリシーです。# ... policies: [ { name: <drop_policy>, type: drop, drop: { drop_sub_policy: [ { name: <drop_policy_1>, type: string_attribute, string_attribute: {key: url.path, values: [\/health, \/metrics], enabled_regex_matching: true} } ] } }, ] # ...次のポリシーは、上記のサンプラーを組み合わせて、順序付けとサンプラーごとのレート割り当てを使用してトレースをサンプリングします。
# ... policies: [ { name: <composite_policy>, type: composite, composite: { max_total_spans_per_second: 100,1 policy_order: [<composite_policy_1>, <composite_policy_2>, <composite_policy_3>], composite_sub_policy: [ { name: <composite_policy_1>, type: numeric_attribute, numeric_attribute: {key: <key1>, min_value: 50} }, { name: <composite_policy_2>, type: string_attribute, string_attribute: {key: <key2>, values: [<value1>, <value2>]} }, { name: <composite_policy_3>, type: always_sample } ], rate_allocation: [ { policy: <composite_policy_1>, percent: 502 }, { policy: <composite_policy_2>, percent: 25 } ] } }, ] # ...- 1 2
- 適用されるポリシーの順序に従ってスパンの割合を割り当てます。たとえば、
max_total_spans_per_secondフィールドに100という値を設定した場合、rate_allocationセクションで次のように値を設定できます。policy: <composite_policy_1>セクションで、50パーセントの値を設定して 1 秒あたり 50 スパンを割り当てます。policy: <composite_policy_2>セクションで、25パーセントの値を設定して 1 秒あたり 25 スパンを割り当てます。残りの容量を埋めるには、name: <composite_policy_3>セクションのtypeフィールドにalways_sample値を設定できます。