链路追踪为什么需要采样?常见采样策略有哪些?
简化版
链路追踪需要采样,是因为全量采集在高 QPS 系统中会带来明显的 CPU、网络、存储和查询成本。采样是在保留排障价值的前提下,选择一部分 Trace 上报。
常见策略包括固定比例采样、按接口采样、错误优先采样、慢请求采样、尾部采样和动态采样。好的采样策略不能只省成本,还要尽量保留错误、慢调用和核心链路。
详细版
如果一个系统每秒有几十万请求,每个请求又产生多个 Span,全量追踪数据会非常庞大。采样可以控制数据规模,减少业务进程和追踪后端压力。但采样也有风险:如果把异常请求采掉了,故障时就查不到关键链路。
固定比例采样简单,比如采 1% 请求;按接口采样可以让核心接口采样率更高;错误优先和慢请求采样更适合排障;尾部采样是在请求结束后根据完整结果决定是否保留,比如保留错误和高延迟 Trace。
面试中要强调:采样策略要和业务重要性、流量大小、故障排查需求结合。低价值高流量接口可以低采样,核心交易链路、错误请求、慢请求应该提高保留概率。
完整版教学
一、全量追踪为什么成本高
一次请求可能产生多个 Span。一个接口如果经过网关、业务服务、Redis、MySQL、MQ,就可能生成十几个 Span。高 QPS 下,Span 数量会迅速膨胀。
成本主要来自:
- 业务进程创建和序列化 Span 的 CPU 开销。
- Span 上报产生的网络流量。
- Collector 和后端处理压力。
- 存储成本。
- 查询和索引成本。
所以追踪系统必须控制数据量,否则可观测性系统本身会变成生产压力源。
二、头部采样和尾部采样
头部采样是在请求刚开始时决定是否采样。它实现简单,业务进程很早就知道是否记录 Span。固定比例采样通常属于头部采样。
尾部采样是在请求结束后,根据完整 Trace 的结果决定是否保留。例如只有错误、超时、P99 以上延迟或命中特定用户的 Trace 才保存。尾部采样更智能,但需要先暂存 Trace 数据,对 Collector 和缓冲能力要求更高。
头部采样成本低,尾部采样价值高。生产系统可以根据规模和需求组合使用。
三、固定比例采样的优缺点
固定比例采样最简单,比如 1%、5%、10%。它容易实现,也容易估算成本。
缺点是对异常不敏感。错误请求本来就少,如果固定采 1%,可能大量错误 Trace 都没有被保留。故障发生时,最需要看的链路反而查不到。
因此固定比例采样适合看整体分布,但不适合作为唯一排障策略。
四、错误和慢请求优先
错误请求和慢请求通常最有排障价值。采样策略应该优先保留:
- HTTP 5xx 或业务错误码。
- RPC 异常和超时。
- P95、P99 以上慢请求。
- 熔断、限流、重试链路。
- 核心交易链路。
这类采样能在成本可控的前提下,提高故障排查命中率。
五、动态采样和限流
系统流量不是固定的。大促、故障、爬虫、重试风暴都会让 Trace 数量暴涨。动态采样可以根据流量、错误率、后端压力调整采样率。
例如正常时核心接口采 10%,错误率升高时错误 Trace 全保留;后端压力过高时降低普通成功请求采样。追踪系统也需要限流,避免异常流量把可观测性后端打挂。
六、采样的一致性问题
一次 Trace 跨多个服务,采样决策要尽量一致。如果上游采样但下游不采,链路会缺段;如果下游独立决定采样,可能产生孤立 Span。
因此采样标记通常会随 Trace 上下文传播。入口做出采样决策,下游遵守这个决策。尾部采样则由 Collector 统一判断,更容易保证整条 Trace 保留或丢弃。
七、面试回答建议
回答时先说采样原因:成本和性能。再说策略:固定比例、按接口、错误优先、慢请求、尾部采样、动态采样。然后强调采样不能只看成本,关键链路、错误和慢请求要优先保留。
如果能补充采样标记传播和尾部采样的价值,答案会更扎实。
八、常见追问和落地边界
面试官可能问采样后还能不能做准确统计。Trace 采样数据不适合作为唯一业务统计来源,因为采样会丢数据。QPS、错误率、成功率这类准确趋势应该依赖指标系统;Trace 更适合分析样本链路、慢请求和错误路径。
另一个落地边界是采样策略要能动态调整。故障期间可以临时提高核心接口和错误请求采样率,平时降低普通成功请求采样率。这样既控制成本,又提高故障排查时的命中率。
采样还要考虑租户和用户影响。如果大客户、核心租户或灰度用户出现问题,即使总体采样率很低,也应该提高这些流量的保留概率。否则平均视角下看不到小范围高价值问题。
另外,采样策略本身要可观测。需要知道当前实际采样率、丢弃数量、Collector 队列长度、导出失败数。如果追踪数据突然变少,可能不是系统变健康,而是采样或上报链路出问题了。
九、常见误区与追问
这道题要紧扣「Trace 采样」本身回答,不能把它混成泛泛的可观测性套话。面试官通常会沿着“为什么需要、流程怎么走、失败怎么兜、代价是什么”继续追问,所以回答要覆盖日志、指标、追踪、上下文传播、采样、告警和排障闭环。
| 回答层次 | 要讲清的内容 | 容易漏掉的边界 |
|---|---|---|
| 核心结论 | Trace 采样用一定规则保留部分链路数据,在排障价值和存储成本之间取平衡 | 不要停在名词解释 |
| 流程机制 | 请求进入采样器 -> 按概率或规则决策 -> 传播采样标记 -> 关键错误强制保留 -> 批量上报后端 -> 按成本调整策略 | 要说清触发点、状态变化、确认点和失败兜底 |
| 工程取舍 | 10000 QPS 全量采样若每条 Trace 5KB,每秒就是约 50MB 数据,必须控制采样率或按错误优先保留 | 可观测性不能替代稳定性设计,它用额外采集、存储和分析成本换更快定位问题 |
Trace 采样 面试拆解:
1. 请求进入采样器
2. 按概率或规则决策
3. 传播采样标记
4. 关键错误强制保留
5. 批量上报后端
6. 按成本调整策略
记忆钩子:先给结论,再拆流程,再讲数字例子和失败边界;回答「Trace 采样」时要围绕题目问法收束,不要把相邻概念堆成一段没有重点的名词清单。
- 误区:采样率越高越好。 采样越高成本越大,高流量服务可能压垮存储和查询。
- 误区:固定 1% 采样适合所有场景。 低流量服务可能样本不足,高价值错误请求应该优先保留。
- 误区:下游可以随意重新采样。 不一致采样会导致链路断裂,通常要传播采样决策。
- 追问:Head-based 和 Tail-based 区别? 前者入口先决定,成本低;后者看完整 Trace 后决定,保错更准但成本高。
- 追问:错误请求怎么保证可查? 规则采样或尾采样优先保留错误、慢请求和关键用户请求。
- 追问:采样会影响指标吗? Trace 采样不应直接替代指标统计,指标通常要独立准确采集。
十、加强记忆
采样可以记成“不是每辆车都全程录像,但事故车、慢车、重点路线要尽量保留录像”。
普通成功请求可以少采,错误和慢请求要多采;省成本不能省掉排障能力。