元数据
| id | incident-review-consensus | 收录 | 2026-09-01 |
|---|---|---|---|
| 问题域 | 经验与方法论 | 主题分组 | 经验与方法论 |
| 适用工具 | 未挂接 | ||
症状
先讲一个我闭着眼都能复述的凌晨:周一 2 点,手机在枕头边炸响。打开告警平台,同一个页面报错触发了 8 条 alert,点进去发现是同一个接口超时了 3 次——凌晨两点把你叫醒的,不是事故,是同一个事故的 8 份复印件。这种事来三次,你就再也不信告警了。然后真正的大故障来了,你的第一反应是"又是误报吧",翻个身继续睡。
这还不是最可怕的。我见过一个朋友的真实经历:周日晚上,他负责的结算系统被刷走了 2.6 万——87 笔订单重复结算,其中一个人已经跑了,另一个账户里只剩几百块。大领导连夜打电话问他损失,他一夜没睡着。周一早上,代码还没改完,就被拉进会议室开"批斗会":你算什么高级开发、别人犯这种错早滚蛋了。他忍着把修复上线,结果几天后同样的漏洞又出现了——底层分布式锁没锁住,一个线程把另一个线程的锁释放了。
于是有了第二场批斗会:"今天必须修完,再出问题自己提离职。
"
还有一种死法,很多人正在经历:复盘写了 30 页 PPT,时间线画得漂漂亮亮,5Why 写得头头是道——然后 3 个月后,同类故障原样再来一遍。不是分析不到位,是产出物不对:大多数团队把复盘停在"时间线 + 根因分析"两步,而真正能阻止复发的改进 Action 列表、告警规则更新、SOP,一个都没做。PPT 交上去的那一刻,复盘就已经结束了。
再补一刀:干了 4 年高强度 on-call 的人会告诉你,故障总在你最不想它来的时候来——团建路上,两个大哥各自写了一个 bug,合流成文件描述符泄漏,凌晨 4 点才挂掉电话,睁着眼睛到天亮;还有一次版本回滚,因为新功能影响回滚稳定性,全网回滚直接让系统趴窝——本来是止血,结果血崩。
如果你也在经历这些——被假告警骗到失眠、复盘写了没人看、出了事被追责到不敢上报、或者每次上线都怕下一秒手机响——这篇文章是写给同类人的。它不是运维手册,是那些真被事故教育过的人,用睡眠和头发换来的共识:**事故处理从来不是"找出谁错了",是"让系统活下来,并且永远不要再这样死一次"。**
原因
先想清楚:事故为什么会一次次重复?四个错位,每个都是"看着在做事,实际在空转"。
**第一,把"处理事故"当成"找根因"。** 事故现场最没用的两个问题就是"为什么"和"谁的锅"。你见过急诊室先问病人"你为什么被砍"吗?医生先止血,人活下来再问。故障处理也一样:确认根因、确认责任,在快速应急中毫无意义——重点是先把功能恢复。把"止血"和"根因"绑死在一起,就是灾难:你必须在最紧张的状态下先找到根因,才能决定怎么止血,于是 2 小时能解决的事拖成 6 小时。
**第二,把"复盘"当成"写报告"。** 复盘会的唯一目标应该是"故障永远不再发生"。但大多数复盘的实际目标是"把 PPT 交了"。时间线画了、根因分析了,然后呢?改进项没有负责人、没有截止日期、没有验证方式——"分析到位但执行没跟上",这是复盘的普遍死因。写报告是在安慰自己,拆任务才是真复盘。
**第三,把"告警"当成"越多越好"。** 大多数团队的告警系统是"宁可误报,不可漏报"的心态搭起来的:告警数量堆上去了,质量没人管。结果就是狼来了——假阳性率超过 30% 的告警规则还留着,比没有还危险:它让你在真正重要的告警来临时,下意识先等等。
**第四,把"追责"当成"管理"。** 批斗会式的复盘只会教会团队一件事:如何不背锅。人一旦害怕被追责,就会隐瞒、延迟上报、自己偷偷修——而事故处理最怕的就是"发现得晚"。追责文化不是让团队更负责,是让故障藏得更深、炸得更大。
下面每条经验,都是把事故处理从"走形式"拉回"真闭环"的做法——它们不是一家之言,是几套独立实践反复验证过的共识。
解法
下面每条经验都按「现象 → 做法 → 为什么」展开。它们不是一家之言,而是多篇独立实践里反复出现的共识。
### 经验 0(L1 一句话结论):事故处理只有三件事——止血、复盘、防复发,顺序不能反
**处理事故的顺序永远是:先止血(让业务恢复)→ 再复盘(时间线/根因/改进项)→ 最后防复发(告警升级 + SOP + 演练)。** 赶时间只看这一条:下次故障,先别问"为什么",先问"怎么让它先停下来"。下面经验 1~5 是为什么和怎么做。
### 经验 1:止血优先——先找"变量",别追"根因"
现象:第一次独立处理线上故障,我很快就定位到"不是功能 bug,是运维把版本配置发错了",当场松了一口气,觉得事不关己。老板立刻提醒我:排障还没结束,先确认受影响节点范围、确认止血方案。后来我复盘才明白,那一刻我差点犯下新手最典型的错误——把"找到原因"当成"处理完了"。
做法:①止血永远是第一优先级,像急诊先止血一样,先让业务活下来,根因后面再查;②止血最快的手段不是查根因,是找"变量"——故障一定是某个变化引发的(版本变更、配置改动、机房上下线),而变量比根因好找得多;有团队专门做了"变更监控中心",把系统事件按维度展示,客户一出故障,先把最近所有变更拉出来比对;
③止血方案也要灰度——我见过一次全网回滚直接把系统搞趴窝的:新功能影响了回滚稳定性,全网回滚时系统血崩。
所以新功能必须设计成"可回滚",止血动作也要先小范围验证再全量;④指定"应急一号位"统筹沟通,其他人同步排查思路、给判断依据,别抢麦、别各查各的。
为什么:变量好找、根因难找,而止血只需要变量;把止血和根因绑死,意味着必须在高压下做最难的推理,这正是故障处理拖成数小时的原因。可回滚是设计出来的,不是应急时想出来的;回滚都敢全网直上,就是对生产环境没有敬畏。
### 经验 2:复盘产出 5 样东西,不是 30 页 PPT
现象:30 页 PPT、时间线精确到分钟、5Why 写了五层——然后同类故障 3 个月后再来一次。为什么?因为复盘产出物不对:90% 的复盘缺失"改进 Action 列表"这一环,建议停留在口头,没人负责、没人跟踪、没有验证方式。
做法:一次有效的复盘,强制产出 5 样东西:①**时间线文档**——只记事实不评价("张三失误了"改成"执行了配置变更"),精确到分钟,必须记录"发现方式":是监控发现的,还是用户投诉发现的——差别巨大;②**根因分析(5Why)**——至少追问到第 4 层,直到找到系统性原因;人犯错是必然的,要问"系统为什么没拦住",而不是"谁的手滑了";
③**改进 Action 列表**——每条有且仅有一个负责人、明确的截止日期、可验证的完成方式;
不写"加强培训""提高意识"这种虚话,必须具体到"做什么 + 怎么验证";④**监控/告警规则更新**——每次复盘都回答一个问题:"如果告警更好,这次能不能更早发现、甚至避免?";⑤**SOP 新建或更新**——下次碰到同类问题,有标准处理流程可循。所有 Action 进项目管理工具跟踪,每周站会 Review 一次逾期项。
为什么:复盘的唯一目标是"永远不再发生",而"不再发生"只能靠落地的 Action 实现,不靠精彩的 PPT。Action 要像功能需求一样严谨:有负责人、有 deadline、有验收——并且要定期演练,确保它在真空期真的管用。如果改进项还没做完故障又来了,还要有临时方案兜底。
### 经验 3:告警是信号不是噪声——把告警质量当产品做
现象:真正让你睡不好觉的从来不是告警数量多,是告警质量烂。同一个接口超时 100 次,发 100 条告警;error、warning、info 全走同一条通知路径——凌晨三点手机震了,点开是个 warning。有人实测:把告警分组键改成"project + event.type + culprit"后,同一个接口的错误 100 次只出一条告警,每晚告警量直接降 40%。
做法:①**去重分组**——相同错误归并成一条(Sentry grouping key 精确化,或 Alertmanager 的 group_by + group_interval);②**分级通知**——P0 立即电话(核心功能报错 + 错误率超阈值 + 用户受影响),P1 工作群通知(非核心报错、性能退化、依赖超时),P2 只记录不通知(重试类、可容忍抖动,周五统一 review);
③**路由到人**——按服务归属和 on-call 排班表精确通知当班人,别 @全员——@channel 的结果是每个人都觉得不是自己的事;
④**反馈闭环**——每次值班结束后,把"这条告警是真问题还是误报"反馈回告警系统,让规则学习:假阳性率超过 30% 的规则,要么改条件,要么关掉。
为什么:告警的本质是"让你在正确的时间被叫醒"。留着一个天天误报的告警,比没有还危险——它训练你对告警免疫。判断告警系统好坏的三个数字:过去 7 天告警总数、假阳性率、平均响应时间——这三个数字决定你 on-call 睡得着睡不着。
### 经验 4:不追责,才能防复发——复盘会不是批斗会
现象:批斗会式复盘的结局,我在前文那个结算事故里见过两次:第一次被骂,他学会了"以后犯错被骂,不要解释为什么,只要认错加给解决时间";第二次同样的问题复发——不是他不努力,是追责文化让所有人都忙着证明"不是我的锅",没人真正去修系统的漏洞。假复盘结束后,团队成员只学会了"如何不背锅"。
做法:①**对事不对人**——时间线文档只记录事实,不写人名评价;问"系统为什么没拦住",不问"谁该负责";②**制度不靠人**——不要用"这个人靠不靠谱"来衡量故障会不会发生,用规则和制度确保系统运行的下限:变更必须生成 diff 并过审批、参数加下限保护、关键参数突变要告警;③**举一反三**——DNS 故障就不能只修出事的那个点,要把生产系统里所有涉及 DNS 的场景全部梳理一遍;
④**如果你是被追责的那个人**——别把骂往心里去,那是情绪宣泄;
认错 + 给解决时间,把精力花在真正修好问题上;事情解决才会真正安心,心态调整而不解决问题,下次还会在同一个坑里。
为什么:人犯错是必然的,系统设计必须默认人会犯错;追责只会教会隐瞒——隐瞒意味着发现得晚,发现得晚意味着损失放大。真正的复盘文化是"我们都不背锅,我们一起找系统升级的机会"。
### 经验 5:平时攒"应急肌肉",出事才不慌
现象:高强度 on-call 的状态,像开着飞机换引擎——系统在高速运行,变更在持续推进,故障随时可能发生。第一次处理故障的人,十成本事只能发挥八成;而老手镇定自若,不是胆子大,是平时就把"应急肌肉"练好了。
做法:①**熟悉系统**——日常通过画流程图、做代码复盘加深对架构的理解,事故现场你才知道该看哪里;②**沉淀工具脚本**——日志分析脚本、批量排查模板,写一次存好,现场少翻文档、少现写;③**分阶段总结排障方案**——每次故障后把排查步骤沉淀成自己的 SOP,持续迭代;④**开发时就预设灰度、监控、回滚**——可回滚是新功能的设计要求,不是上线后的补救;
⑤**定期演练**——改进 Action 要像功能一样被测试,故障演练是验证 Action 有没有用的唯一方式;
⑥**心态**——故障应急不是考试,考试是筛选人,应急是让产品恢复;"代码和人,只要一个能跑就好";就一份工作,身体和家庭比公司重要——出天大的 bug,业务不会凉,写 bug 的人不会死。
为什么:临场发挥的上限,取决于平时积累的下限。演练的价值在于:改进项还没做完的"真空期",你也有一份临时方案兜底,不会在同一块石头上绊倒两次。
### 怎么开始用(落地清单,L1 执行层)
1. 今晚值班前先看三个数:过去 7 天告警总数、假阳性率、平均响应时间;假阳性率超过 30% 的规则,先改条件或关掉;
2. 下次复盘强制 5 产出物:时间线 / 5Why / Action 列表 / 告警规则更新 / SOP;每条 Action 有唯一负责人 + 截止日期 + 验证方式,进项目工具跟踪,每周站会 Review 逾期项;
3. 变更纪律:新功能必须可回滚;止血方案也要灰度,全量操作前先小范围验证;关键配置变更必须生成 diff 并过审批;
4. 应急一号位:故障会议指定一人统筹,其他人同步排查思路、给判断依据,不抢麦、不各查各的;
5. 被追责时:认错 + 给解决时间,不解释;复盘记录只写事实,不写人名评价。
### 怎么迁移到你的场景(L3 深入层)
- **个人项目**:你没有 on-call 团队——把"变更前可回滚"变成肌肉记忆:git tag、镜像打 tag、数据库备份,发布前 30 秒能回退;出事后写 5 行复盘:时间线 / 变量 / 根因 / 下一次怎么防 / 告警怎么补。
- **小团队(5-15 人)**:先落地两件事——告警分级 + 复盘 5 产出物;每周站会花 5 分钟 Review 逾期 Action;别搞追责,时间线只记事实,你会发现报障的人变多了、故障变少了。
- **大型团队**:变更监控中心 + 应急一号位 + 定期演练是标配;告警治理要当产品做(去重 / 分级 / 路由 / 反馈闭环);复盘 Action 与需求同权,进项目管理工具跟踪,逾期就是欠债。
- **AI 时代**:AI 写代码让变更频率又上了一个台阶——回滚预案和灰度从"最好有"变成"必须有";AI 可以帮你起草时间线、分析日志、优化告警规则,但"负责人、截止日期、验证方式"必须人定——AI 不会为故障负责,也不会告诉你"这次变更会引入什么新问题";告警和演练在 AI 时代比过去更重要,因为错误传播的速度前所未有。
- **如果你正卡在"复盘没人看 / 告警天天误报 / 被追责到不敢报"**:从最小的闭环开始——把最近一次事故的 Action 列表补全(哪怕只有 3 条,每条带上负责人、日期、验证方式);把假阳性最高的那条告警改条件或关掉;下次事故记录只写事实、不写人名。三个星期后,你会看到差别。
收尾:我经历过最蠢的事故复盘,是凌晨三点,十个人在会议室互相找责任,而没人问「下次怎么防」。复盘不是批斗会,是给下一次事故买保险。下次线上出事,顺序记牢:先止血,再写五行的复盘(时间线/变量/根因/下一次怎么防/告警怎么补),最后问一句「告警能不能提前十分钟告诉我」。把复盘写成责任状的人会输,把复盘写成保险单的人,会越扛越稳。
来源与证据
素材来源:
验证证据:共识型经验(多篇同主题来源提炼,案例已脱敏融入正文,不逐一列出)