根因分析算法
根因分析(Root Cause Analysis,RCA)是可观测性关联分析的终极目标。当故障发生时,值班人员需要从大量告警、日志、链路中快速定位真正的根因。传统的人工排查方式效率低下,尤其在微服务架构中,一次故障可能触发数百条告警,靠人工分析几乎不可能完成。根因分析算法正是来解决这个问题。
根因分析算法分为三大类:基于拓扑的方法利用服务依赖关系构建故障传播图;基于时序的方法分析异常事件的时间相关性;基于因果的方法通过数据驱动发现因果关系。每种方法都有其适用场景和局限性,实践中通常需要组合使用。
故障传播图算法
故障传播图(Fault Propagation Graph)将服务间的依赖关系建模为有向图,节点是服务,边表示「A 服务的故障会导致 B 服务的异常」。当多个服务同时告警时,算法通过图的遍历找出「根节点」——那些没有上游依赖或上游服务都正常的节点。
典型的传播图算法是 MCDC(Multiple Condition Decision Coverage) 分析:对于图中的每条边,分析其对整体故障的贡献度。如果边 A→B 的故障总是先于 B→C,那么 A 更有可能是根因。这种方法假设故障传播是单向的,但实际系统中可能存在循环依赖。
时间序列异常关联
时序关联算法的核心假设是:相关的异常事件在时间上具有相关性。如果服务 A 的故障总是导致服务 B 在 5 秒后故障,那么 A 可能是 B 的根因。通过分析历史故障数据,可以建立事件间的时间延迟分布,用于预测根因。
基于互信息(Mutual Information)的时间关联分析:首先提取所有异常的准确时间戳;然后计算两两异常之间的互信息得分;最后将互信息得分高于阈值的事件对标记为相关。高互信息表明两个事件共享信息源,很可能是同一故障的不同表现。
因果发现算法
因果发现(Causal Discovery)是更高级的根因分析方法,它不依赖于预先定义的拓扑关系,而是从数据中自动学习因果结构。PC 算法(Peter-Clark Algorithm)是经典的因果发现方法,它通过条件独立性测试逐步构建因果图。
在实际应用中,因果发现面临两个挑战:计算复杂度——服务数量增加时,因果图的搜索空间指数增长;混淆因素——两个表面相关的事件可能有共同的隐藏原因。因果发现的结果需要结合专家知识进行验证,不能完全依赖算法输出。