2. MTTR复盘口径定义:MTTR核心指标拆解与标准化要求
在分布式追踪场景下,MTTR(Mean Time to Repair,平均修复时间)是衡量故障响应效率的核心指标。然而,不同团队对“修复完成”的界定差异巨大,导致复盘数据无法横向对比。本章将MTTR拆解为三个可观测的阶段,并定义标准化复盘口径,确保Tempo检索结果能够直接映射到故障处理流程中。
2.1 MTTR核心指标三阶段拆解
MTTR并非单一数值,而是由检测、诊断、修复三个子阶段构成。每个阶段对应不同的Tempo检索策略和数据源。
| 阶段 | 定义 | 起始事件 | 结束事件 | Tempo检索关键字段 |
|---|---|---|---|---|
| 检测时间 (TTD) | 从故障发生到被监控系统或人工发现的时间 | 首个错误Span的时间戳 | 告警触发时间 | status=error、span.error、metric:error_budget |
| 诊断时间 (TTI) | 从告警触发到定位到根因Trace的时间 | 告警触发时间 | 根因Trace被标记或关联时间 | trace.root、span.http.url、service.name |
| 修复时间 (TTF) | 从定位根因到确认故障消除的时间 | 根因Trace标记时间 | 健康检查通过或错误率归零时间 | span.duration、metric:error_rate、deploy.version |
实践要点:在Tempo中,建议为每个阶段创建独立的TraceQL查询模板。例如,检测阶段使用
{ status=error } | by(service) | count() > threshold;诊断阶段使用 { .root_service = "checkout" && .root_operation = "POST /payment" }。
2.2 MTTR三阶段时间线SVG图
下图展示了MTTR三阶段在时间轴上的衔接关系,以及每个阶段对应的Tempo数据锚点。
2.3 复盘口径标准化要求
为了确保不同团队、不同故障之间的MTTR数据具有可比性,复盘口径必须满足以下标准化要求:
- 时间戳对齐:所有阶段的时间戳必须统一使用UTC+0,且精度到毫秒级。Tempo的Span时间戳默认满足此要求,但告警系统和部署系统需同步对齐。
- 阶段边界明确:每个阶段的起止事件必须有明确的Tempo查询条件,避免主观判断。例如,“诊断完成”必须对应一个被标记为
root_cause=true的Span。 - 排除等待时间:如果故障修复后等待人工确认才关闭,等待时间不应计入TTF。建议使用自动化健康检查通过时间作为TTF终点。
- 多服务聚合规则:对于跨服务故障,MTTR应以首个错误Span为起点,以最后一个受影响服务的恢复时间为终点。
- 异常值处理:单次故障的MTTR如果超过P99基线3倍以上,应在复盘中标注为“异常事件”,单独分析原因。
标准化口径示例:某电商团队定义MTTR = (告警触发时间 - 首个500错误Span时间) + (根因Trace标记时间 - 告警触发时间) + (错误率归零时间 - 根因Trace标记时间)。所有时间戳均从Tempo的Span属性中提取,精度为毫秒。
2.4 标准化口径与Tempo字段映射表
下表将标准化口径中的每个字段映射到Tempo的TraceQL查询或Grafana变量,便于直接用于仪表盘和告警规则。
| 标准化字段 | 口径定义 | Tempo/Grafana映射 | 数据类型 |
|---|---|---|---|
fault_start_ts |
首个错误Span的时间戳 | min({ status=error } | timestamp) |
毫秒时间戳 |
alert_trigger_ts |
告警规则触发时间 | grafana_alert.triggered_at |
毫秒时间戳 |
root_cause_ts |
根因Trace被标记的时间 | { .root_cause = true } | timestamp |
毫秒时间戳 |
recovery_ts |
错误率归零或健康检查通过时间 | min({ status=ok } | timestamp) after fault |
毫秒时间戳 |
ttd |
alert_trigger_ts - fault_start_ts |
Grafana计算字段 | 毫秒 |
tti |
root_cause_ts - alert_trigger_ts |
Grafana计算字段 | 毫秒 |
ttf |
recovery_ts - root_cause_ts |
Grafana计算字段 | 毫秒 |
mttr |
ttd + tti + ttf |
Grafana聚合计算 | 毫秒 |
2.5 标准化口径的Tempo检索实现SVG图
下图展示了标准化口径在Tempo中的检索实现流程,从原始Trace数据到最终MTTR指标的计算链路。
2.6 常见口径偏差与避坑指南
常见偏差1:将“告警确认时间”作为诊断起点,而非“告警触发时间”。这会导致TTI被人为延迟,掩盖告警系统的延迟问题。
常见偏差2:使用“部署完成时间”作为修复终点,而非“错误率归零时间”。部署完成不代表故障已修复,可能引入新问题。
常见偏差3:跨服务故障只计算首个服务的恢复时间,忽略下游依赖的恢复延迟。标准化口径要求以最后一个服务恢复为准。
常见偏差2:使用“部署完成时间”作为修复终点,而非“错误率归零时间”。部署完成不代表故障已修复,可能引入新问题。
常见偏差3:跨服务故障只计算首个服务的恢复时间,忽略下游依赖的恢复延迟。标准化口径要求以最后一个服务恢复为准。
通过以上拆解和标准化定义,团队可以确保每次故障复盘的数据口径一致,Tempo检索结果直接服务于MTTR指标计算,为后续的优化提供可靠基线。