Graph-based RCA in SOA and MS
Graph-based root cause analysis for service-oriented and microservice architectures
JSS 2020
2 RW
RCA方法有以下大致分类
- model-based的RCA方法
- Spectrum(也可以称之为Classification)方法。有人用ML来做
- 图的方法
2017年的Sieve,MS-Rank也提到了这篇论文。
3 Graph-based RCA
举一个Wordpress的例子,如果不做loadbalance,HAProxy的运行缓慢可能是其中某一个服务器负载过大。
Graph Modules
Node:
Edge:网络连接的对象,例如一次TCP连接的双方
Attribute:收集到的信息,比如Anomaly、metric和log
系统有以下几个modules:
anomalous region module
Extractor从system graph(系统的什么图?)中抽取一个子图,也就是anomalous region的子图。对于计算型的资源,选择异常节点周围2跳的所有节点作为子图,见图4。其他情况没提到233
pattern module
已经被标记为异常的节点,会作为计算相似度的模板。目的是为了对经常出现的异常做一个初始的集合,来避免冷启动的问题。(这里的冷启动是指异常区域没有可以对比相似度的对象)
similarity module
输入:1. 异常区域(anomaly region) 2. 异常模版(pattern)
输出:1. 相似度得分 2. 节点对应图(见图5)
4 Graph Similarity
都是自定义的相似度计算方法,包括两个图的相似度、两个节点的相似度、节点的属性相似度。
5 Monitoring and Building Graphs
Prom做监控,cadvisor和node expoter作为监控agent。
构建图的过程其实是节点和节点连接的过程,TCP连接就可以构建一个边,由此创建调用图。
6 Evaluation
场景
不同的场景有不同的异常注入方式
- 面向服务的场景
- 负载均衡场景
- Kafka集群场景
- Spark&HDFS场景
异常注入方式
- stress做cpu、mem压力异常
- 连接异常(带宽限制)
- 负载均衡异常
- 高并发异常
Precision
Training set的构建方式:异常注入的情况可以得到一些region啊,比如我用stress做异常测试,得到微服务m1出现异常,然后把m1周围2跳的节点抽取出来作为region。这就是一个新的pattern。
threshold是控制不同pattern的参数,threshold设为0.9表示和训练集中已有的pattern的相似度小于90%的region设为一个新的pattern。
实验做两次,第一次不做参数调整,第二次做参数调整。
好好看一下table2,挺有意思的。拿第一列来说,Kafka场景下,比如我用CPU做异常注入,不做参数调整得到的CPU pattern的相似度是0.43,和Disk、Band、Heap pattern的相似度分别是0.18、0.03、0.34。但是用参数调整得到的CPU相似度是0.87。
那么参数调整具体怎么做的呢?
一是领域专家做调整,二是根据节点自身附带的其他信息,比如这个节点本身是cpu联系性较高的,那就把CPU pattern的参数调高。
图15表示计算region和pattern之间相似度的时间会随着节点的增多而变大。