
背景

根因定位浅谈
搜索定位类:当多维KPI异常,如何定位到其根因维度,也叫指标下钻分析,是2019年AIOps挑战赛的赛题。
-
指标关联类:该类根因分析旨在分析海量的多维时间序列,找到故障时不同指标之间的关联关系(因果关系)。 调用异常类:该类根因分析一般具有明确的服务调用拓扑关系(图),旨在捕捉服务链路上的异常,定位异常实体。
以上三个场景是研究人员常关注的问题,各有多篇相关论文阐述。
微服务架构异常诊断的难点
基于CauseInfer方法的根因定位
研究领域:
CauseInfer是针对微服务领域性能问题的根因定位方法,其主要考虑物理资源、逻辑资源(锁)异常引起的微服务异常问题(如下图)。

A. 数据收集:
B. 异常点检测:

C. 因果图构建:
因果的定义:变量X的变化会影响到变量Y的分布,则称X是Y的原因,记作X→Y,默认X、Y不会互相影响。所以要构建的目标因果图是一个DAG。(有向无环图)
服务因果图:
各主机执行netstat命令获取连接信息列表。(包含协议、源、目标、连接状态等)
提取TCP连接的部分构造成:source_ip:port→destination_ip:port的列表形式。
查询端口对应的服务名,将上面的列表元素中端口替换成服务名,得到source_ip:service1→destination_ip:service2的列表。
通过Client、Server之间发送流量的滞后相关性确认(ip,service)元组(比如(192.168.1.115,tomcat) — (192.168.1.117, httpd))之间的因果关系。假设服务A发送的流量是(X1,X2,…..XN),服务B发送的流量是(B1,B2,…..BN),则滞后相关性ρ(k)计算如下,k∈[-30,30],通过下面的计算公式找到|ρ|max时的K值,当K>0则说明A→B,否则B→A(下图2说明k=4时,ρ最大且大于0,说明A→B。


指标因果图:
基于PC-Algorithm生成,这是一种从一组变量的集合中建立DAG的算法。G=(V,E),V表示变量集,E表示边集。
基于条件交叉熵G2确认变量是否独立(如下公式),m表示样本集的大小,CE表示某种情况下的交叉熵,若G2>0.05,则说明(X,Y|Z)独立。

通过PC算法生成一个完全联通的DAG,通过G2确定DAG中独立的部分,从而获得骨架图。
使用D-Separate方法确认剩下变量的因果方向,即可得到指标因果图。(基于PC算法,根据是否有先验因果关系可分成2种方法)
使用PC算法生成的DAG可能包含多个孤立子图,违反直觉的因果关系和双向链接,通过以下方式选出最大子图:
1)TCP延迟指标无子级
2)最终的影响指标在图中从每条路径都可抵达
3)预设的根因指标无父级
4)对于双向链路,随机取舍一个方向
根因判断:
在线的异常点检测:使用带滑动窗口的双边Cusum方法判断应用的SLO指标是否异常。
假设应用X指标为(X1,X2,…..XN),窗口长度为60,通过检测[XT-60,XT]的Cusum来判断XT是否异常(设定上下阈值),若出现异常,则窗口暂停。
DFS深度优先算法遍历本应用的性能指标因果图,当某个异常节点无异常子节点,则判断此指标为根因指标,如果本服务性能指标正常,则对父服务SLO进行异常检测,重复此步骤。

如果输出的是根因节点的集合,则通过下面的公式计算得分,对根因进行排序输出。

实践


总结
当前,在大型Internet系统中,基于微服务架构的应用变得越来越普遍,而高度动态的实时运行环境使得微服务系统很容易出现性能和可用性问题。快速故障根因定位可以提高服务质量并减少收入损失。本文探索的CauseInfer方法可以自动构造两层层次因果图且推断故障的原因,对于微服务系统下的性能诊断有着良好的借鉴意义。
【参考文献】
P Chen,Y Qi,P Zheng,D Hou,CauseInfer: Automatic and distributed performance diagnosis with hierarchical causality graph in large distributed systems,IEEE 2014
感谢您的阅读
如果您的企业有相关研运需求
请点击阅读原文,留下您的需求
我们将安排对应区域的同事与您详细介绍
Reading
在看一下,让更多人同享好文哟!







