2、根因分析(RCA)基础:RCA的定义、RCA的目标、RCA的5个核心原则、RCA的常见误区
好,我们正式开始讲根因分析。很多团队出了故障,第一反应是「赶紧修」,修完了就完事了。结果呢?同样的故障换个马甲又来了。说白了,这就是没做根因分析,或者做了但没做到位。
我个人习惯把 RCA 比作「故障后的尸检」。你不能只看表面伤口,得把内脏都翻出来看看,找到真正的死因。否则下次换个病毒,照样倒下。
2.1 RCA 的定义
RCA,全称 Root Cause Analysis,根因分析。它不是简单的「找 bug」,而是一套系统化的方法。目的是从表象症状出发,层层剥开,找到那个最底层的、根本性的原因。
举个例子。线上服务挂了,表象是「CPU 飙到 100%」。你重启了,好了。这是修复,不是分析。RCA 要问的是:为什么 CPU 会飙?是代码死循环?是突发流量?还是依赖的下游超时导致重试风暴?
RCA 的核心定义: 通过结构化的流程,识别问题的根本原因,并制定预防措施,防止问题再次发生。
注意,这里的关键词是「预防」。不是为了追责,不是为了写个报告交差。是为了下次不再掉进同一个坑里。
2.2 RCA 的目标
RCA 的目标,我总结为三个层次:
- 第一层:找到真因。 别被假象迷惑。我在项目中遇到过,一个数据库慢查询,大家第一反应是「加索引」。加了,确实快了。但根因是什么?是代码里有个循环查询,每次查都走全表。加索引只是治标,改代码才是治本。
- 第二层:制定措施。 找到根因后,得有对应的行动项。是改代码?加监控?还是优化架构?措施要具体,要可执行,要有负责人和截止时间。
- 第三层:知识沉淀。 把这次的经验变成团队的财富。写成文档,更新到 runbook,甚至改进自动化工具。让后来的人不用再踩一遍雷。
我的小建议: 每次 RCA 结束后,问自己一个问题——「如果这个故障明天再发生一次,我们的系统能自动防御住吗?」如果答案是否定的,那 RCA 还没做完。
2.3 RCA 的 5 个核心原则
做 RCA 不是拍脑袋,得遵循一些基本原则。我把它归纳为 5 条,每一条都是用教训换来的。
| 原则 | 说明 | 我的经验 |
|---|---|---|
| 1. 聚焦系统,而非人 | 不要问「谁犯了错」,要问「系统为什么允许这个错误发生」。 | 我曾经见过一个团队,出了故障就找「责任人」,搞得人人自危。最后没人敢上报问题,故障反而更多了。 |
| 2. 持续追问「为什么」 | 至少问 5 个为什么,直到找到那个可以采取行动的原因。 | 你想想看,很多时候我们问两三个「为什么」就停了,觉得够了。其实远远不够。 |
| 3. 基于证据,而非猜测 | 所有结论都要有数据、日志、监控指标支撑。 | 「我觉得是网络问题」——这种话在 RCA 会议上没有价值。拿出 ping 的丢包率,拿出 tcpdump 的抓包结果,这才叫证据。 |
| 4. 系统性思考 | 不要只看单一事件,要看整个系统的交互和依赖。 | 一个服务挂了,可能是它自己的问题,也可能是它依赖的 10 个服务中任何一个出了问题。要画依赖图,要分析调用链。 |
| 5. 行动导向 | RCA 的最终产出不是一份报告,而是一组可执行的改进措施。 | 报告写得再漂亮,如果没人去落实,那就是一张废纸。 |
2.4 RCA 的常见误区
做 RCA 这么多年,我踩过不少坑,也见过别人踩。下面这几个误区,你一定要注意。
误区一:找到单一根因就收工
大多数故障都不是单一原因造成的。往往是多个因素凑在一起,才导致了最终的故障。比如:代码有 bug + 监控没覆盖 + 发布流程有漏洞 + 回滚方案不完善。这四个因素缺一个,可能都不会出事。所以 RCA 要找到「根因链」,而不是「根因点」。
误区二:把 RCA 变成追责会
我曾经参与过一个 RCA,会议开成了批斗大会。大家互相指责,气氛非常紧张。最后 RCA 报告里写的是「某工程师误操作」。然后呢?那个工程师被批评了,但系统没有任何改进。下次换个人,同样的操作还会发生。记住,我们要改进的是系统,不是惩罚个人。
误区三:措施太虚,无法落地
「加强测试」、「提高警惕」、「完善流程」——这些措施说了等于没说。什么叫「加强测试」?是增加单元测试覆盖率?还是增加集成测试场景?还是引入混沌工程?措施必须具体到「做什么、谁来做、什么时候做完」。
误区四:只分析技术原因,忽略流程原因
很多故障,表面上是技术问题,根子却在流程上。比如:为什么代码 review 没发现这个 bug?因为 review 流程形同虚设。为什么灰度发布没拦住?因为灰度策略太粗糙。技术问题好修,流程问题改起来才难,但往往收益更大。
避坑指南: 我曾经犯过一个错误——RCA 做完了,措施也定了,但没人跟踪。三个月后,同样的故障又发生了。后来我学乖了,每次 RCA 结束,都会在项目管理工具里创建对应的改进任务,设置负责人和截止时间,并且定期 review 进度。嗯,这一步不能省。
好了,RCA 的基础就讲到这里。记住这 5 个原则,避开这 4 个误区,你的根因分析就已经走在正确的路上了。下一节,我们会深入讲具体的 RCA 分析方法,比如 5 Whys 和因果图。到时候我会拿一个真实的故障案例,一步步带你走一遍。