Zipkin追踪采样率

wen IT资讯 24

本文目录导读:

Zipkin追踪采样率

  1. 常用框架的采样率配置方式
  2. 采样策略分类
  3. 生产中如何设置合适的采样率?
  4. 采样率带来的影响
  5. 常见注意事项
  6. 总结一句话

Zipkin 追踪的采样率,直接回答如下:

核心答案: Zipkin 默认的采样率通常是 001(即 0.1%),意味着每 1000 个请求中只有 1 个会被采样并发送到 Zipkin。

但这个值可以通过配置灵活调整,具体取决于你使用的客户端库(如 Brave、Sleuth、OpenTelemetry 等)。


常用框架的采样率配置方式

1 Spring Cloud Sleuth(已迁移至 Micrometer Tracing)

spring.sleuth.sampler.probability=1.0  # 采样率,1.0 = 100%
  • 0:从不采样
  • 5:50% 采样(生产环境常用)
  • 0:100% 采样(仅适合低流量测试)

2 OpenTelemetry(官方推荐的新标准)

OTEL_TRACES_SAMPLER=parentbased_always_on   # 总是采集
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1               # 10% 采样

或者通过代码设置:

SdkTracerProvider.builder()
    .setSampler(Sampler.traceIdRatioBased(0.1))
    .build();

3 Brave(Zipkin 原生 Java 客户端)

Tracing tracing = Tracing.newBuilder()
    .sampler(Sampler.create(0.1f))  // 10% 采样
    .build();

采样策略分类

策略类型 说明 适合场景
固定概率采样 按百分比随机采样(最常见) 通用场景
速率限制采样 限制每秒采集的 Span 数量 高并发必须限流
自定义采样 根据请求路径、Header、参数等动态决定 业务精细化
强制采样 对特定请求标记为“必须采集” 问题排查,调试

生产中如何设置合适的采样率?

黄金建议

  • 开发/测试环境:100%(0),能看到完整流程
  • 低流量生产(<100 req/s):10% ~ 100%
  • 高流量生产(>1000 req/s):1% ~ 1%(太多数据会撑爆存储或浪费网络 IO)
  • 极端高并发(电商大促、秒杀):可以设 01% 甚至更低,配合自适应采样(如 Head-Based 采样)

采样率越低,Zipkin Collector 和 Elasticsearch 负载越低,但问题定位时可能需要更多的重试才能捕获到异常 Span。

配合“强制采样”做问题定位

在业务逻辑中,如果检测到错误或慢调用,可以强制该条链路采样(忽略采样率),

Span span = tracer.nextSpan().name("critical").start();
span.tag("error", "true");
span.finish();  // 即使采样率 1%,此 span 依然上报

采样率带来的影响

采样率 存储成本 网络开销 定位问题能力
100% 极高 完美
10% 中等 中等 较好
1% 极低 需要多次尝试

常见注意事项

  1. 采样率是概率性的:低采样率下,链路上游被采样、下游可能不被采样(Zipkin 会根据 traceId 一致性自动处理,但仍可能丢失部分 Span)。
  2. 不要只依赖采样率做容量预估:建议限流 + 采样双重控制。
  3. 若是全链路采样(如 Istio + Zipkin):链路越长,Span 数量越多,采样率需更低。
  4. 使用“自适应采样”(Adaptive Sampling):如 Sentinel 或阿里开源的 Tracer 支持根据流量动态调整采样率,高流量自动降低、低流量自动升高。

总结一句话

生产环境推荐采样率:0.1% ~ 1%,100% 仅适合测试环境,高并发务必配合限流,若需要精准定位,可采用强制采样标记关键错误请求。

如果你能补充具体的框架(Java, Go, Node)或版本,我可以给出更精确的配置示例。

抱歉,评论功能暂时关闭!