链路追踪采样:在诊断价值与成本之间取平衡

比较头部采样与尾部采样,按错误、延迟和业务属性保留高价值 Trace,同时控制数据量。

文章目录 · 4 节

全量采集 Trace 在高流量系统中通常不可持续,纯随机低比例采样又可能漏掉罕见错误。采样设计应从希望保留的问题类型反推,而不是先定一个固定百分比。

理解两种采样点

头部采样在请求入口立即决定,开销低且链路决策一致,但无法预知最终状态。尾部采样在收集端看到完整 Trace 后决定,可优先保留错误和慢请求,却需要缓存并承担更高资源成本。

processors:
  tail_sampling:
    decision_wait: 10s
    policies:
      - name: errors
        type: status_code
        status_code: {status_codes: [ERROR]}
      - name: slow
        type: latency
        latency: {threshold_ms: 2000}

建立分层策略

  • 错误、超时和关键交易尽量完整保留
  • 正常高频请求按稳定哈希抽样
  • 健康检查和轮询可降到极低比例
  • 对租户、路由等属性设置基数与隐私边界

监控采样器本身

观察接收、丢弃、导出失败、内存和 decision timeout。Collector 过载时的静默丢数会让故障现场恰好缺失。

收尾清单

用历史流量估算每天 span 数、压缩后字节和查询成本。定期回放已知事故,检查当前策略是否仍能保留诊断所需的完整链路。