智能运维之道:基于AI技术的应用实践
上QQ阅读APP看书,第一时间看更新

1.3.2 根因诊断

1.根因诊断的概念

根因诊断,又叫根本原因分析(Root Cause Analysis, RCA),在心理学上称为归因分析,医学上则被称为病因学研究。字面意思是指通过结构化分析,一步步找出问题的根本原因。在运维领域,是基于发现的异常问题,再进一步分析其发生的原因,进而预防下一次再发生类似的异常问题。

这类的智能运维场景主要有定界定段、调用链追踪分析、瓶颈分析,另外智能机器人可在该领域辅助运维人员和算法工程师进行上述3个应用分析。

定界定段是指根据KPI指标的分布特征,判断事件发生问题的特定分布,进而作为发生异常问题的原因,如在物联网质差设备根因分析中,发现T时刻KPI指标发生异常,通过关联的网络性能指标分布发现,某几个指标在T时刻也发生异常,则这几个指标很可能是引起KPI指标异常的原因。

调用链追踪分析是指对调用链信息过滤,或查看应用拓扑、实时聚合链路表和调用链瀑布图,找到与问题相关的关键指标,即作为已发异常的原因;瓶颈分析是通过相关分析、协方差分析、回归分析等方法找出影响某个性能的多个维度指标及取值范围。

2.根因诊断的方法

当前这种场景的分析思路主要有两种。一种是通过算法对外部维度的指标进行分析,找出相关性高的指标,再通过运维人员确认这类指标与发生的问题在业务上存在的因果关系,则这些指标被当作原因,如瓶颈分析。另一种是通过算法在内部维度的指标中,采用不断下钻的方式,找到影响上层指标发生异常的指标作为原因,如调用链分析。这种不断下钻的方式,在很多领域都通用。例如在分析互联网APP活跃用户数下降时,第一步下钻到新增活跃用户数、已有活跃用户数这两个指标哪个发生下降,如果发现只有已有活跃用户数发生下降,接着第二步再继续下钻分析已有用户数、老用户留存率哪个指标发生下降,这样逐级下钻找到最底层发生下降的指标,从而找到根本原因。活跃用户数的指标组成如图1-12所示。

图1-12 活跃用户数的指标组成

这种下钻的分析思路,类似于“打破砂锅问到底”的逻辑。再如下面的例子。

A:为什么这个设备的性能数据为空?

B:因为那个时段,这个设备的网络断了。

A:为什么网络断了?

B:因为那时突然断电了。

A:为什么那时会断电?

B:因为机房外的路段被一辆大货车发生事故时压断了。

A:为什么大货车会在那里发生事故?

B:…

其实,上面两种根因分析的思路,严格意义来说并不是因果推断的方法。2018年2月,图灵奖得主、贝叶斯网络之父Judea Pearl在他的论文《Theoretical Impediments to Machine Learning With Seven Sparks from the Causal Revolution》中提出了判断因果关系的3层逻辑。

1)第1层是关联:即两个事件是因果关系,前提是两者必须存在关联性,即相关关系。

2)第2层是干预:X发生增长了,Y也发生增长了;如果改变X的变化,Y会如何变化?还会继续增长吗?

3)第3层是反事实推断:比如某人吃了一种药物,十分钟后血压恢复正常了,那如果十分钟前他不吃这种药呢?血压会恢复正常吗?

第3层逻辑在实际生活中不可能对同一个人或事物收集到正事实和反事实的两组数据进行分析,这点在统计学家们的努力下通过大量随机抽样、倾向得分匹配、双盲实验等方案得以实现。上面的3层逻辑,在统计学的分析中做了稍微变动,因果关系成立的3个条件如下。

1)两个事件存在相关性。

2)原因发生在结果之前:这点符合人们常识,很容易理解,先出现原因,才发生结果。但先发生的事件不一定是原因,这在日常生活中也非常普遍,如吹空调不是第二天感冒的原因。

3)排除混淆因素:X发生,Y也发生;那X+A一起发生,Y会发生吗?X+A+B一起发生呢?A+B一起发生呢?Y是否还会发生?如经常见到的例子:如常见的例子:公鸡打鸣与太阳升起、儿童身高与掌握单词的数量,表面都存在正相关关系,但当没有公鸡打鸣时,太阳依然升起;儿童身高不变,但读书时间增长时,单词量也会增加。前者并不是后者真实的“原因”。

由于当前在整个机器学习和深度学习领域,因果推断的逻辑和算法仍未得到充分认可,多数学者认为只关注事物的相关关系就已足够,暂不能对运维领域在该场景内的逻辑要求那么苛刻,够用即可。在第3章,将详尽介绍因果推断的算法,期望读者看后有所启发,以及在所在领域内尝试使用,希望在不久的将来能看到改变。