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数据锚点。

MTTR三阶段时间线及Tempo数据锚点 检测时间 (TTD) 诊断时间 (TTI) 修复时间 (TTF) 故障发生 首个Error Span 告警触发 Tempo告警事件 根因定位 根因Trace标记 故障消除 错误率归零 Tempo检索映射说明: • TTD:通过 status=error 查询最早错误Span时间戳 • TTI:通过 trace.root 和 service.name 定位根因Trace • TTF:通过 metric:error_rate 确认恢复时间点

2.3 复盘口径标准化要求

为了确保不同团队、不同故障之间的MTTR数据具有可比性,复盘口径必须满足以下标准化要求:

  1. 时间戳对齐:所有阶段的时间戳必须统一使用UTC+0,且精度到毫秒级。Tempo的Span时间戳默认满足此要求,但告警系统和部署系统需同步对齐。
  2. 阶段边界明确:每个阶段的起止事件必须有明确的Tempo查询条件,避免主观判断。例如,“诊断完成”必须对应一个被标记为root_cause=true的Span。
  3. 排除等待时间:如果故障修复后等待人工确认才关闭,等待时间不应计入TTF。建议使用自动化健康检查通过时间作为TTF终点。
  4. 多服务聚合规则:对于跨服务故障,MTTR应以首个错误Span为起点,以最后一个受影响服务的恢复时间为终点。
  5. 异常值处理:单次故障的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指标的计算链路。

标准化口径Tempo检索实现流程 Tempo Trace数据 Span时间戳 / 状态 / 标签 TraceQL检索 status=error / root_cause 字段映射 fault_start / alert_trigger Grafana计算 TTD + TTI + TTF MTTR仪表盘 P50 / P90 / P99 趋势 关键:标准化口径要求所有时间戳从Tempo原生字段提取,避免人工录入误差。Grafana计算字段自动聚合MTTR三阶段。

2.6 常见口径偏差与避坑指南

常见偏差1:将“告警确认时间”作为诊断起点,而非“告警触发时间”。这会导致TTI被人为延迟,掩盖告警系统的延迟问题。
常见偏差2:使用“部署完成时间”作为修复终点,而非“错误率归零时间”。部署完成不代表故障已修复,可能引入新问题。
常见偏差3:跨服务故障只计算首个服务的恢复时间,忽略下游依赖的恢复延迟。标准化口径要求以最后一个服务恢复为准。

通过以上拆解和标准化定义,团队可以确保每次故障复盘的数据口径一致,Tempo检索结果直接服务于MTTR指标计算,为后续的优化提供可靠基线。