2. 事故响应生命周期:事故发现、事故分类与定级、事故响应启动、事故排查、事故修复、事故复盘

事故响应不是一次性的“救火”行动,而是一个结构化的闭环流程。SRE 团队通过标准化的生命周期管理,确保每个环节都有明确的输入、输出、角色和时限,从而系统性地降低 MTTR。本章将拆解事故响应的六个核心阶段,并给出每个阶段的关键实践与量化指标。

2.1 生命周期全景图

下图展示了事故响应从“发现”到“复盘”的完整闭环。每个阶段都依赖前序阶段的输出,并产生后续阶段所需的输入。跳过或压缩任何阶段,都会导致响应混乱或问题复发。

事故响应生命周期全景图 事故发现 监控/告警/用户 分类与定级 P0/P1/P2/P3 响应启动 建群/拉人/通告 事故排查 定位根因 事故修复 止血/恢复 事故复盘 RCA / 改进项 关键原则: • 每个阶段都有明确的“进入条件”和“退出条件”,避免流程卡顿或跳过。 • 阶段 1-5 是“战时”流程,追求速度;阶段 6 是“平时”流程,追求深度。 • 虚线箭头表示复盘结果会反哺到发现机制(新增告警规则)和修复预案(更新 Runbook)。 • 每个阶段都应记录时间戳,用于计算 MTTR 分阶段指标(如 MTTD、MTTK)。

2.2 阶段一:事故发现

事故发现是生命周期的起点。发现的速度直接决定了 MTTR 的下限。SRE 团队需要建立多层次的发现渠道,避免单一依赖用户投诉。

发现渠道 典型来源 MTTD 目标 可靠性等级
主动监控告警 Prometheus / Grafana / 自定义探针 < 1 分钟 高(首选)
日志异常检测 ELK / Loki / 机器学习异常检测 < 3 分钟 中高
用户反馈工单 客服系统 / 社交媒体 / 内部反馈 < 5 分钟 低(被动)
混沌工程实验 主动注入故障,验证告警有效性 N/A(验证手段) 辅助
实践建议: 为每个服务定义“黄金信号”告警(延迟、流量、错误、饱和度),并设置多级告警阈值。避免告警风暴,使用告警聚合和抑制规则。

2.3 阶段二:事故分类与定级

收到告警后,值班人员需要在 5 分钟内完成初步分类和定级。定级标准必须事先定义,避免主观判断导致响应延迟或资源浪费。

2.3.1 通用定级矩阵

等级 定义 影响范围 响应要求 示例
P0 核心服务完全不可用 全站 / 所有用户 立即响应,5 分钟内启动 数据库主库宕机、支付链路中断
P1 核心服务严重降级 大部分用户 / 核心功能 15 分钟内启动 API 延迟 > 5s、大量 5xx 错误
P2 非核心服务不可用或部分用户受影响 部分用户 / 次要功能 1 小时内启动 单个可用区故障、报表服务不可用
P3 轻微问题,无用户影响 内部 / 运维层面 下一个工作日处理 告警阈值误报、日志格式错误
常见陷阱: 不要将 P0/P1 事故降级为 P2 来逃避紧急响应流程。定级错误会导致资源投入不足,MTTR 急剧上升。建议每季度复盘定级准确性,校准标准。

2.4 阶段三:事故响应启动

定级完成后,立即启动响应流程。这个阶段的核心目标是“快速建立指挥体系”,而不是立即开始排查。

  • 建立事故群: 在即时通讯工具中创建专用事故响应群,包含值班人员、相关团队负责人、SRE 经理。
  • 指定事故指挥官(IC): 由经验最丰富的 SRE 担任,负责协调资源、决策优先级、对外沟通。IC 不应亲自排查代码。
  • 发布事故通告: 在内部状态页或广播频道发布初步通告,格式为:“[P0] 支付服务不可用,影响范围:全量用户,当前状态:排查中,预计更新时间:5 分钟。”
  • 启动计时: 记录事故开始时间、响应启动时间,作为 MTTR 计算的基准。
关键指标: 响应启动时间(Time to Acknowledge, TTA)应控制在 5 分钟以内。超过 10 分钟未启动,自动升级到二级 On-Call。

2.5 阶段四:事故排查

排查阶段是 MTTR 中最不可控的部分。SRE 需要遵循系统化的排查路径,避免“乱枪打鸟”。

2.5.1 排查路径与工具

排查步骤 目标 常用工具
1. 确认影响范围 判断是局部还是全局问题 Grafana 全局视图、告警聚合
2. 检查变更历史 最近 1 小时内是否有代码/配置/基础设施变更 Git 提交记录、CI/CD 流水线、变更窗口日志
3. 查看关键指标 CPU/内存/网络/磁盘/错误率/延迟 Prometheus / Datadog / CloudWatch
4. 分析日志 查找异常堆栈、错误模式 ELK / Loki / 日志聚类工具
5. 回滚或隔离 如果定位到变更,立即回滚;否则隔离故障单元 K8s 回滚、流量切换、功能开关
排查心法: 遵循“先止血,后找根因”原则。如果 15 分钟内无法定位根因,优先执行已知的恢复操作(如重启、回滚、切流),而不是继续深挖。

2.6 阶段五:事故修复

修复阶段的目标是“恢复服务至正常水平”,不要求完美修复。临时止血措施(如切流到备用集群)也是有效的修复手段。

  • 执行恢复操作: 根据排查结果执行回滚、重启、扩容、切流等操作。操作前必须经过 IC 确认,避免多人同时操作导致混乱。
  • 验证恢复效果: 观察监控指标是否回归基线,执行冒烟测试确认核心功能正常。
  • 发布恢复通告: 在状态页更新:“[P0] 支付服务已恢复,影响时长 23 分钟,根因待复盘确认。”
  • 持续监控: 恢复后保持 30 分钟观察期,确认无复发或次生故障。
关键指标: 修复时间(Time to Resolve, TTR)是 MTTR 的核心组成部分。P0 事故的 TTR 目标应控制在 30 分钟以内。

2.7 阶段六:事故复盘

复盘是生命周期的最后一环,也是持续改进的起点。复盘不是追责,而是通过系统化分析,找到流程、工具或架构上的薄弱点。

2.7.1 复盘报告结构

章节 内容要求 负责人
事故概述 时间、等级、影响范围、持续时间 IC
时间线 精确到分钟的关键事件时间戳 值班 SRE
根因分析(RCA) 使用 5 Whys 或因果图,找到直接原因和根本原因 相关团队
改进项清单 每个改进项需指定负责人和截止日期 SRE 经理
行动跟踪 在后续周会中跟踪改进项完成情况 项目管理
复盘改进闭环 事故复盘 RCA + 改进项 更新告警规则 优化 Runbook 修复代码/配置 架构改进 每个改进项必须指定负责人和截止日期,并在下次复盘中验证效果

2.8 生命周期各阶段 MTTR 分解

理解 MTTR 的构成,有助于针对性优化。下表将 MTTR 拆解为四个子指标,并给出 SRE 团队的参考目标。

指标 全称 定义 P0 目标 优化重点
MTTD Mean Time to Detect 从事故开始到被发现的平均时间 < 2 分钟 告警覆盖率、告警延迟
MTTA Mean Time to Acknowledge 从发现到响应启动的平均时间 < 5 分钟 On-Call 响应机制、升级策略
MTTK Mean Time to Know 从响应启动到定位根因的平均时间 < 15 分钟 排查路径、可观测性、Runbook
MTTR Mean Time to Resolve 从发现到服务恢复的平均时间 < 30 分钟 回滚速度、切流能力、止血手段
注意: 不要只关注最终的 MTTR 数值。如果 MTTD 很长,即使修复很快,整体 MTTR 仍然很高。建议在事故报告中同时记录四个子指标,找到真正的瓶颈环节。

2.9 本章小结