故障复盘是 SRE 的核心活动。但很多公司的复盘开成了"找责任人大会",效果反而是负的。本文是我组织过 30+ 次复盘的总结。

反模式:上来就问"谁的责任"

最常见也最毁文化的开法。一旦定责,大家就开始:
- 推诿(不是我)
- 隐瞒细节
- 不愿暴露真实问题

下次出事,没人敢主动暴露。

正确:blameless 复盘

铁律:对事不对人

具体做法:
- 不出现具体人名,只说"操作人"、"开发"、"值班"
- 不评价"做得好/不好",只复盘"发生了什么"
- 重点是"如果再来一次怎么不踩这个坑"

标准议程(90 分钟)

1. 时间线(30 分钟)

按分钟级别列出所有事件:

14:32 - 监控告警 "API 5xx > 5%"
14:33 - 值班 A 收到告警,开始查 dashboard
14:35 - 发现是 db-1 CPU 跑满
14:38 - 重启 db-1 失败
14:42 - 切到 db-2 (slave 提升)
14:45 - 业务恢复

时间线要细到分钟。先列事实,不下结论。

2. 影响范围(15 分钟)

  • 多少用户受影响
  • 业务损失(订单数、收入)
  • 持续时长

量化的目的:知道下次值得花多大力气避免。

3. 根因分析(30 分钟)

用 5 Whys:

Why 1: 为啥 5xx 增多?→ 因为 db-1 CPU 满
Why 2: 为啥 CPU 满?→ 因为有个慢查询
Why 3: 为啥慢查询出现?→ 因为新发的代码没加索引
Why 4: 为啥没加索引?→ 因为 review 没看出来
Why 5: 为啥 review 看不出?→ 因为没 SQL 静态分析工具

根因往往不是"操作失误",是"流程或系统没有兜住"。

4. Action items(15 分钟)

每个 action 必须有:
- 具体行为(不要"加强 review"这种空话)
- 负责人
- deadline
- 验收标准

例:
- ✅ "运维平台加 SQL 静态分析 plugin,未使用索引的 SQL 不允许 merge。@张三,2 周内完成。"
- ❌ "加强代码 review。@团队。"

几条铁律

别开晚于事故 1 周

记忆模糊 + 当事人调岗,越往后越没价值。

不超过 8 人

人多了变成讨论会。核心是:当事人 + 直接相关方 + 主持人。

主持人不是当事人

否则容易自我辩护。主持人最好是无利害关系的第三方。

一定要写文档

口头复盘等于没复盘。文档至少包含:
- 时间线
- 影响范围
- 根因
- Action items 和进度

存到 wiki,下次类似故障第一时间找出来对照。

文化建设

复盘文化好不好,看一个指标:有人主动暴露"差点出事"吗?

  • 如果有,说明大家信任"暴露问题不会被骂"
  • 如果没有,复盘文化是死的

我们公司有个机制叫"近失"(near miss)报告——你没造成故障但差点造成的,写下来给团队学,奖励而非惩罚。

一个反例

我之前公司有次大故障,定责到一个新员工。他后来辞职了。3 个月后类似故障再发——因为根本问题(缺监控)没解决,新员工只是触发器。

如果当时不定责而是修流程,第二次故障就不会发生。

几个 action 经常被忽视

  1. 更新 runbook:故障定位过程里发现的"哪个步骤花了 10 分钟才查到",写进 runbook 下次 1 分钟
  2. 加监控:被告警发现的故障是"还行的",被用户投诉发现的是"灾难"。每次复盘看监控覆盖
  3. 故障演练:写到 action 里就排进季度演练计划,否则永远不会做

教训:复盘不是要"惩罚谁",是要让系统变得"傻瓜也能正确操作"。

标签: none

添加新评论