上述问题有解析解:
当得到故障传播的结果()之后,可以得到对 broken IN 的估计。如果两个节点本来是有相关关系的,但是两个节点的都很大,那么他它们之间的边就越可能是 broken link。因此只需要优化,最小化重构出来的 broken IN 和实际的 IN 的差别即可。向量就是每个节点的根因分数。
RCA-KDD 提出了一个保证收敛性的迭代算法解上述优化问题,并且在一个实际数据集上验证了性能。
CRD 是对 RCA-KDD 的改进,主要的改进点是考虑节点会分成不同的组,故障会倾向于在组内传播。
RCA-KDD 和 CRD 基于两个假设,提出了解决 invariant network 的有理论基础的有效方法。除了这两个假设在实际中的有效性之外,利用它们解决根因定位还有一个鸿沟,就是 invariant network 和实际的依赖关系并不相同。至少实际的依赖关系应该并不会是无向图(或者说是权重相同的双向的有向图)。
第一节介绍了基于随机游走的方法,其中 CloudRanger 和 AutoMAP 需要利用已知的故障数据优化综合多指标相关的参数,因此他们也被列入此类。
如果有了足够的已知故障数据,是不是可以设计出对领域知识依赖更少的方法?
如果假设同一个故障总会导致相同的故障表现,我们就可以基于历史上发生的故障的异常表现和定位到的根因,推断当前的故障的根因。
这两个工作 [5:1][10:1] 记录异常的特征,和人工定位的结果,建立一个历史故障的数据库,当新的故障发生的时候,就基于当前的异常特征,寻找历史上出现过的最相似的故障的定位结果,推荐给运维人员。
故障根因和异常表现之前可能存在一些内在的逻辑,然而直接匹配历史上相似的异常并不能学习到这种内在逻辑,只能处理已经出现并定位过的故障。
MEPFL[8:1] 把单条调用链的根因节点定位问题看作多分类问题(每个类别就是根因是某一个节点),使用端到端的有监督机器学习模型(随机森林,神经网络)解决这个问题。MEPFL 的重点并不是机器学习,因此它只是简单地调用脸 scikit-learning 里面的 KNN,RF 和 MLP 这些包去做机器学习。MEPFL 利用领域知识,将一个调用链编码为以下这些特征:
MEPFL 用的方法能取得非常好的效果。另外,从下图可以看出,MEPFL 确实可以成功定位没有见过的异常调用链类型(一种特定故障注入在一个特定的微服务上是一种类型)。和 MicroScope 一样,MEPFL 只处理单条调用链并不是实质性的问题。
这一类方法单纯比较定位的准确性是最强的,但是非常依赖足够的有标注数据。“足够”指的不是数据的量足够,而是指收集到的故障数据要覆盖尽量多的故障类型。
在实际的生产系统中积累有根因节点标注的故障数据必然是相当缓慢的,所以上述方法中会通过人为注入故障并收集对应的数据,得到更多的有标注的数据。但是在实际的生产系统中,注入数据就要求我们需要维护一套和生产系统规模相近的系统,并在上面注入足够大的流量,这样做的开销非常大。另一方面,需要有注入足够多类型的故障,有监督方法,包括 MEPFL,对于完全陌生的故障是无能为力的。
尽管在 MEPFL 中,作者证明可以在训练集覆盖的故障调用链类型只有 10%的情况下取得过得去的性能,但是实际上,这里不同类型的故障类型只有三类(一方面原因是 MEPFL 只考虑软件本身实现和配置的故障),故障调用链类型是考虑了注入在不同的节点上。但是,实际中的故障类型不胜枚举,如果是完全没有见过的故障类型,有监督方法能不能只用这么少数的故障类型训练得到的模型去定位新的故障类型的根因,就是一个问题了。
解决这一问题以下的策略可能是有帮助的:
RCSF[1:1] 认为通过挖掘调用链路图上异常最集中的部分可以找到根因。
具体来说,首先我们通过调用数据得到节点之间的调用关系图。如下图,我们得到节点之间的调用关系。
然后当告警发生时(例如上图中 B1 触发告警),对所有节点进行异常检测,得到异常的节点。根因节点至少需要是异常的。例如在上图中,检测出 F2 和 F6 都是异常的。
之后生成所有从异常节点到根因节点的路径,在上图中有:,,,,,.
最后从上面生成的序列中挖掘频繁子序列,这就是最后的根因。RCSF 中采用的是基于 SPAM 算法,不过这里具体采用的算法只是影响挖掘频繁子序列的效率了。
RCSF 的出发点很合理,但是 RCSF 生成的路径只是基于调用关系图的纸面路径而已,和实际的调用链路没有关系。
RCA[11:1] 中,将每一个节点的响应时间和调用链的总响应时间建模为。RCA 将这个视为一个线性回归模型,通过 LMG 算法将线性回归的分解到每一个节点的响应时间上,即得到每一个节点的响应时间的变化对总响应时间的变化的贡献。RCA 将其命名为相对重要性(relative importance)。
RCA 通过每个节点的相对重要性对所有的节点排序,越重要的就越可能是根因。
以上方法并没有最优的一个,而是在各自有不同的适用范围。
当有足够的历史故障数据,并且有调用链 ID 的时候,MEPFL 用的有监督机器学习方法可以取得所有方法里最佳的性能。
如果没有历史故障数据,但是有调用链 ID,类似 MicroScope 这种基于调用链进行定位比基于整个系统的调用图定位会更加精准。
如果没有调用链 ID,但是有足够的历史故障数据,匹配历史相似故障是可行的方案,或者可以利用历史故障数据优化随机游走等无监督方法的性能。
如果没有调用链 ID,也没有足够的历史故障数据,主要的方法就是随机游走,这些方法之间的不同主要是如何确定节点之间的依赖关系以及如何确定转移概率。但是大的方向总是分析异常节点和它的直接邻居之间的关系。
K. Wang et al., “A methodology for root-cause analysis in component based systems,” in 2015 IEEE 23rd International Symposium on Quality of Service (IWQoS), Jun. 2015, pp. 243–248, doi: 10.1109/IWQoS.2015.7404741. ↩︎ ↩︎
P. Wang et al., “CloudRanger: Root Cause Identification for Cloud Native Systems,” in 2018 18th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGRID), May 2018, pp. 492–502, doi: 10.1109/CCGRID.2018.00076. ↩︎ ↩︎ ↩︎
M. Ma, W. Lin, D. Pan, and P. Wang, “MS-Rank: Multi-Metric and Self-Adaptive Root Cause Diagnosis for Microservice Applications,” in 2019 IEEE International Conference on Web Services (ICWS), Jul. 2019, pp. 60–67, doi: 10.1109/ICWS.2019.00022. ↩︎ ↩︎
KimMyunghwan, SumbalyRoshan, and ShahSam, “Root cause detection in a service-oriented architecture,” ACM SIGMETRICS Performance Evaluation Review, Jun. 2013, doi: 10.1145/2494232.2465753. ↩︎ ↩︎ ↩︎
C. Pham et al., “Failure Diagnosis for Distributed Systems Using Targeted Fault Injection,” IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS, vol. 28, no. 2, p. 14, 2017. ↩︎ ↩︎
J. Weng, J. H. Wang, J. Yang, and Y. Yang, “Root Cause Analysis of Anomalies of Multitier Services in Public Clouds,” IEEE/ACM Transactions on Networking, vol. 26, no. 4, pp. 1646–1659, Aug. 2018, doi: 10.1109/TNET.2018.2843805. ↩︎ ↩︎ ↩︎
J. Lin, P. Chen, and Z. Zheng, “Microscope: Pinpoint Performance Issues with Causal Graphs in Micro-service Environments,” in International Conference of Service-Oriented Computing, Cham, 2018, vol. 11236, pp. 3–20, doi: 10.1007/978-3-030-03596-9_1. ↩︎ ↩︎ ↩︎
X. Zhou et al., “Latent error prediction and fault localization for microservice applications by learning from system trace logs,” in Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, Tallinn, Estonia, Aug. 2019, pp. 683–694, doi: 10.1145/3338906.3338961. ↩︎ ↩︎
M. Ma, J. Xu, Y. Wang, P. Chen, Z. Zhang, and P. Wang, “AutoMAP: Diagnose Your Microservice-based Web Applications Automatically,” in Proceedings of The Web Conference 2020, Taipei, Taiwan, Apr. 2020, pp. 246–258, doi: 10.1145/3366423.3380111. ↩︎ ↩︎ ↩︎
Á. Brandón, M. Solé, A. Huélamo, D. Solans, M. S. Pérez, and V. Muntés-Mulero, “Graph-based root cause analysis for service-oriented and microservice architectures,” Journal of Systems and Software, vol. 159, p. 110432, Jan. 2020, doi: 10.1016/j.jss.2019.110432. ↩︎ ↩︎
H. Jayathilaka, C. Krintz, and R. Wolski, “Performance Monitoring and Root Cause Analysis for Cloud-hosted Web Applications,” in Proceedings of the 26th International Conference on World Wide Web, Perth, Australia, Apr. 2017, pp. 469–478, doi: 10.1145/3038912.3052649. ↩︎ ↩︎
W. Cheng, K. Zhang, H. Chen, G. Jiang, Z. Chen, and W. Wang, “Ranking Causal Anomalies via Temporal and Dynamical Analysis on Vanishing Correlations,” in Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining - KDD ’16, San Francisco, California, USA, 2016, pp. 805–814, doi: 10.1145/2939672.2939765. ↩︎ ↩︎ ↩︎
J. Ni et al., “Ranking Causal Anomalies by Modeling Local Propagations on Networked Systems,” in 2017 IEEE International Conference on Data Mining (ICDM), Nov. 2017, pp. 1003–1008, doi: 10.1109/ICDM.2017.129. ↩︎ ↩︎
G. Jeh and J. Widom. Scaling Personalized Web Search. In WWW, 2003. ↩︎