故障根因定位流程
故障发生时,工程师面对的是一个复杂的系统:告警可能是误导的,症状可能是连锁反应,根因可能隐藏在几层调用之下。根因定位流程是一套系统化的方法,让工程师能够高效地从告警出发,沿着因果链追踪到真正的根因。
根因定位的经典困境
这个案例说明:告警点往往不是根因点。从告警到根因,可能隔着多层因果链。
根因定位流程(八步法)
第一步:确认告警
在开始排查前,先确认告警是否有效:
确认清单:
第二步:评估影响范围
快速回答三个问题:
第三步:建立时间线
时间线的作用:
- 帮助团队对齐「从什么时候开始出了问题」
- 便于后续复盘分析
- 识别出「在什么时间点应该做什么」
第四步:快速缓解
在定位根因的同时,如果用户正在受到影响,优先缓解:
缓解不是根因修复,但可以减少用户影响。在缓解后,根因分析仍然需要继续。
第五步:链路分析
使用链路追踪定位慢请求:
第六步:日志关联
用 TraceID 串联所有日志:
在 Loki 中:
第七步:指标关联
查看关联指标的变化:
第八步:因果验证
找到疑似根因后,验证它确实是根因:
典型故障场景的排查路径
场景一:服务 P99 延迟升高
场景二:服务错误率升高
场景三:服务无响应
工具使用清单
常见误区
误区一:从告警点开始排查
告警点往往是「故障的表现」,不是「故障的原因」。
误区二:过早下结论
找到第一个异常点就认为找到了根因。
误区三:只关注当前告警
一个故障可能同时触发多个告警,只看一个可能看不到全貌。
质量判断标准
读完本节后,你应该能够回答:
- 为什么说「告警点往往不是根因点」?请用一个具体例子说明告警点和根因之间的距离。
- 根因定位流程的「八步法」中,哪几步是最容易被跳过的?为什么说「快速缓解」不能替代「根因分析」?
- 链路追踪(Jaeger/Tempo)和日志(Loki)在根因定位中分别扮演什么角色?它们如何配合使用?
- 「因果验证」为什么是根因定位流程的最后一步?跳过这一步会有什么后果?
- 在排查「服务 P99 延迟升高」和「服务错误率升高」两种场景时,排查路径有什么不同?