LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data

Robust Log-Based Anomaly Detection on Unstable Log Data

对不稳定的日志数据进行鲁棒的基于日志的异常检测

发表于:ESEC/FSE ’19
原文/下载链接: https://dl.acm.org/doi/pdf/10.1145/3338906.3338931
团队:南京大学,微软中国研究院


1 主要内容
日志被广泛用于大型复杂的软件密集型系统中的故障排除。基于日志的异常检测已经有了很多研究。现有的检测方法主要是利用从历史日志中提取的日志事件数据构建检测模型。但是现有的方法在实践中效果不佳。这些方法采用封闭世界假设,即假设日志数据随时间的变化是稳定的,并且已知不同的日志事件集。然而,我们的实证研究表明,在实际操作中,日志数据往往包含以前未见过的日志事件或日志序列。日志数据的不稳定性主要来自两个方面:一是日志语句的变化,二是日志数据的噪声。
本文提出了一种新的基于日志的异常检测方法——LogRubust。LogRubust 提取日志事件的语义信息,并表示成向量。然后,它利用一个基于注意力的Bi-LSTM模型来检测异常,该模型能够捕获日志序列中的上下文信息,并自动了解不同日志事件的重要性。通过这种方式,logRubust能够识别和处理不稳定的日志事件和序列。

关注问题
当前的日志检测算法:通常采用提取日志模板的方法进行日志的语义处理,对于没有出现过的日志事件缺乏鲁棒性。而现实世界中的日志数据是不稳定的(不断变化):
1.日志语句的演变(开发人员对日志模板的修改)
2.日志采集中的噪声
LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第1张图片
LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第2张图片
因此,现有的方法要么由于与这些新的日志事件不兼容而无法工作,要么由于不正确的分类而导致性能低下。
值得注意的是,一个大型的在线服务系统总是处于积极的开发和维护之中,日志数据变化频繁。因此,持续更新基于日志的异常检测工具是不现实的,因为它需要大量的工作。
与现有的方法不同,logrobust不依赖于日志事件的简单发生信息。相反,它将每个日志事件转换为固定维的语义向量。语义向量能够捕获嵌入到日志事件中的语义信息。通过语义理解,这种表示方法能够识别和处理由不断发展的日志语句和解析错误产生的新的但类似的日志事件。然后,以语义向量序列为输入,应用基于注意的双向长短时记忆神经网络(Bi- lstm)分类模型对异常进行检测。基于注意力的Bi-LSTM模型能够捕获日志序列中的上下文信息,并自动学习不同日志事件的重要性。

数据集
Hadoop采集日志+人工注入——HDFS合成日志数据
· 注入不同比例的变化日志数据
· 检测效果是鲁棒的,当人工日志文件注入率从5%增加到20%时,f1分数仅从0.96略微下降到0.89。
HDFS数据集上的合成日志,人工注入示例如下图所示
LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第3张图片
微软在线服务系统日志
· 存在真实不稳定问题的日志数据
· 比其他传统方法的检测效果好,f1得分0.84,比其他传统方法高出30%。

主要贡献
(1)指出了基于日志的异常检测中存在的日志不稳定性问题。我们还对真实系统中的日志不稳定性进行了实证研究,以证实我们的发现。
(2)提出了一种新的基于日志的异常检测方法,该方法对不稳定的日志数据具有较强的鲁棒性。据我们所知,我们是第一个解决异常检测中日志数据不稳定问题的团队。
(3)我们使用公共和真实世界的工业数据集对logRobust算法进行了评估。结果证实了该方法的有效性。


2 研究背景和不稳定日志数据证实
在本节中,我们描述了一个在真实工业场景中的实证研究,该研究演示了日志不稳定性问题,并揭示了它所导致的后续后果。
传统方法,流程如下图:
LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第4张图片
传统方法都将日志序列转换成日志计数向量,然后在其上建立无监督或有监督的机器学习模型来检测异常。这里,日志计数向量保存日志序列中每个日志事件的发生。日志计数向量的维数等于不同的已知日志事件的数目。由于日志不稳定的问题,这种方法的局限性很明显。首先,它与不稳定的日志事件不兼容。即使只发生了一个不稳定的日志事件(例如,由进化的日志语句或解析错误引起),也必须更改日志计数向量的维数,并相应地对模型进行重新训练。其次,日志计数向量只计算日志事件的数量,因此忽略了嵌入日志序列中的上下文信息,无法识别各种日志事件的不同重要性。第三,为了更新基于日志的异常检测工具,需要持续的模型再培训,对于一个正在积极开发和维护的大型软件系统来说,这样的成本是无法接受的。因此,在线更新现有的异常检测工具也是不现实的。现有的方法要么无法工作,要么导致检测精度低。


3 LogRobust:一种基于日志的异常检测算法
LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第5张图片
总体分为三个部分:
Log parsing (Drain)+Semantic Vectorization+Bi-LSTM neural network

  1. 日志解析 Log parsing (Drain)
    Drain: An online log parsing approach with fixed depth tree. (ICWS‘ 17)
  2. 语义向量化 Semantic Vectorization
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第6张图片
    分为三个部分:日志事件的预处理,word向量化,以及基于TF-IDF的聚合
  • 日志事件预处理:首先把日志事件处理成由一个个token组成的序列,token通常是英文单词(与此同时,一些无意义的符号 还有一些数字会首先被删除,一些组合词语会被拆解成不同的token,一些例如 a the 这样的词汇也会被删除)
  • word向量化:图片上的这部分可以看到有一个矩阵
    矩阵是通过FastText计算出来的一个N*d维(d=300)的矩阵,每一行都是用来表示这个单词的。作者通过这个矩阵,希望能保留句子的特性,从而在后续处理中将相同主干的句子能够分类到一起。
  • 基于TF-IDF的聚合:在图片中表示的是一个 1*N 的向量,表示的是每个单词的权重——重要性
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第7张图片
    TF在当前事件中的出现频率,比如Receiving在这个事件序列中出现的整体次数,越多证明越重要;第二个值IDF是这个单词在多个事件中出现的频率,如果大部分序列中都有他的出现,那么 这个单词对于这个日志序列就没有代表性,毫无意义,他的对应权重应该降低。
  • 最终实现日志文件转化为日志向量
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第8张图片
  1. 基于注意力机制的双向LSTM网络
    引用Bi-LSTM网络(Bidirectional LSTM-CRF models for sequence tagging [J] (Computer ence, 2015)),结合了注意力机制。
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第9张图片
    Bi-LSTM把隐藏层分为两个部分,前向和后向,训练后将他们组合输出。在最后的输出前添加一个全连接层,并引入注意力机制来为日志事件分配不同的权重。α就是计算出来的日志权重。
    α越大,模型关注此日志事件。α的计算是公式如下图所示,其中Wt的表示注意力机制层在时间t的权重。
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第10张图片
    最后,把所有的隐状态对应的α求和,然后构造一个softmax层来输出分类结果。
    计算交叉熵作为损失函数,用随机梯度下降训练参数。

4 实验评估

  • 方案在不稳定日志数据集上表现如何?
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第11张图片
  • 方案中添加注意力机制的有效性比较?
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第12张图片
  • 方案在在稳定的数据集上表现如何?
    LogRobust Robust Log-Based Anomaly Detection on Unstable Log Data_第13张图片

总结

  1. HDFS的数据有一定的特性,对于每一次输入的日志块来讲,都是相关联的同一个blk号对应的日志,所以检测效果会很好。但实际上集群系统的日志可能并不能够通过简单的划分得到有意义的日志块来训练。
  2. 这篇论文的创新主要就是方法上结合了 Drain+FastText+tf-idf+Attention-based Bi-LSTM 同时方法能够在多种数据集上有很好的效果;以及针对日志文件的不稳定性进行讨论。
  3. git项目地址:只有一个结构文件,没有给出具体的数据处理。https://github.com/Mason0629/RobustLog

你可能感兴趣的:(Log日志,论文小结)