Skip to content

Latest commit

 

History

History
144 lines (113 loc) · 4.48 KB

File metadata and controls

144 lines (113 loc) · 4.48 KB

事故复盘流程

👤 个人开发者简化版:不用写正式复盘报告,出事后花 10 分钟回答三个问题即可—— ① 发生了什么 + 怎么恢复的?② 根因是什么(连问 5 个"为什么")?③ 下次怎么防止? 记进 knowledge-card-template 一张卡就够,重点是别让同一个坑踩第二次。

目的

在事故发生后系统性地分析根因、总结教训、制定改进措施,将事故转化为组织知识,防止同类问题再次发生。

适用时机

  • 生产环境服务中断/降级
  • 数据丢失或损坏
  • 安全漏洞被利用
  • 发布导致严重问题
  • 任何影响用户的 P0/P1 级事件

流程步骤

第一部分:事故分级

级别 定义 示例 响应时间
P0 核心服务完全不可用 全站宕机、数据全部丢失 立即
P1 核心功能严重受损 支付不可用、大量用户报错 15 分钟
P2 非核心功能异常 通知延迟、部分页面慢 1 小时
P3 轻微影响 个别用户偶发错误 4 小时

第二部分:应急响应

P0/P1 应急流程:

1. 确认事故(监控告警/用户报告)
2. 评估影响面(多少用户受影响?哪些功能?)
3. 止血(优先恢复服务,不急于找根因)
   - 回滚部署
   - 重启服务
   - 切换备用
   - 降级(关闭非核心功能)
4. 通知相关方(用户/团队)
5. 持续监控直到恢复
6. 确认恢复

应急原则:

  • 先止血,后查因
  • 不确定时回滚(回滚比排查快)
  • 保留现场日志和数据(用于后续分析)
  • 记录时间线(什么时候发现、什么时候做了什么)

第三部分:复盘会议

时间: 事故恢复后 1-3 天内(记忆还新鲜)

参与人: 事故相关者(个人开发则自己)

议程:

  1. 回顾时间线(5 min)
  2. 分析根因(15 min)
  3. 讨论改进措施(15 min)
  4. 分配行动项(5 min)

第四部分:根因分析

5 Whys 方法:

为什么服务宕机?→ 内存溢出 (OOM)
为什么内存溢出?→ 一次性加载了 100 万条数据
为什么加载这么多?→ 导出功能没有分页
为什么没有分页?→ 最初数据量小,没考虑增长
为什么没考虑?→ 没有性能预算和大数据量测试
→ 根因:缺少性能预算和压力测试

分析维度:

  • 直接原因(什么触发了事故)
  • 根本原因(为什么没有预防)
  • 发现原因(为什么没有更早发现)
  • 恢复原因(为什么恢复花了这么久)

第五部分:改进措施

每个改进项必须:

  • 具体可执行(不是"加强注意")
  • 有负责人
  • 有截止日期
  • 可验证完成

改进类型:

类型 示例
预防 添加内存限制、分页查询
检测 添加内存使用告警
恢复 自动化回滚脚本
流程 大数据量功能必须压测

第六部分:无责文化

原则:

  • 复盘对事不对人
  • 目标是改进系统,不是追责
  • 每个人都可能在系统中犯错
  • 关注"为什么系统允许这个错误发生"
  • 鼓励主动报告和暴露问题

检查清单

  • 事故已分级
  • 应急响应及时(止血优先)
  • 时间线已记录
  • 根因已分析(5 Whys)
  • 复盘会议已召开
  • 改进措施具体可执行
  • 每个改进项有负责人和截止日期
  • 复盘文档已归档
  • 改进项已纳入 backlog 跟踪
  • 必要时通知了受影响用户

输出物

输出物 格式 存放位置
事故报告 Markdown docs/incidents/YYYY-MM-DD-title.md
改进行动项 Issue/清单 项目管理工具
时间线记录 文档 事故报告内

常见误区

误区 正确做法
修好了就不复盘 必须复盘,防止再犯
复盘变成批斗会 无责文化,关注系统改进
根因停在表面 用 5 Whys 追到根本
改进措施太模糊 具体、可执行、有截止日期
改进项提了不跟踪 纳入 backlog,定期检查完成情况

相关文档