首页/云/可观测性速查/按比例采样的配置实践

按比例采样的配置实践

traceidratio 采样率的选取是成本与可见性的平衡:高流量服务调低、低频关键路径调高;改采样率需要重启或热更新配置。

可观测性速查云更新于 2026-10-13

按比例采样是什么

traceidratio 采样器按 trace ID 做概率判定:同一条链路的所有服务只要用同样的比率与算法,判定结果一致,链路要么整条保留要么整条丢弃,不会出现断链。它属于头部采样,决定发生在链路入口,因此写入成本在上报前就被压下来;代价是低采样率下低频但关键的故障路径可能根本没被采到。

基本信息

适用平台OpenTelemetry SDK(Java、Go、Python 等)与 Collector
参数名OTEL_TRACES_SAMPLER 与 OTEL_TRACES_SAMPLER_ARG
推荐组合parentbased_traceidratio,尊重上游的采样决定
取值含义0.1 表示保留 10% 的链路

典型使用场景

  • 高流量入口降本:核心交易链路按 1%~5% 采样,成本可控又不至于无数据
  • 低频关键路径保真:内部巡检、定时任务等比流量链路用更高采样率
  • 环境差异化:生产低采样、预发全采样,方便验证埋点正确性
  • 灰度验证:新版本上线初期临时调高采样率,观察稳定后再降回
  • 容量核算:按采样率反推链路后端的写入量与存储需求

配置写法

配置写法
# Java Agent 启动参数
export OTEL_TRACES_SAMPLER=parentbased_traceidratio
export OTEL_TRACES_SAMPLER_ARG=0.05          # 保留 5% 链路
export OTEL_SERVICE_NAME=order-api
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
java -javaagent:opentelemetry-javaagent.jar -jar app.jar

# 环境变量与 -D 系统属性等价,容器里优先用环境变量

常见采样器

采样器行为适用场景
always_on全量保留预发环境、关键低频服务
always_off全部丢弃压测或临时关闭上报
traceidratio按比例决定,忽略上游决定入口服务单独控制
parentbased_traceidratio有上游决定就沿用,无则按比例推荐默认值
parentbased_always_on有上游就沿用,无则全采希望入口全采的链路
采样率换算先算绝对值:某服务 1 万 QPS、采样率 5%,链路后端仍要承接每秒 500 条链路,评估后端写入与存储能力后再定比例。
统计类数字(请求量、错误率)应来自指标而不是链路:采样后的链路计数与真实流量存在比例偏差,用采样数据算业务量会失真。

易错点

  • 采样率调得过低后,低频错误路径几乎无法被采到,排障变成没有样本可用,关键错误应单独全采或提高比例
  • 混用 traceidratio 与 parentbased 变体会造成上下游判定不一致,同一链路出现部分 span 丢失
  • 改了采样率但没有重启或热更新配置,实际生效值与预期不符,核对运行时配置再验证
  • 把链路数据当作准确的请求计数来源,采样率一变历史趋势曲线就出现台阶,指标与链路口径要分开

数据来源与参考

  • OpenTelemetry 官方文档 · Sampler 配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌