Graph Neural Networks based Log Anomaly Detection and Explanation论文阅读笔记

1.介绍

现代高科技系统,如云服务器或高性能计算机,通常由大量的组件组成。随着时间的推移,这些系统变得越来越复杂,使得手动系统操作和维护变得困难甚至不可行[17]。因此,自动化系统操作和维护是非常可取的。为了实现这一点,系统日志被普遍用于记录系统状态和重要事件。通过分析这些日志,可以识别故障和潜在风险,并采取补救措施以防止严重的问题。然而,系统日志通常是半结构化的文本,通过日志异常检测识别异常通常具有挑战性。由于工业界和学术界都对从日志中识别异常产生了极大的兴趣,因此已经提出了大量的日志异常检测方法。现有的日志异常检测方法大致可以分为三类:基于定量的方法(OCSVM, PCA)、基于日志序列的方法(DeepLog,LogAbomaly)和基于图的方法(GLAD-PAW,GLAD)。

基于图的方法的优势:

  1. 这些方法能够识别日志事件之间结构至关重要的问题,例如性能下降;
  2. 它们能够提供与日志识别问题相对应的上下文日志消息;
  3. 它们可以以图的形式提供“正常”操作过程,帮助最终用户找到根本原因并采取补救措施。

存在的问题

  1. 基于图的方法(如GLAD)将日志事件转换为无向图,这可能无法捕获日志事件之间顺序的重要信息。
  2. 大多数现有的基于图的方法分别执行图表示和异常检测,导致检测精度次优。
  3. 大多数现有的日志异常检测方法只关注准确的检测,而不给出解释

提出的解决方法

为了解决这些问题,论文提出了Logs2Graphs,这是一种基于图的无监督日志异常检测方法。

Logs2Graphos首先利用现成的方法来学习每个日志事件的语义嵌入,然后将日志消息分配到不同的组。其次,Logs2Graphs将每组日志消息转换为属性图、有向图和加权图,每个节点表示一个日志事件,节点属性包含其语义嵌入,有向边表示其他事件如何跟随一个事件,相应的边权重表示事件彼此跟随的次数。第三,通过将图表示学习和异常检测目标相结合,这里引入了一类有向图启始卷积网络(One-Class Digraph Inception Convolutional Networks)作为一种从图集中检测异常图的新方法。因此,Logs2Graphs利用属性图、有向图和边缘加权图的丰富表达能力来表示日志,然后使用图神经网络有效地检测图级异常,同时考虑日志事件的语义信息和日志事件之间的结构信息(包括特殊情况下的序列信息)。

2.问题定义

Event:如果每个日志消息都有可用的日志标识符,则可以使用标识符进行分组,否则,使用固定窗口或滑动窗口对日志消息进行分组。对于由许多日志组组成的日志文件,可以获得事件计数矩阵。生成事件计数矩阵(或其他特征矩阵)的过程称为特征提取。提取的特征通常用作异常检测算法的输入,以识别日志异常,即偏离“正常”的日志消息或日志组。

图:\(G = (\nu,\varepsilon,X,Y)\), \(\nu = \{{v_1,\dots,v_{\nu}\}}\)表示节点集,\(\varepsilon = \{e_1,\dots,e_{|\varepsilon|}\}\)表示边集。如果\((v_i,v_j)\in \varepsilon\) ,则节点vi到节点vj存在一条边。\(X ∈ R ^{|\nu|×d}\),其中第i行表示节点vi的属性,d为属性个数。\(Y ∈ N ^{|\varepsilon |×|\varepsilon |}\),yij表示从节点vi到vj的边权。因此,G可以表示为\((A,X,Y)\)。其中\(A \in R ^{|\nu|\times |\nu|}\),因此\(A_{ij} = \Pi[(v_i,v_j) \in \varepsilon ], i,j \in \{1,\dots,|\nu|\}\)

2.1基于图的日志异常检测

\(L = (L_1,\dots,L_{L})\), 表示日志事件,将日志事件划分为M个日志组,\(Q = \{q_1,\dots,q_m,\dots,q_M\}\),\(q_m = \{q_{m1},\dots,q_{mn},\dots,q_{mN}\}\),qm为日志组,qmn为日志组中的第n个事件。 对于每一个日志组qm构造一个有属性的、有向的和边加权的图\(G_m = (\nu_m,\varepsilon_m,X_m,Y_m)\)\(e_{ij}\in \varepsilon_m\)表示日志事件i至少有一次紧接在qm中的日志事件j之后,\(x_i \in X_m\)表示日志时间i的语义嵌入,\(y_{ij} \in Y_m\)是边\(e_{ij}\)的权值。表示事件j紧随事件i之后的次数。

问题1(基于图的日志异常检测)

这里是给定一组表示日志的属性图、有向图和加权图,然后找出其中与大多数图明显不同的图。大多数方法旨在检测两种类型的异常:

  • 如果某个日志组(这里是一个图)的出现频率较高,则认为该日志组是一个定量异常。例如,如果一个文件被打开(事件a)两次,它通常也应该被关闭(事件B)两次。换句话说,在正常模式中#A = #B的事件发生次数,如果\({\#A} \ne {\#B}\)则检测到异常。
  • 如果某些事件的顺序违反正常顺序模式,则认为日志组包含顺序异常。例如,在正常的工作流程中,文件只能在打开后才能关闭。换句话说,事件发生的顺序A→B被认为是正常的,而B→A被认为是异常的。

基于图的异常检测的一个优点是既能检测到这两类异常,又能检测到图的结构所反映的异常

3.有向图Inception卷积网络

DiGCN将第k阶有向图卷积定义为

\[\begin{align}Z^{(k)} = \begin{cases}X\theta^{(0)} & k=0 \\\Psi X\theta^{(1)} & k=1 \\\Phi X\theta^{(k)} & k\ge 2, \tag{1}\end{cases}\end{align} \]

这里的\(\Psi=\frac{1}{2}\left(\Pi^{(1) \frac{1}{2}} \mathbf{P}^{(1)} \Pi^{(1) \frac{-1}{2}}+\Pi^{(1) \frac{-1}{2}} \mathbf{P}^{(1) T} \Pi^{(1) \frac{1}{2}}\right)\),\(\Phi=\mathbf{W}^{(k) \frac{-1}{2}} \mathbf{P}^{(k)} \mathbf{W}^{(k) \frac{-1}{2}}\),k是输出维度

\(\theta^{(0)}\theta^{(1)}\theta^{(k)}\)是可训练参数矩阵

\[\begin{align}P^{(k)} = \begin{cases}\text{I} & k=0 \\\tilde{\text{D} }^{-1} \tilde{\text{A} } & k=1 \\ Ins((\text{P}^{(1)})^{(k-1)}(\text{P}^{(1)T})^{(k-1)}) & k\ge 2,\tag{2}\end{cases}\end{align} \]

\(\text{I} \in R^{|\nu|\times|\nu|}\)是单位矩阵,\(\tilde{\text{A} } = \text{A} + \text{I}\)\(\tilde{\text{D} }\)是一个对角矩阵\(\tilde{\text{D} }_{ii} =  {\textstyle \sum_{j}^{}}  \tilde{\text{A}}_{ij}\)

\(Ins((\text{P}^{(1)})^{(k-1)}(\text{P}^{(1)T})^{(k-1)})=\frac{1}{2} Intersect((\text{P}^{(1)})^{(k-1)}(\text{P}^{(1)T})^{(k-1)},(\text{P}^{(1)T})^{(k-1)}(\text{P}^{(1)})^{(k-1)})\)

Intersect(*)表示两个矩阵的元素相交,\(W^{k}是\text{P}^{(k)}对角权重矩阵\)\(\Pi^{(1)}是\text{P}^{(1)}\)的近似对角化特征向量

\[\text{Z} = \sigma (\Gamma(\text{Z}^{(0)},\text{Z}^{(1)},\dots,\text{Z}^{(k)} ) ) ,\tag{3} \]

\(\sigma\)是激活函数,\(\Gamma\)表示融合操作,可以是求和、归一化和连接,\(\text{Z} \in R^{|\nu| \times  f}\)

4.针对日志事件的基于图的异常检测

论文提出的Logs2Graphs,主要流程有:日志解析、日志分组、图构建、图表示学习和异常检测。

1.png

4.1图构建

  1. 预处理:对于每个日志事件,首先删除非字符词和停止词,并将复合词拆分为单独的词;
  2. 单词嵌入:使用Glov,一个预训练的单词嵌入模型,具有200个嵌入维度,为日志事件中的每个单词生成向量表示;
  3. 语句嵌入:为每个日志事件生成一个向量表示。由于句子中的单词通常不具有同等的重要性,使用TF-IDF来衡量单词的重要性。单词嵌入向量的加权和构成日志事件的向量表示语句

通过用日志事件的向量表示作为属性来扩充节点,就获得了一个属性图、有向图和边加权图。

4.2OCDiGCN: One-Class Digraph Inception Convolutional Nets

\[\text{z} = \text{Readout}(Z_i|i\in \{1,2,\dots,|\nu |\})\tag{4} \]

通过使用Readout(·) 函数来聚合节点向量表示以获得图向量表示。Readout(·) 可以是一个简单的置换不变函数,例如最大值、总和或平均值,或更高级的图级池化函数

目标函数:

\[\min_{H}\frac{1}{M} \sum_{m=1}^{M}\left \| \text{DiGCN} (G_m; H) - o \right \|_2^2 + \frac{\lambda }{2}\sum_{l=1}^{L} \left \| \text{H}^{(l)} \right \|^2_F \tag{5} \]

\(\text{H}^{(l)}\)表示第 l 层 DiGCN 的可训练参数,即\((\Theta ^{(0)(l)}, \Theta ^{(1)(l)}, \dots, \Theta ^{(k)(l)})^T\),\(H\)表示\(\{\text{H}^{(1)}, \dots, \text{H}^{(1)}\}\)\(\lambda > 0 表示权重衰减参数\),\(\| \|^2表示欧几里得范数\)\(\| \|_F\)表示弗罗贝尼乌斯范数(Frobenius norm),o是超球面中心。

测试过程中:

\[source(G_m) = \| \text{DiGCN} (G_m; H) - o \|_2 \tag{6} \]

总之,OCDiGCN 由一个 L 层 DiGCN 架构组成,用于学习节点表示,以及一个 Readout(·) 函数来获得图表示。

异常解释

G_m中节点v_j的重要性得分为

\[\frac{|score(G_m) − score(G_m \setminus {Z_j })}{score(G_m)}\tag{7} \]

2.png

  • tips

    对于倒数第二层中的每个重要节点(具有高重要性分数),作者扩展了 LRP(分层相关传播)算法以获得输入层中一小组重要节点(这不是本论文的贡献,来自于论文Layerwise Relevance Visualization in Convolutional Text Graph Classifiers)。如果其中一些节点由边连接,则生成的子图可以提供更有意义的解释。由于 LRP 方法直接利用隐藏特征和模型权重生成解释,因此其解释结果被认为是可靠和值得信赖的

5 实验

3.png

使用节点标签的one-hot编码和语义向量对比

4.png

错误标签的影响

5.png

异常解释

6.png

参数敏感性分析

7.png

运行时间分析

8.png

6.存在的问题

  1. 数据集太少,没有在其他数据集上测试
  2. 对比模型太少,仅仅选择8个模型作为对比
  3. 训练数据中存在错误的标签
  4. 图构建。图构建过程中,特别是关于边建立和分配边权重,遵循基于连接连续日志事件的规则。但是,在某些情况下,该规则可能被认为过于简单化。

7.总结

本文提出了Logs2Graphs,这是一种用于无监督日志异常检测的新方法。它首先将日志文件转换为属性图、有向图和边缘加权图,将问题转化为图级异常检测的一个实例。接下来,OCDiGCN 解决了这个问题,这是一种基于图神经网络的新方法,以端到端的方式执行图表示学习和图级异常检测。

posted @ 2024-06-29 17:18  fun-debug  阅读(3)  评论(0编辑  收藏  举报