4. 样本采集策略:固定采样率、自适应采样、头部采样与尾部采样、采样优先级与标签

样本采集策略决定了哪些 Trace 数据会被保留下来用于后续的慢路径分析。错误的策略会导致关键慢 Trace 被丢弃,或者存储被大量无关数据填满。Tempo 提供了四种核心策略维度,需要根据业务场景组合使用。

4.1 固定采样率(Fixed Sampling)

最简单的策略,对所有 Trace 按统一概率进行采样。适用于流量稳定、对采样精度要求不高的场景。

参数 说明 推荐值
sample_rate 全局采样概率,0.0 ~ 1.0 0.1(高流量)~ 0.5(低流量)
max_traces_per_second 每秒最大采样数,防止突发流量打爆后端 100 ~ 500
避坑提示: 固定采样率在流量突降时会导致采样数骤减,可能漏掉偶发慢 Trace。建议配合自适应采样使用。

4.2 自适应采样(Adaptive Sampling)

根据后端负载和 Trace 特征动态调整采样率。Tempo 的 Adaptive Processor 会监控每个 Service/Endpoint 的延迟分布,对慢 Trace 提高采样概率,对正常 Trace 降低概率。

# tempo-sampler.yaml 自适应采样配置示例
overrides:
  defaults:
    adaptive_sampling:
      enabled: true
      # 目标每秒采样数,根据后端容量设定
      target_samples_per_second: 200
      # 慢 Trace 的采样权重倍率(相对于正常 Trace)
      slow_trace_weight: 5.0
      # 自适应窗口(秒),用于计算延迟分布
      adaptation_window: 60s
最佳实践: 自适应采样应作为生产环境的默认策略。它能在不增加存储压力的前提下,将慢 Trace 的捕获率提升 3~5 倍。

4.3 头部采样与尾部采样

这是两个完全不同的采样时机,直接影响你能分析到什么级别的数据。

维度 头部采样(Head-based) 尾部采样(Tail-based)
决策时机 Trace 开始时(第一个 Span 创建时) Trace 结束后(所有 Span 到达后)
决策依据 Trace ID 哈希、固定概率 完整 Trace 的延迟、错误码、标签
慢 Trace 捕获 随机捕获,无法保证慢 Trace 被选中 可精确捕获 P99/P999 慢 Trace
存储开销 低,无需缓存完整 Trace 高,需要缓存所有 Span 直到决策
适用场景 高吞吐、对慢路径不敏感 慢路径分析、SLO 监控
重要: 尾部采样是慢 Trace 复盘的核心前提。如果只使用头部采样,P99 以上的极端慢 Trace 几乎不可能被捕获到。Tempo 的 Tail Sampling Processor 需要配合足够的缓存(建议至少 10 倍于目标采样率的 Span 缓存)。

4.4 采样优先级与标签

当多种采样策略同时生效时,需要明确的优先级规则。Tempo 按以下顺序判断一个 Trace 是否被采样:

  1. 强制采样标签:如果 Trace 携带 sampling.priority=high 或 x-tempo-sampling-priority=1,必须采样。
  2. 策略匹配:根据 Service/Endpoint 匹配的自定义采样策略。
  3. 自适应采样:根据延迟分布动态计算概率。
  4. 固定采样率:兜底策略,按全局概率采样。

标签(Labels)在采样中起到关键作用:

  • 业务标签:如 order_type=premium、region=us-east,可用于按业务维度提高采样率。
  • 错误标签:如 error=true,自动提升采样优先级。
  • 自定义标签:通过 tempo.sampling.override=true 强制覆盖采样决策。
Tempo 样本采集策略决策流程 Trace 到达 步骤1:检查强制采样标签 sampling.priority=high / x-tempo-sampling-priority=1 步骤2:Service/Endpoint 策略匹配 按业务标签、错误标签匹配自定义策略 步骤3:自适应采样 基于延迟分布动态计算采样概率 步骤4:固定采样率(兜底) 全局概率采样,确保基础数据量 采样决策:保留/丢弃 优先级从高到低:强制标签 > 策略匹配 > 自适应 > 固定采样率

4.5 策略组合推荐

针对慢 Trace 复盘场景,推荐以下组合策略:

  • 核心服务:尾部采样 + 自适应采样 + 强制标签(对关键业务 Trace 打 sampling.priority=high)。
  • 边缘服务:头部采样 + 固定采样率(0.1~0.3),降低存储成本。
  • 错误监控:对所有 error=true 的 Trace 强制采样,不受概率限制。
复盘口径影响: 采样策略直接决定慢 Trace 样本的完整性和代表性。如果尾部采样缓存不足,会导致长 Trace 被截断;如果自适应采样窗口过小,会漏掉突发慢路径。建议在复盘前先确认采样策略配置,避免将采样偏差误判为性能问题。