【异常检测第一篇】DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning

前言

异常检测也属于时间序列问题的一个大分支,记下来一段时间我也会定期分享一些这方面的内容,结合很多ML,DL知识的异常检测和诊断问题,我们一起努力!

笔记很长,请细心阅读~

一、 Address

paper来自于University of Utah

DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning

地址:https://netman.aiops.org/~peidan/ANM2018/9.LogAnomalyDetection/ReadingList/deeplog.pdf 12

二、Paper summary

Log的主要作用是记录系统的状态和重要的事件,各种系统日志自然是在线监视和异常检测的极佳信息源。

DeepLog模型主要是把log信息当作NLP的自然语言序列来处理的(一个project产生的系统log遵循着一个严格的逻辑和控制流,所以更像是一种语言结构)。Deeplog本质是个深度学习模型,可以自动提炼正常运行的log模式信息,当log模式信息偏离训练的模型的时候,可以检测出异常。并且这篇paper中的模型可以通过不断地线上迭代去适应新的log。

DeepLog从底层系统日志中构造workflows,这样一旦检测到异常,用户就可以诊断检测到的异常并有效地执行根本原因分析。

这也就是异常检测和诊断两个部分。

三、Introduction

3.1 主要的方法(利用log数据进行异常检测)(Existing work )

  1. 基于log信息计数的PCA聚类

  2. 通过获取不同的log keys之间的共同的模式信息

  3. 基于workflow的方法识别程序逻辑流的执行异常

3.2 存在问题(problems and challenges)

  1. 系统或者应用越来越复杂的时候,就可能遭受更多的bug和漏洞,这些会被别人盯上,来袭击你。

  2. 基于标准的数据挖掘方法不再那么高效(在线的情况下,不能防御不同的攻击)

  3. 非结构数据

  4. 大量数据的online anamaly detection(有很多用规则)  (很多offline是针对预测已知的特殊的异常,而目标是是去检测出未知类型的log, 所以二分类是不行的)

  5. 有很多特征是无用的比如IP address,并且也很难知道哪些features是对于异常检测是有用的,并且不同的log类型的uuseful features都不一样

  6. log信息是并发的,由多线程或者并发产生的,所以导致没法用一个workflow去解决问题

  7. 信息有key 矩阵信息 时间,大多数模型只用到了其中一个(大多数只用key的信息)

四、Approach

4.1 Log parser

首先提出把半结构化编码成结构化,key(k),看下面这个example就懂了

这时候咱们把key信息提取出来了。

再来就是* 号的parameters,这些参数会是一种序列标识, 比如可以把相同的log聚在一起,也可以把并发的或者多线程的seqence分开(HDFS中的block id)

这个模型主要用到的三个信息,key,parameters以及上一个log到此时log的时间差。

key-> log Key parameter and 时间差 -> parameter value vector

4.2 DeepLog

三个部分

  1. log key异常检测模型

  2. parameter value异常检测模型

  3. workflow诊断部分

4.2.1 log key异常检测模型

这里把每个不同的提取的log key附上对应的类别,比如最终提取到四个不同的log key,则四个的类别分别为0 1 2 3

这里把问题转换为单变量时间序列分类问题,来预测下一个出现的log key的类型, 如果不一样则判断为异常

这里的模型的细节是stacking的LSTM的结构

4.2.2 parameter value异常检测模型

是转换为多变量的时间序列预测问题(因为除了对应的parameter values + performance value)

这里的performance value就是这个log的相对运行时间(这一条和上一条的时间间隔)

这里的异常检测,就是训练线下数据的时候,预测值与真实值的errors符合正态分布

如果真实的值在预测值的置信区间之外则说明异常

4.2.3 在线更新anomaly detection models

有一个例子看懂就ok了

简单来说就是先用正常的训练出一个模型,之后再来新的数据进行多分类,如果结果不对,则把这个真实的数据当作新的数据集扔到模型里面微调下,如果是log key则是多分类的loss,即目标减小这个判断错误的分类数据与预测之间的交叉熵,如果是parameter value vector的话则是减小之间的mse。

4.2.4 work flow construction

分为三种情况。

①task并行的时候

②有了new task

③循环

这是利用前面所说的单变量分类的方式来重建workflow(log key sequence的预测)

还有利用Co-occurrence matrix的方式来重建workflow,详情见paper把~,这篇paper信息量比较多把很多各种对比baseline方法也都叙述了一遍,这里可能简单说下,不赘述了~

4.2.5 Anomaly diagnosis using workflow

首先确定出现了异常,之后进行diagnosis,对workflow进行重建,之后分析出现的异常在哪个workflow上,对对应的log sequence进行分析。

4.3 对比方法(其他baseline)

  • N-gram(baseline) 说简单点就是,第i个词最大似然估计依赖于前N个,之后去计算第i个词的出现的概率。这里有个很关键的前提条件,就是都来自于一个固定的语料库,在log key中的意思就是说前提假设这些key都是存在于我们的vocabulary K中的。

  • PCA

  1. SESSION ID去进行分组

  2. 查在每个session里log key值出现的次数

  3. 形成一个session vector,表示在一个session里,每个在K里的log key出现的次数。每列是一个log key,每行是一个vector

  • Invariant Mining

  • TFIDF

  • CloudSeer

五、 Log data sets and set up

5.1 HDFS

5.2 OpenStack log

这个主要是反应一些VM的life过程,比如创建VM,删除,暂停,清理没所以就会有很多pair 类似于 “Stop-Start”, “Pause-Unpause” and “Suspend-Resume”

5.3 Set up

  1. 根据

去group数据 2. parse到log key 3. deeplog可以直接训练了 4. 其他模型还有很多操作,比如建立matrix(每一列是一个log key 每一行是一个session vector)

deeplog用很少一部分normal数据进行训练。

PCA和IM都是线下的方法,不需要训练和测试数据 DeepLog只需要少部分正常的,TFIDF需要正常和不正常的

六、 Experiment

6.1 衡量指标

  1. false positive

  2. false negative

  3. precision

  4. recall

  5. F1-score

6.2 log key实验

从看FP和FN到Pre、recall、F1

以下是OpenStack log数据集

可以看到左图中IM的precision很小,主要原因如下:

主要是因为产生的log不规律,所以重新制作了一个规律的数据集,OpenStack II, PCA的reall下去了,因为PCA主要是检测数据间的方差的,如果是分厂规律的模式数据就很难很好的work。

PCA和IM主要是offline方法,并且主要在session这个程度上起作用,然而很多系统log却没有这个层次。

deeplog对于任何一个参数都是非常stable

两个是对称的,好比每次你召回了g个,看这g个里面有多少个正常的,随着g的变化,recall和precision是对称变化的。

6.3 parameter value vector 实验

6.3.1 数据集

6.3.2 set up

写了个程序去模拟多个人不断地去要求VM创建和删除, 创建的时候有一个很重要的过程就是把copy controller node to a computer node(转移镜像),模拟有一个Dos的袭击导致出现异常,我们去减慢这个copy的速度

6.3.3 实验结果(Anomaly detection.)

有一个训练集和验证集,训练集用mse去训练,之后验证集得到的mse的高斯分布,在线incoming一个parameter value vector的话,deeplog就看这个的预测和真实的输出的mse是否在验证集的这个高斯分布之内。

列举了四个Log key。x轴为VM 被创建的id,其实就是程序的进程,y=mse。ab都为nomal, cd都分别有两次异常的情况。

6.4. Online update and training of DeepLog 检测实验

6.4.1 数据集

6.4.2 结果

1%的normal log entries 和 10%的log entries

更多精彩内容(请点击图片进行阅读)

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

个人微信

备注:昵称+学校/公司+方向

如果没有备注不拉群!

拉你进AI蜗牛车交流群

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页