论文标题 | Learning Dependencies in Distributed Cloud Applications to Identify and Localize Anomalies
论文来源 | ICSE 2021
论文链接 | https://arxiv.org/abs/2103.05245
源码链接 | https://github.com/mcd01/arvalus-experiments

TL;DR

考虑到系统组件间的依赖和异常传播的关系,论文中提出了 Arvalus 及其变形 D-Arvalus 方法来提升异常检测和定位的准确性,主要想法是利用图卷积变换的方法来学习系统组件节点和边属性的特征,以此融合特征来判定系统组件节点类别,整体属于有监督的分类方法。实验部分在人工生成数据集中模拟故障,在此数据集中验证了算法的有效性以及考虑了依赖关系的 D-Arvalus 的有效性。

Algorithm/Model

论文中提出的方法主要包含三步:

  • 节点特征提取:将组件 KPI 子序列转换为节点特征;
  • 依赖关系模型:学习边权重然后基于图卷积方法将相邻节点特征融合;
  • 异常判定分类:根据融合后的节点特征进行异常分类;

Node Feature Extraction

给定系统组件指标序列S=(StRd:t=1,2,...,T)S=(S_t \in \mathbb{R}^d:t=1,2,...,T)dd 表示指标 KPIs 数量,子序列Sba=(Sa,Sa+1,...,Sb),0a,bTS_b^a = (S_a, S_{a+1},...,S_b), 0\leq a,b\leq T。首先需要将 KPI 子序列SbaRd×(ba)S_b^a\in \mathbb{R}^{d\times (b-a)} 转化为节点特征xRF\vec{x} \in \mathbb{R}^{F},以此来表示当前节点状态。

节点特征卷积模型如下所示:

节点特征

经过卷积后可以得到每个节点的特征维度XRd×FX^{\prime} \in \mathbb{R}^{d \times F},然后通过全局最大池化得到全局表示xRF\vec{x} \in \mathbb{R}^{F}

注意首先需要将相同服务节点划分为同一组中,相同组节点共享权重。

Dependency Model

考虑到组件间的依赖关系,因此论文中利用节点间不同的关系来进行邻居节点特征融合,提出了 D-Arvalus 模型。

基于依赖关系的模型如下图所示:

依赖关系

论文中首先定义了不同边类型,而且节点间依赖关系是已知的,定义了五种类型的关系如下表所示

依赖关系

以定义的类型作为边属性标记,然后将zz 种不同标记通过 one-hot 编码转换为边属性向量rijN0z\vec{r}_{i j} \in \mathbb{N}_{0}^{z}

为了使用图卷积的方法,需要学习每条边的权重作为邻接矩阵的值,论文中通过节点属性和边属性来学习此权重

A~ij=exp(ELU(f(xi,rij,xj)))kN(i)exp(ELU(f(xi,rik,xk)))\tilde{A}_{i j}=\frac{\exp \left(\operatorname{ELU}\left(f\left(\vec{x}_{i}, \vec{r}_{i j}, \vec{x}_{j}\right)\right)\right)}{\sum_{k \in \mathcal{N}(i)} \exp \left(\operatorname{ELU}\left(f\left(\vec{x}_{i}, \vec{r}_{i k}, \vec{x}_{k}\right)\right)\right)}

其中f:R2F+zRf: \mathbb{R}^{2F+z} \rightarrow \mathbb{R} 是线性神经网络,将属性特征映射到边权重值。

在此基础上论文中定义了简单的空间图卷积形式,直接融合相邻节点特征:

xi=jN(i)A~ijxj\vec{x}_{i}^{\prime}=\sum_{j \in \mathcal{N}(i)} \tilde{A}_{i j} \cdot \vec{x}_{j}

Identification and Localization of Anomalies

考虑融合节点特征和依赖关系特征后,论文中直接对节点特征进行分类。

分类模型如 Fig.2 最后模块所示,线性特征转换 + Softmax。

异常分类

至于异常类型,论文中定义了 Local、Neighborhood 和 Adversary 来对系统组件进行标注并且以不同的异常类型条件来进行故障数据模拟!

异常类型

Experiments

在人工生成的数据集中验证了 Arvalus 和 D-Arvalus 方法的有效性,结果如下图所示:

实验结果

Thoughts

论文基于当前流行方法来解决异常发现问题,想法好但是感觉选择性忽略了几个问题:

  • 生产环境中组件的依赖关系复杂,大部分情况下难以得到不同组件间的依赖类型,但在论文中仅以引用其它论文来假设可以得到依赖关系。
  • 异常类型标注需要专家经验。
  • 实验中仅在人工数据集中模拟故障类型并来验证算法,很难有说服力!

Contact