1. MTTR 复盘口径总览

在 Prometheus 存储瓶颈场景下,MTTR(Mean Time to Repair)是衡量故障恢复效率的核心指标。然而,不同团队对“修复完成”的定义差异巨大——有人以查询恢复为基准,有人以数据完整写入为准。本章建立一套标准化的复盘口径,确保每次存储瓶颈复盘都能对齐同一把尺子。

1.1 MTTR 在存储瓶颈场景下的核心指标

我们将 MTTR 拆解为三个可独立度量的阶段,每个阶段对应一个子指标:

子指标 英文全称 定义 Prometheus 存储瓶颈典型场景
检测时间 Time to Detect (TTD) 从故障发生到监控系统发出明确告警的时间间隔 WAL 写入延迟突增 → 告警触发;或 TSDB 块压缩失败累积至阈值
响应时间 Time to Respond (TTR) 从告警触发到 SRE 开始执行修复操作的时间间隔 值班人员确认告警、登录机器、定位到存储目录或查询超时根因
修复时间 Time to Fix (TTF) 从开始修复到存储瓶颈完全解除、查询恢复正常的时间间隔 清理 WAL 积压、扩容磁盘、重建 TSDB 块、调整 retention 策略
复盘口径公式:
MTTR = TTD + TTR + TTF

每个子指标必须独立记录时间戳,避免将“告警延迟”与“修复延迟”混为一谈。

1.2 复盘口径的标准化框架

标准化框架围绕“时间线对齐 + 阶段锚点 + 数据源”三个维度构建,确保每次复盘可复现、可对比。

MTTR 复盘标准化框架 TTD 检测时间 故障发生 → 告警触发 TTR 响应时间 告警触发 → 开始修复 TTF 修复时间 开始修复 → 查询恢复 数据源:告警系统时间戳 + 值班记录 + 操作审计日志 Prometheus Alertmanager / Grafana On-Call / 堡垒机操作日志 阶段锚点定义(必须记录精确到秒的时间戳) T0 = 故障发生(存储延迟/查询超时首次出现) T1 = 告警触发(Alertmanager 发送通知) T2 = 开始修复(SRE 执行第一条恢复命令) T3 = 修复完成(查询延迟恢复至 P99 基线以下)

1.3 复盘口径的标准化步骤

  1. 锚点对齐:在每次存储瓶颈事件中,强制记录 T0~T3 四个时间戳,精确到秒。
  2. 子指标计算:TTD = T1 - T0;TTR = T2 - T1;TTF = T3 - T2。
  3. 异常标记:若某个子指标超过历史 P95 基线,标记为“异常阶段”,在复盘中重点分析。
  4. 数据源校验:告警时间戳以 Alertmanager 的 startsAt 为准;修复操作时间以堡垒机或 kubectl 日志为准。
最佳实践:在 Prometheus 的告警规则中增加 summary 和 description 字段,携带故障首次出现的时间戳(通过 time() 函数计算),避免 T0 丢失。

1.4 复盘口径的常见误区

误区 错误做法 正确做法
TTD 与 TTR 混淆 将告警触发时间当作故障发生时间 通过 PromQL 反查故障首次出现的时间点
修复完成标准不统一 以磁盘清理完成为修复终点 以查询延迟恢复至 P99 基线以下为修复终点
忽略数据源时差 直接使用告警系统与操作系统的本地时间 统一使用 NTP 同步后的 UTC 时间戳
复盘口径未固化 每次复盘临时定义指标 使用标准化框架,每次复盘输出相同维度的报告
注意:在 Prometheus 存储瓶颈场景中,WAL 积压导致的查询超时往往在故障发生 5~15 分钟后才被告警捕获。如果复盘时不区分 TTD 和 TTR,会掩盖“告警延迟”这个关键短板。

1.5 复盘口径的落地检查清单

  • ✅ 是否已定义 T0~T3 四个时间锚点?
  • ✅ 是否在告警规则中嵌入了故障首次出现的时间戳?
  • ✅ 是否统一了所有时间源为 NTP 同步的 UTC?
  • ✅ 是否将修复完成标准与查询延迟 P99 基线绑定?
  • ✅ 是否在每次存储瓶颈事件后自动生成 MTTR 子指标报告?

标准化复盘口径是后续查询优化的基础——只有知道“时间花在了哪里”,才能精准优化 Prometheus 的存储配置与查询模式。