3. 慢Trace判定标准

慢Trace的判定不能依赖单一维度。在生产环境中,单纯以固定耗时阈值判定容易漏报或误报,必须结合持续时间阈值、百分位数、错误率以及业务自定义规则四个维度进行综合判定。本章逐一拆解每种标准的适用场景与配置方法。

3.1 基于持续时间的阈值设定

这是最直观的判定方式:为Trace设置一个耗时上限,超过即判定为慢Trace。适用于接口响应时间稳定、SLA明确的场景。

阈值类型 说明 典型值 适用场景
固定阈值 所有Trace统一使用同一个耗时上限 500ms / 1s / 3s 内部RPC、定时任务
分层阈值 按服务/接口/客户端类型分别设定 支付接口200ms,查询接口800ms 多业务线混合部署
动态基线 基于历史数据自动计算阈值 均值+3σ / P99历史值 流量波动大的互联网应用
实践建议:固定阈值适合初期快速发现明显慢Trace;业务成熟后应逐步切换到动态基线,避免因业务增长导致大量误报。
基于持续时间的阈值判定流程 Trace耗时数据 阈值匹配引擎 正常Trace(通过) 慢Trace(告警) 动态基线更新 阈值设定需结合服务SLA与历史P99数据,避免阈值过低导致告警风暴

3.2 基于百分位数的判定

百分位数判定关注的是尾部延迟,而非平均耗时。P99(99分位)是业界最常用的慢Trace判定基准,能有效过滤偶发尖刺。

核心公式:若 Trace 耗时 > P99_threshold,则判定为慢Trace。P99_threshold 通常取过去5分钟或1小时窗口内的历史数据计算。
百分位 含义 判定敏感度 推荐场景
P95 5%的Trace超过此值 中等 非核心业务、批量任务
P99 1%的Trace超过此值 较高 核心API、用户交互链路
P999 0.1%的Trace超过此值 极高 金融交易、实时控制
注意:百分位数判定依赖足够的数据量。当窗口内Trace样本数少于1000时,P99/P999的统计意义会显著下降,建议同时设置最小样本数阈值。

3.3 基于错误率的判定

错误率判定关注的是质量维度。即使Trace耗时正常,但如果包含异常或错误,也应纳入慢Trace复盘范围。

  • HTTP 5xx错误:服务端内部错误,直接判定为慢Trace。
  • 业务异常码:如订单超时、库存不足等业务逻辑错误,按业务等级加权。
  • 超时/熔断:RPC调用超时、熔断降级产生的错误,必须标记。
  • 错误率阈值:当Trace内Span的错误率超过设定比例(如20%),即使总耗时正常也判定为慢Trace。
基于错误率的慢Trace判定逻辑 Trace错误检测 HTTP 5xx / 业务异常 超时 / 熔断 / 降级 Span错误率 > 阈值 标记为慢Trace

3.4 业务自定义规则

业务自定义规则是前三种标准的补充,用于处理特定业务语义的慢Trace场景。Tempo支持通过规则引擎配置灵活的判定逻辑。

规则类型 配置示例 判定效果
标签匹配 span.tags[“db.type”] == “redis” && duration > 100ms 仅对Redis调用判定慢Trace
链路层级 depth > 10 && duration > 2s 深层嵌套链路单独判定
用户分组 user.tier == “VIP” && duration > 200ms VIP用户更严格的慢Trace标准
时段规则 time between “10:00” and “11:00” && duration > 500ms 高峰期特殊阈值
最佳实践:业务自定义规则应作为补充层,叠加在持续时间阈值和百分位数之上。建议先使用通用规则覆盖80%场景,再通过自定义规则处理剩余20%的特殊业务。

3.5 综合判定优先级

当多个判定标准同时生效时,Tempo采用“或”逻辑:只要满足任意一条标准,即判定为慢Trace。优先级从高到低为:

  1. 错误率判定(最高优先级,一旦发现错误直接标记)
  2. 业务自定义规则(按规则权重排序)
  3. 持续时间阈值(固定阈值 > 动态基线)
  4. 百分位数判定(P999 > P99 > P95)

这种设计确保质量异常(错误)优先于性能异常(耗时),同时保留业务灵活调整的空间。