web学习笔记编程技术学习与分享
首页 / 工程实践 / 正文

线上事故复盘的正确姿势

2026 年 07 月 03 日约 3 分钟阅读 工程实践

事故复盘的价值取决于问的问题。问「谁的错」会得到沉默,问「系统为什么允许这个错误发生」才会得到改进。

无指责原则(Blameless)

人的失误是常态:疲劳、上下文切换、信息不全都会导致操作错误。健全的系统应该让「普通人在普通状态下」也不至于酿成大祸。复盘问的是:

  • 什么条件让这个错误成为可能?
  • 什么机制能让它更早被发现?
  • 什么防线能让它的影响更小?

点名追责的复盘,下一次大家的第一反应是隐瞒和粉饰——损失的是最宝贵的信息。

复盘文档的骨架

1. 事故摘要:影响(多少用户、多久、什么功能)、发现方式(用户反馈还是监控)、恢复时间。

2. 时间线:按分钟记录。动作与信息分开写:

14:02 监控告警 P1:下单成功率 82%(阈值 95%)
14:05 值班响应,看到 FPM worker 打满
14:12 确认为 14:00 发布的 v2.3.1 引入,决定回滚
14:18 回滚完成,成功率恢复

时间线的价值在于暴露响应延迟:从告警到响应 3 分钟合理,从发现到决策 7 分钟就值得讨论。

3. 根因分析:追问到流程层面。技术原因是「N+1 查询」,流程原因是「上线前的压测没有覆盖这个查询路径」。前者只解释这一次,后者解释一类。

4. 改进项:每条要有负责人和期限,并区分类型:

类型 示例 特点
预防 压测纳入发布门禁 防复发
检测 该路径补监控与告警 缩短发现时间
缓解 限流/降级预案 缩小影响
修复效率 一键回滚脚本 缩短恢复时间

只写「加强 code review」这种无法验收的改进项,等于没有改进项。

5. 遗留风险:这次没解决、明确接受的。

检验复盘质量的两问

  • 同类问题复发的可能性降低了吗?(改进项落地了吗)
  • 下次类似事故,发现和恢复的时间会更短吗?

把每次复盘的改进项放进同一个看板追踪,季度回顾完成率。事故会过去,复盘沉淀下来的规则才是资产。

事故复盘稳定性