3.12. Tail Sampling Processor


当所有 span 都完成后,Tail Sampling 处理器会根据用户定义的策略抽样 trace。通过基于尾部的抽样,您可以过滤感兴趣的追踪,并降低数据生成和存储成本。

重要

Tail Sampling 处理器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

此处理器将 span 组合成新的批处理,并剥离原始上下文。

提示
  • 在管道中,将依赖上下文的任何处理器下游放在管道中:例如,在 Kubernetes Attributes Processor 后。
  • 如果扩展 Collector,请确保一个 Collector 实例接收同一 trace 的所有范围,以便此处理器根据指定的抽样策略做出正确的抽样决策。您可以通过设置 Collector 的两层来实现此目的:使用 Load Balancing Exporter 的 Collector 的第一层,以及使用 Tail Sampling Processor 的 Collector 的第二个层。

使用 Tail Sampling Processor 时 OpenTelemetry Collector 自定义资源的示例

# ...
config:
  processors:
    tail_sampling: 
1

      decision_wait: 30s 
2

      num_traces: 50000 
3

      expected_new_traces_per_sec: 10 
4

      policies: 
5

        [
          {
            <definition_of_policy_1>
          },
          {
            <definition_of_policy_2>
          },
          {
            <definition_of_policy_3>
          },
        ]
# ...
Copy to Clipboard Toggle word wrap

1
处理器名称。
2
可选:在处理器对每个 trace 做出抽样决定前,决策延迟时间从第一个范围的时间段内计算。默认值为 30s
3
可选:保存在内存中的追踪数量。默认值为 50000
4
可选:预期每秒新 trace 数量,这有助于分配数据结构。默认为 0。
5
用于追踪评估的策略定义。处理器会根据所有指定的策略评估每个追踪,然后示例或丢弃 trace。

您可以从以下列表中选择和组合策略:

  • 以下策略抽样所有 trace:

    # ...
          policies:
            [
              {
                name: <always_sample_policy>,
                type: always_sample,
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下策略只对位于指定范围内的持续时间进行追踪:

    # ...
          policies:
            [
              {
                name: <latency_policy>,
                type: latency,
                latency: {threshold_ms: 5000, upper_threshold_ms: 10000} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    提供的 500010000 值只是一个示例。您可以通过查看最早的开始时间值和最新结束时间值来估算所需的延迟值。如果省略 upper_threshold_ms 字段,则此策略会抽样超过指定 threshold_ms 值的所有延迟。
  • 以下策略示例根据数字值与 resource 和 record 属性匹配:

    # ...
          policies:
            [
              {
                name: <numeric_attribute_policy>,
                type: numeric_attribute,
                numeric_attribute: {key: <key1>, min_value: 50, max_value: 100} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    提供的 50100 值只是示例。
  • 以下策略示例仅对 trace 的百分比进行抽样:

    # ...
          policies:
            [
              {
                name: <probabilistic_policy>,
                type: probabilistic,
                probabilistic: {sampling_percentage: 10} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    提供的 10 值是一个示例。
  • 以下策略示例根据状态代码对 trace 进行抽样: OKERRORUNSET

    # ...
          policies:
            [
              {
                name: <status_code_policy>,
                type: status_code,
                status_code: {status_codes: [ERROR, UNSET]}
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下策略示例根据字符串值与 resource 和 record 属性匹配:

    # ...
          policies:
            [
              {
                name: <string_attribute_policy>,
                type: string_attribute,
                string_attribute: {key: <key2>, values: [<value1>, <val>*], enabled_regex_matching: true, cache_max_size: 10} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    此策略定义支持完全匹配和常规表达式值。cache_max_size 字段中提供的 10 值是一个示例。
  • 以下策略示例根据每秒 span 率进行追踪:

    # ...
          policies:
            [
              {
                name: <rate_limiting_policy>,
                type: rate_limiting,
                rate_limiting: {spans_per_second: 35} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    提供的 35 值是一个示例。
  • 以下策略示例根据最小和最大 span 数量对 trace 进行抽样:

    # ...
          policies:
            [
              {
                name: <span_count_policy>,
                type: span_count,
                span_count: {min_spans: 2, max_spans: 20} 
    1
    
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    如果 trace 中的所有 span 的总和超出范围阈值,则 trace 不会被抽样。提供的 220 值只是一个示例。
  • 以下通过 TraceState 值的 trace 匹配:

    # ...
          policies:
            [
              {
                name: <trace_state_policy>,
                type: trace_state,
                trace_state: { key: <key3>, values: [<value1>, <value2>] }
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下策略示例根据布尔值属性(资源和记录)进行跟踪:

    # ...
          policies:
            [
              {
                name: <bool_attribute_policy>,
                type: boolean_attribute,
                boolean_attribute: {key: <key4>, value: true}
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下策略示例由给定布尔值 OTTL 条件为 span 或 span 事件进行追踪:

    # ...
          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>\"",
                  ]
                }
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下是一个 AND 策略,它基于多个策略的组合对 trace 进行抽样:

    # ...
          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> ] }
                    },
                  ]
                }
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1
    提供的 50100 值只是示例。
  • 以下是一个 DROP 策略,它根据多个策略的组合从抽样中丢弃 trace:

    # ...
          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}
                    }
                  ]
                }
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
  • 以下策略示例根据前面的抽样器的组合,以及每个 sampler 的排序和速率分配的组合对 trace 进行抽样:

    # ...
          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: 50 
    2
    
                        },
                        {
                          policy: <composite_policy_2>,
                          percent: 25
                        }
                      ]
                  }
              },
            ]
    # ...
    Copy to Clipboard Toggle word wrap
    1 2
    根据应用策略的顺序分配 span 的百分比。例如,如果您在 max_total_spans_per_second 字段中设置了 100 值,您可以在 rate_allocation 部分中设置以下值:policy: <composite_policy_1> 部分中的 50 百分比值代表每秒分配 50 个 span;policy: <composite_policy_2> 部分中的 25 百分比值代表每秒分配 25 个 span。要填充剩余的容量,您可以在 name: <composite_policy_3> 部分的 type 字段中设置 always_sample 值。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部