按比例采样是什么
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 条链路,评估后端写入与存储能力后再定比例。
统计类数字(请求量、错误率)应来自指标而不是链路:采样后的链路计数与真实流量存在比例偏差,用采样数据算业务量会失真。