一、基本信息
题目:Deeplog: Anomaly detection and diagnosis from system logs through deep learning
期刊/会议:ACM SIGSAC
发表时间:2017年
引用次数:38
二、论文总结
2.1 研究方向
使用LSTM对日志模板和日志变量进行异常检测,在日志模板序列的基础上建立工作流模型,帮助工作人员进行故障诊断
2.2 写作动机
日志异常检测的传统方法是基于PCA方法和invariant mining方法,这两种方法都是需要固定一个窗口,检测该窗口内部是否有异常,不能具体到某一条日志。因此作者利用LSTM进行单条日志级别的异常检测,分为日志模板异常检测和日志变量异常检测。日志模板还可以建立工作流模型,帮助进行故障诊断。
2.3 模型框架
对于日志模板异常检测,作者使用LSTM进行分类,类别的个数是模板的个数,交叉熵为损失函数,训练集全是正常数据。设定训练窗口h,最后一步的输出为下一个日志模板的概率分布。在进行异常检测时,如果概率最大的前g个预测结果中包含真实出现的日志模板,则认为该日志模板正常,然后继续检验日志变量是否异常。
对于日志变量异常检测,作者使用LSTM进行序列建模,均方误差为损失函数,训练集全是正常数据。每个日志模板都单独训练一个LSTM网络。每条日志中的变量是一个样本点,因为一条日志中变量有很多,所以这相当于多维时间序列。作者假设LSTM每一步输出的误差符合高斯分布,并对误差进行区间估计。在异常检测时,如果误差不在置信区间里面,则认为是异常。
对于未知类别,作者没有提出太好的办法,无非还是反馈、增量更新模型参数。
对于建立工作流模型,困难在于系统中存在并发现象,各个线程产生的日志会互相交错,不同任务会产生不同的日志。在进行工作流建模时,要对单个任务进行建模,因此需要对原始的日志文件根据任务进行分离,分离后利用传统方式建立工作流模型。进行日志分离时,作者提出两种方式,一种是利用前面模板异常检测的LSTM模型,一种是采用密度聚类的方式。
利用LSTM日志模板检测方法分离日志时,需要判断某条日志是并发线程写入的日志还是新任务开始的日志。
左图是并发线程,右图是新任务开始。并发线程常见的模式是18、56先后交替出现,都以同一个31收尾。新任务开始常见的模式是57以后没有交集。
密度聚类的方法是基于共现矩阵,思想是同一个任务中某些日志模板出现的次数多,不同任务的日志模板交集比较少。共现矩阵中的元素是第i个模板周围(间隔少于d-1条日志),第j个模板出现的概率。
算法通过遍历共现矩阵,比较矩阵中概率值大小,输出各个任务的日志集合。