当前位置: 代码迷 >> 综合 >> LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs
  详细解决方案

LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs

热度:53   发布时间:2023-11-21 08:47:51.0

Thesis Reading:《LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs》

Proceedings of the T wenty-Eighth International Joint Conference on Artificial Intelligence (IJCAI-19)

文章来源

Weibin Meng1,5, Ying Liu1,5, Yichen Zhu2, Shenglin Zhang3?, Dan Pei1,5,
Yuqing Liu3, Yihao Chen1,5, Ruizhi Zhang4, Shimin Tao4, Pei Sun4and Rong Zhou4
1Tsinghua University 2University of Toronto 3Nankai University 4Huawei
5Beijing National Research Center for Information Science and Technology (BNRist)
mwb16@mails.tsinghua.edu.cn, liuying@cernet.edu.cn, k.zhu@mail.utoronto.ca
zhangsl@nankai.edu.cn, peidan@tsinghua.edu.cn,
lyq@mail.nankai.edu.cn,chenyiha17@mails.tsinghua.edu.cn,
{zhangruizhi, taoshimin, sunpei.sun, joe.zhourong}@huawei.com

摘要----通过日志记录运行状态在几乎所有的计算机系统中都很常见,检测日志中的异常对于及时识别系统故障至关重要。然而,手动检测日志的异常非常耗时、容易出错且不可行。现有的自动日志异常检测方法,使用索引而不是日志模板的语义,容易导致错误警报。在这项工作中,我们提出了LogAnomaly,一个将日志流建模为自然语言序列的框架。利用template2vec这一新颖、简单、有效的提取日志模板中隐藏的语义信息的方法,LogAnomaly可以同时检测出连续和定量的日志异常,这是以往任何研究都没有做到的。此外,日志异常可以避免周期性模型重测之间新出现的日志模板引起的误报。我们对两个公共生产日志数据集的评估表明,日志异常优于现有的基于日志的异常检测方法


一,引言

该部分主要介绍日志分析相关方面的知识和目前的研究成果,通过总结主要有以下几个方面的小总结。
1,传统的异常检测主要是通过关键字(如“失败”)匹配和正则表达式,基于显式关键字和结构特征检测单个异常日志,阻止了日志异常的检测。例如下图四条日志信息表示两个正常连接襟翼,如果采用关键字匹配来检测异常,L1和L2因为包含关键词“down”,因此你会触发假警报,然而,这实际上是一个正常事件,因为开关自动恢复很快,如L4所示。因此,本文提出的是一种基于日志序列的自动异常检测方法。
在这里插入图片描述


2,序列异常检测分类:序列(顺序)异常和定量(数量)异常
· 序列异常:当日志序列偏离程序流的正常模式时,就会发生异常。
·定量异常:程序的执行过程中有一些固定的线性关系,这些关系可以通过日志的定量关系得到,在不同的工作负载下应该始终保持不变,如果一组日志的这些关系被破坏,就会出现数量异常。
针对于这两种异常发生的原因,也有着相应的解决方案,对于序列异常,通过深度学习的方法(例如:DeepLog)对日志序列中的序列异常进行检测;而对于定量异常检测,则通过基于日志消息计数器的方法(例如:PCA,Invariant Mining LogClustering )来追踪定量异常。这些机制都是以日志模板索引为输入的。

3,异常日志序列检测问题面临的挑战:
·如果只使用日志模板索引,可能会丢失有用的信息,因为它们无法揭示日志的语义关系。例如,有些模板在语义上是相似的,但在模板索引上却不同,忽略这种相似性会导致错误报警。
·服务可以在两个相邻的定期再培训之间生成新的日志模板,而现有的方法无法解决这个问题。
·现有的方法不能同时检测序列异常和定量异常

4,LogAnomaly适用于非结构化日志流的异常检测,核心是对系统程序所“打印”出来半结构化文本数据,将自然语言处理的方法和直观性应用或改进日志异常信息。

综上所述,本文的贡献在于:
·设计template2Vec方法模板,不仅可以捕获单词上下文,还可以从日志模板中提取语义和语法信息,包括同义词和反义词。
·设计一种新的模板合并机制,在两个相邻的训练之间不需要操作员反馈
·我们提出了LogAnomaly,这是一个端到端的框架,使用LSTM网络同时自动检测序列和定量异常

二,背景

大型系统通常使用日志记录系统运行时状态,日志是使用“print”函数生成的,带有字符串模板(上图中的普通文本)和作为参数的详细信息(图1中带下划线的文本)。通常,在有效地将这些日志用于异常检测之前,必须对这些日志进行适当的分析【He等人,2016年】。分析日志的一种常见方法是从历史日志中挖掘和提取模板,然后将日志与模板匹配[Zhang等人,2017;Messaoudi等人,2018]。如图2所示,日志l3和l6相似,它们的模板都是T3,即“Interf
ace*,changed state to up”,它勾勒出了l3和l6所代表的事件。日志l3和L6的其余部分(即分别为“ae1”和“ae3”)是运行时参数。日志解析超出了本文的范围,因此在第3.4节中,我们简单地采用了FT-Tree,etal.,2017],这是目前最先进的日志解析方法之一,在模板提取方面实现了高精度,并且在新类型的日志出现时具有增量可追溯性。现有的日志异常检测方法分为两个维度:1)检测序列异常或定量异常;2)有监督或无监督。
在这里插入图片描述

三,方法

1,概要

经过对现实世界日志的广泛调查,我们得到了以下两个观察结果:(1)一个日志模板,由开发人员使用“print”功能预定义,典型地描述了系统中发生的事件,其文本表示事件的语义信息。(2)服务系统中的程序执行流通常有一些模式。因此,由这些程序生成的日志在类型、时间顺序、事件计数频率以及不同事件计数之间的定量关系上具有一定的模式。我们的核心思想是利用深度学习离线学习日志的序列和定量模式,每个模式都由其模板的语义表示(而不仅仅是模板的索引);在在线检测中,违反学习模式的实时日志被视为异常
在下图,我们将对LogAnomaly的框架进行分析
在这里插入图片描述

离线组件中

·日志解析在离线组件中,进行日志信息收集后,需要对日志进行进行解析,本论文首先利用FT-Tree从历史日志中提取模板,然后将历史日志于这些模板相匹配,每个模板都是半结构化文本中的一组单词。本论文并提出template2Vec,其有效的将模板中的单词转换成单词嵌入向量,并结合单词向量计算模板向量。这样单词向量就会转换成模板向量序列

·特征提取论文通过利用LSTM模型从该日志序列中提取序列特征和定量特征

在线组件中

我们首先为实时日志确定它是否可以与现有模板匹配。如果是,我们将其转换为模板向量。否则,我们将根据模板向量的相似性将“临时”模板向量“近似”到现有模板向量。因此,每个实时日志都匹配一个模板向量,并将实时日志转换为(模板)向量序列。基于离线学习组件中训练好的LSTM模型,LogAnomly将会判断日志序列是否异常

2,Template2Vec

本文提出的方法template2Vec方法是一种基于同义词和反义词的单词表示方法,能够有效地实现模板中单词的分布表示,在下图中我们可以可能到Template2Vec在离线学习阶段包含三个步骤:
在这里插入图片描述
(1)构造同义词和反义词集。由于该方法是收到Word2Vec的启发,所以通用的同义词和反义词可以WordNet中找到,对于一些特定的同义词和反义词必须由基于领域值得的运算符添加,操作员可以根据相关领域的知识更新同义词和反义词。
(2)生成单词向量。我们使用分布式词汇对比嵌入模型dLCE,在模板中生成分布表示单词的词向量
(3)计算模板向量。计算给定模板的模板向量,即模板中单词向量的加权平均值,用来表示模板的一个分布情况。

3,日志异常检测

如上所述,使用“print”功能生成日志的程序通常按照固定的流执行。因此,正常的日志自然有一些顺序模式。换句话说,对于给定的模板(向量)序列,如果没有异常发生,它的下一个模板是可预测的。设?={v1,v2,…,vn}是一组不同的模板向量。检测序列是w个最新模板向量的滑动窗口。对于一个对数序列S=(s1,s2,…,sm),假设Sj=(Sj,Sj+1,…,Sj+w?1)是其子序列之一。图5(a)显示了图2中所示模板的顺序模式。例如,[v1,v2,v3]的下一个向量很可能是v1。由于LSTM是一种流行的递归神经网络结构,已被证明能够对数据序列进行稳健预测,我们应用LSTM来学习日志曲线的序列模式。则Sjis的模板向量序列Vj=(v(sj),v(sj+1),…,v(sj+w?1)),其中v(si)是si的模板向量,v(si)∈?。因此,在训练阶段,将Vjis输入到Sjin的LSTM模型中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200910170719500.png#pic_center在这里插入图片描述
除了序列模式,模板(向量)序列也有定量模式。通常,一个正常的程序执行有一些不变量,在不同的输入和工作负载下,一些定量关系总是存在于日志中。例如,每个打开的文件最终都会在某个阶段关闭。因此,表示“打开文件”的日志数应与正常情况下显示“关闭文件”的日志数相等。这些日志中的定量关系可以捕捉到正常的程序执行行为,如果一个新的日志打破了某些不变量,我们就可以确定在系统执行过程中发生了异常。
接下来,我们学习日志的定量模式如下。对于日志消息si∈Sj,我们计算日志序列的计数向量(si?w+1,si?w+2,…,si),表示为Ci=(Ci(v1),Ci(v2),…,Ci(vn)),其中Ci(vk)是模板向量序列(v(si?w+1),v(si?w+2),…,v(si)),和vk∈v的数量。最后,Cj,Cj+1。。。,Cj+w?1输入LSTM,以了解Sj的定量模式。一般来说,在程序执行的固定流中有几个分支。例如,打开文件后,可以读取、写入或关闭该文件。因此,基于程序执行和日志的顺序和定量模式,在一个模板(向量)序列之后有几种可能出现下一个模板向量。对于一个对数序列,我们根据其概率对可能的下一个模板向量进行排序,这是根据LSTM模型学习的。如果观察到的下一个模板向量包含在top k候选中(或与它们足够相似),我们将其视为正常。

连续两次训练的模板逼近

在实时系统中,系统可以在线生成新的日志模板,但现有的方法无法处理新生成的模板索引。对于大量新日志模板的手动反馈(正如[Du等人,2017])在实践中是不可行的。虽然定期的再培训可以缓解这些问题,但是我们仍然需要处理两个连续离线培训之间出现的新日志模板。我们的方法如下。在在线检测阶段,对于无法匹配任何现有模板的日志,首先应用FT-Tree从新日志中提取一个“临时”模板,并计算其模板向量。然后,根据模板向量之间的相似性,将这个“临时”模板向量与现有模板向量进行匹配。直觉是,大多数“新”模板只是现有模板的微小变体,而不是全新的模板。注意,模板近似的目的是处理两个连续离线训练之间新出现的日志模板。这是一种比操作员劳动密集型人工反馈更好的方法(如[Du等人,2017])。因此,新型原木所带来的挑战在没有操作员干预的情况下得以解决。通过这种方式,不同模板向量的数量保持不变,即使会出现新的日志类型。

四,实验过程

·数据集选择 本论文所选用的数据库是BGL和HDFS数据集,我们利用前面的80%(根据日志的时间戳)作为训练数据,剩下的20%作为测试数据。此外,由于以上两个数据集都是手动标记的,因此我们将这些标签作为评估的事实标准。
(1)BGL:BGL数据集包含4747963个日志。每个BGL日志被手动标记为异常或正常,348460个日志被标记为异常。BGL数据集由Blue Gene/L超级计算机生成,由128K个处理器组成,部署在Lawrence Livermore National Laboratory国家实验室(LLNL)。
(2) HDFS:HDFS数据集包含从200多个amazonec2节点收集的11175629个日志。HDFS系统中的程序执行,例如写一个文件然后关闭它,通常需要一个日志块。在578个异常块中,专家将其标记为578块
在这里插入图片描述
·比较方法 对引言中提到的LogClustering,PCA,Invariant Mining,DeepLog,LogAnomaly和LogAnomaly不带有参数进行比较。

·评价指标 异常检测是一个二分类问题,我们通过精确度(Precision),召回率(Recall),F1值(F1 score)来评估算法的精确度。
对于二分类算法会出现预测和实际结果之间的各种情况
T(True)表示正确,F(False)表示错误,P(positive)代表1 ,N(Negative)表示0
在这里插入图片描述
TP:预测为1,实际为1,预测正确
NP:预测为1,实际为0,预测失败
FN:预测为0,实际为1,预测失败
TN:预测为0,实际为0,预测成功
Accuracy = (预测正确的样本数)/(总样数)Accuracy=(TP+TN)(TP+TN+FP+FN)Accuracy=\frac{(TP+TN)}{(TP+TN+FP+FN)}Accuracy=(TP+TN+FP+FN)(TP+TN)?
Precision = (预测为1且正确预测的样本数)/(所有预测为1的样本数) Precision=TP(TP+FP)Precision=\frac{TP}{(TP+FP)}Precision=(TP+FP)TP?
Recall = (预测为1且正确预测的样本数)/(所有真实情况为1的样本数) Recall=TP(TP+FN)Recall=\frac{ TP}{(TP+FN)}Recall=(TP+FN)TP?

F1score=2?Precision?RecallPrecision+RecallF1 score=\frac{2*Precision*Recall}{Precision+Recall}F1score=Precision+Recall2?Precision?Recall?
·实验结果
总体而言,LogAnomaly在五种方法中达到了最好的精确度,BGL数据集的F1平均得分为0.96,HDFS数据集的F1平均得分为0.95。然而,PCA和LogCluster在两个数据集上的F1得分都很低(≤0.80)。不变量挖掘和Deeplog在BGL数据集和HDFS数据集上都实现了高召回率。例如,不变量挖掘和Deeplog在BGL数据集上的召回率分别为0.99和0.96。然而,这些高召回是以低精度为代价的。例如,在BGL数据集上,不变量挖掘和Deeplog的精度分别比log异常降低了0.14和0.07,导致它们分别产生5.67和3.33倍的虚警。一般来说,大型服务系统每天都会产生上千万的日志。如果一种日志异常检测方法每天都会产生过多的误报,则会消耗操作人员大量不必要的工作。不变量挖掘和Deeplog都是利用日志模板的索引,忽略模板的语义信息来学习异常模式和正常模式。但是,具有不同索引的不同模板,例如图2中的T1和T2,可以共享共同的语义信息。忽略上述常见的语义信息会导致不变量挖掘和Deeplog产生比LogAnomaly更多的误报。相反,LogAnomaly利用template2Vec,基于同义词和反义词来学习日志模板的语义信息,有效地避免了这些误报。这是因为相对于不变量挖掘和Deeplog下降的模板索引的相似性比较,LogAnomaly所属的模板向量的相似性对日志模板之间的细微差异是容忍的。
在这里插入图片描述在这里插入图片描述
并且在上图中我们还验证将定量模式和序列模式结合起来的优势,分别计算没有模板向量序列的日志异常和不使用技术向量提取日志异常的定量模式的准确度。实验结果表明,用计数向量表示的定量模式提高了在两个数据集上日志异常检测的精确度和召回率。

五,结论

优点:本论文提出的Template2Vec,不仅仅只提取到日志中的上下单词的语法含义,还提取到模板中的语义信息,这对于解决模板中的同义词和反义词的提取有很大的作用,解决新类型日志在运行是所带来的;挑战;LogAnomly将序列异常中的序列异常和定量异常相结合起来,同时对着两个异常进行检测,并通过实验证明LogAnomly算法的优越性。
缺点:在Template2Vec进行同义词和反义词识别时,会出现一些专业领域的相关知识,这个需要操作者继续更新,而不是自己识别;
想要看原始论文可以点开看看

  相关解决方案