1、 基于注意力机制的半监督日志异常检测方法*尹春勇,冯梦雪(南京信息工程大学计算机学院、网络空间安全学院,江苏 南京 2 1 0 0 4 4)摘 要:日志记载着系统运行时的重要信息,通过日志异常检测可以快速准确地找出系统故障的原因。然而,日志序列存在数据不稳定和数据之间相互依赖等问题。为此,提出了一种新的半监督日志序列异常检测方法。该方法利用双向编码语义解析B E R T模型和多层卷积网络分别提取日志信息,得到日志序列之间的上下文相关信息和日志序列的局部相关性,然后使用基于注意力机制的B i-G RU网络进行日志序列异常检测。在3个数据集上验证了所提方法的性能。与6个基准方法相比,所提方法拥有最
2、优的F1值,同时获得了最高的A U C值0.9 8 1 3。实验结果表明,所提方法可以有效处理日志序列的数据不稳定性和数据之间相互依赖的问题。关键词:日志异常检测;双向门控递归单元;多层卷积;双向编码语义解析;注意力机制中图分类号:T P 3 9 1.4 1文献标志码:Ad o i:1 0.3 9 6 9/j.i s s n.1 0 0 7-1 3 0 X.2 0 2 3.0 8.0 0 9A s e m i-s u p e r v i s e d l o g a n o m a l y d e t e c t i o n m e t h o d b a s e d o n a t t e n
3、 t i o n m e c h a n i s mY I N C h u n-y o n g,F E NG M e n g-x u e(S c h o o l o f C o m p u t e r S c i e n c e,N a n j i n g U n i v e r s i t y o f I n f o r m a t i o n S c i e n c e a n d T e c h n o l o g y,N a n j i n g 2 1 0 0 4 4,C h i n a)A b s t r a c t:L o g s r e c o r d i m p o r t a
4、 n t i n f o r m a t i o n a b o u t s y s t e m o p e r a t i o n,a n d l o g a n o m a l y d e t e c t i o n c a n q u i c k l y a n d a c c u r a t e l y i d e n t i f y t h e c a u s e o f s y s t e m f a i l u r e s.H o w e v e r,l o g s e q u e n c e s h a v e p r o b l e m s s u c h a s d a t
5、 a i n s t a b i l i t y a n d i n t e r d e p e n d e n c e b e t w e e n d a t a.T h e r e f o r e,a n e w s e m i-s u p e r v i s e d l o g s e q u e n c e a n o m a l y d e t e c t i o n m e t h o d i s p r o p o s e d.T h i s m e t h o d u s e s t h e B i d i r e c t i o n a l E n c o d e r R e
6、 p r e s e n t a t i o n s f r o m T r a n s f o r m e r s(B E R T)m o d e l a n d m u l t i-l a y e r c o n v o l u t i o n a l n e t w o r k t o e x t r a c t l o g i n f o r m a t i o n,o b t a i n t h e c o n t e x t u a l r e l e v a n c e b e t w e e n l o g s e q u e n c e s a n d t h e l o c
7、 a l r e l e v a n c e o f l o g s e q u e n c e s.F i n a l l y,t h e a t t e n t i o n-b a s e d B i-G RU n e t w o r k i s u s e d f o r l o g s e q u e n c e a n o m a l y d e t e c t i o n.T h e p e r f o r m a n c e o f t h i s m o d e l w a s v e r i f i e d o n t h r e e d a t a s e t s.C o
8、m p a r e d w i t h s i x b e n c h m a r k m o d e l s,t h i s m o d e l h a s t h e b e s t F1 v a l u e a n d t h e h i g h e s t A U C v a l u e(0.9 8 1 3),a n d t h e e x p e r i m e n t a l r e s u l t s s h o w t h a t i t c a n e f f e c-t i v e l y h a n d l e t h e p r o b l e m s o f d a
9、t a i n s t a b i l i t y a n d i n t e r d e p e n d e n c e b e t w e e n d a t a i n l o g s e q u e n c e s.K e y w o r d s:l o g a n o m a l y d e t e c t i o n;b i d i r e c t i o n a l g a t e r e c u r r e n t u n i t;m u l t i l a y e r c o n v o l u t i o n;b i d i r e c-t i o n a l e n c
10、o d e r r e p r e s e n t a t i o n f r o m t r a n s f o r m e r s;a t t e n t i o n m e c h a n i s m1 引言随着互联网络的发展,软件系统变得非常庞大和复杂,这也导致软件系统产生的日志数量日益增多。在程序运行过程中产生的大量日志信息,记录了程序的运行时间、当前状态等。日志记载软件系统运行状态,是维护软件系统的重要数据1。开发人员通过分析和检测这些日志信息,来诊断系统异常的根本原因。然而,随着大型软件系统的发展,*收稿日期:2 0 2 3-0 1-3 0;修回日期:2 0 2 3-0 3-2
11、3通信地址:2 1 0 0 4 4 江苏省南京市南京信息工程大学计算机学院、网络空间安全学院A d d r e s s:S c h o o l o f C o m p u t e r S c i e n c e,N a n j i n g U n i v e r s i t y o f I n f o r m a t i o n S c i e n c e a n d T e c h n o l o g y,N a n j i n g 2 1 0 0 4 4,J i a n g s u,P.R.C h i n a C N 4 3-1 2 5 8/T PI S S N 1 0 0 7-1 3 0
12、 X 计算机工程与科学C o m p u t e r E n g i n e e r i n g&S c i e n c e第4 5卷第8期2 0 2 3年8月 V o l.4 5,N o.8,A u g.2 0 2 3 文章编号:1 0 0 7-1 3 0 X(2 0 2 3)0 8-1 4 0 5-1 1日志数据出现爆炸式的增长,导致对日志的处理变得非常困难。例如,现在的通讯软件每小时可以产生超过5 0 G B的日志数据2,使用人工的方式来对几十G B的日志文本进行分析和异常检测需要耗费大量的人力与时间,显然是不现实的。因此,需要能对日志进行异常检测的模型。在软件系统的维护中,日志分析任务
13、包括安全任务(如入侵检测、内部威胁检测和恶意软件检测)和更一般的维护任务(如检测硬件故障、建模数据或流量模式)。由于日志数据源每天的更新量庞大,想要实现人工日志解析几乎是不可能的。因此,研究人员针对异常检测进行了大量深入的研究3,4。日志异常检测是日志分析中最重要的研究内容之一。日志序列是由按系统执行顺序排列的日志组成的序列,执行顺序异常或不完整的执行模式都会导致日志序列的异常。因此,异常检测可以从日志序列的角度开展研究。多年来研究人员已经提出了许多基于日志序列的异常检测方法5,6。普遍的基于日志序列的异常检测方法都有相同的步骤:(1)通过正则表达式或者其他规则对非结构化数据进行结构化,然后进
14、行日志解析以提取出日志时间或日志序列。(2)通过基于日志序列的机器学习或深度学习技术构建异常检测模型。从建模角度来看,日志序列异常检测主要分为有监督和无监督2种。有监督方法是将日志序列异常检测视为正常和 异常实例之 间的二 元 分 类 问 题(如L o g-R o b u s t7、H i t A n o m a l y8)。但是,基于监督的方法需要手工标注大量的日志序列数据,这需要消耗大量的人力资源。因此,研究人员对基于无监督方法的研究颇多。无监督方法可分为基于模板计数向量方法(如P A C(P r i n c i p a l C o m p o n e n t A-n a l y s i
15、s)9、I M(I n v a r i a n t M i n i n g)1 0和L S TM-A E(L o n g S h o r t-T e r m M e m o r y A u t o E n c o d e r)1 1)、聚类 方 法(如L o g C l u s t e r1)和 半 监 督 方 法(如L o g A n o m a l y1 2)。此外,随着深度学习技术的普及,基于深度学习的方法也逐渐运用于异常检测中(如D e e p L o g1 3、S w i s s L o g1 4、L o g B e r t1 5和P L E-L o g1 6)。虽然这些方法已经广泛
16、地应用在研究中,但仍存在一些问题。比如,在实践中操作人员会频繁修改源代码中的日志语句,日志语句中有2 0%4 5%会在整个生命周期中发生变化1 7。日志数据不稳定且在传入过程中可能丢失,会导致训练数据中没有包含所有的日志数据1 8。日志数据分组方法对模型的性能也有很大的影响。此外,当处理较短的日志序列时,模型准确性往往会较低1 9。基于对以上问题的思考,本文提出了一种新的基于半监督的异常检测方法,通过使用基于固定深度树的在线日志解析D r a i n2 0模型进行日志解析;之后利用训练好的双向编码语义解析B E R T(B i d i-r e c t i o n a l E n c o d e
17、 r R e p r e s e n t a t i o n f r o m T r a n s-f o r m e r s)2 1模型进行特征提取,得到日志序列之间的上下文相关信息;再使用卷积网络提取日志局部信息;最后,使用基于注意力机制的双向门控递归单元B i-G RU(B i-d i r e c t i o n a l G a t e R e c u r r e n t U-n i t)网络进行异常检测。B i-G RU可以很好地结合日志序列的上下文信息,进一步解决日志数据依赖问题。本文的主要工作如下:(1)以双向编码语义解析(B E R T)模型为基础,提出了一种基于注意力机制的双向门
18、控递归单元(B i-G RU)网络的日志序列异常检测方法。在日志异常检测过程中,充分结合日志语句的上下文信息,并使用注意力机制将权重分配给更重要的事情,从而实现更准确快速的检测。(2)考虑到日志语句之间存在局部相关性,使用卷积网络来提取日志语句的局部信息,结合上下文信息和局部信息来检测异常。在3个数据集上的实验结果表明,该方法拥有较高的F1分数,并且平均A U C值最高。2 相关工作本节简单回顾日志解析和异常检测相关的背景知识。日志解析是异常检测中的关键步骤,通过日志解析技术提取日志模板,其准确性对日志模板预测有很大的影响。日志分析是对系统或应用产生的日志进行收集、整理、处理和分析。日志解析是
19、对日志信息进行解析和提取。日志解析是日志分析中的一个重要组成部分,也是异常检测中的一个重要组成部分。日志解析方法主要有以下4种:(1)基于启发式的方法。H e等人2 0提出了D r a i n,通过树中的叶节点维护日志组,树的内部节点嵌入了不同的启发式规则。D r a i n的扩展版本基于一个允许日志组在线合并的有向无环图,此外它还为日志解析提供了一个参数自动调优机制。(2)基于群集的方法。如M a s a y o s h i等人2 2提出的S H I S O(S c a l a b l e H a n d l e r f o r I n c r e m e n t a l S y s t e
20、 m l O g)和S h i m a等 人2 3提 出 的L e n M a6041C o m p u t e r E n g i n e e r i n g&S c i e n c e 计算机工程与科学 2 0 2 3,4 5(8)(L e n g t h M a t t e r s)。S H I S O是一种在线日志解析方法,它使用树形结构来指导解析过程。在解析过程中,S H I S O遍历树,通过比较日志消息和相应日志组中的事件模板,找到最合适的日志组。S H I-S O对路径爆炸非常敏感,因此其效率往往不令人满意。L e n M a与S H I S O相似,它将每个日志消息编码为一个
21、长度向量,其中每个维度记录一个标记的字符数。在解析过程中L e n M a通过比较日志消息的长度向量实现解析。(3)基于频繁模式挖掘的方法。D a i等人2 4提出的L o g r a m与现有的计算频繁令牌的方法不同,L o g r a m考虑了频繁n-g r a m,其核心观点是频繁的n-g r a m更可能是常数。L o g r a m根据开发人员现有的日志消息来构建字典。(4)基于最长公共子序列的方法。D u等人2 5提出的S p e l l,是一种基于最长公共子序列的在线实时动态日志解析方法。S p e l l实现了日志输入的动态接受、输入的实时处理以及新日志模板的连续生成。此外,S
22、 p e l l解析方法还可以并行实现。B L o g A D(B i-d i r e c t i o n a l g a t e r e c u r r e n t u n i t L o g A n o m a l y D e t e c t i o n)采用D r a i n的扩展版进行日志解析,因为现有研究已经证明它非常有效2 6。异常检测方法可以分监督学习和无监督学习。无监督学习有主成分分析P C A9和不变量挖掘I M1 0等。P C A生成日志模板计数向量的2个子空间(正常空间和异常空间),通过计算模板计数向量到异常空间的投影长度来确定日志序列是否异常。I M从消息计数向量中挖掘
23、稀疏整数值的不变量,能够检测到分布式系统的完整异常消息。这些方法虽然在一定程度上反映了日志序列的模式特征,但是它们忽略了日志序列之间的顺序关系,可能将异 常数据判断 为正常,导致 假阴率相 对较高2 7。有监督学习的方法有:L i a n g等人2 8训练支持向量机S VM(S u p p o r t V e c t o r M a c h i n e)分类器来检测日志事件故障;B e r t e r o等人2 9将日志文件的词映射到高维度空间,然后使用标准分类器检查日志事件是否异常;Z h a n g等人3 0提出P r e F i x(P r e-d i c t a n d F i x),
24、将随机森林算法应用于模板序列,从而可以干预并“修复”潜在故障。虽然有监督学习的方法可以在异常检测中获得高性能,但是其需要带有标签的日志数据进行训练,构建训练数据非常耗时,在实际条件下不实用。近些年来基于深度学习的方法被广泛应用于日志异常检测中,特别是基于模板预测的异常检测。D e e p L o g1 3提 出 利 用 长 短 期 记 忆L S TM(L o n g S h o r t-T e r m M e m o r y)深度学习网络,构建了基于堆叠L S TM模型的异常检测框架。D e e p-L o g利用S p e l l解析器进行日志模板提取,之后利用L S TM模型学习正常日序列
25、中的特征,并通过预测给定事件的下一个日志事件来确定是否异常。D e e p L o g在构建模型框架时不需要通过异常日志来进行训练,从而减少了模型构建的工作量,但是在面对大量日志事件的更复杂数据集时却表现不佳1 9。M e n g等人1 2提出的L o g A n o m a l y是一种基于日志模板语义特征的框架,使用日志计数向量作为输入来训练L S TM模型;还提出了一种新的语义模板t e m p l a t e 2 V e c,允许L o g A n o m a l y通过匹配新的日志模板与训练日志中的现有模板来提高准确性。但是,由于L o g A n o m a l y使用日志事件的索
26、引来训练模型,并且无法学习日志的模板语义,会受到日志解析错误的影响,同时在大量日志事件的数据集上也表现较差。Z h a n g等人7提出的L o g R o b u s t,可以处理日志事件和日志序列中的不稳定性。L o g R o b u s t使用基于注意力的双向长短期记忆网络B i-L S TM(B i-d i r e c t i o n a l L o n g S h o r t-T e r m M e m o r y)来捕获上下文信息,通过自动分析事件的重要性为不同事件分配权重,降低因日志解析错误造成的影响,提高异常检测的准确性。L o g R o b u s t可以解决日志数据的不
27、稳定性问题,但是当数据量很大时训练速度较慢。现有 的 大 部 分 方 法 都 是 使 用L S TM或 者L S TM的变体来实现日志异常检测。L S TM模型可以捕获日志序列的上下文信息,并自动学习不同日志事件的重要性。G RU网络的训练效果在一定情况下可以达到与L S TM相同的效果,同时G RU网络的参数量少于L S TM的。基于对异常检测问题的研究,本文提出了一种新的基于注意力机制的双向门控递归单元网络的日志序列异常检测模型B L o g A D。B L o g A D进一步解决了日志序列异常检测的数据不稳定以及长期依赖问题。首先,使用D r a i n进行日志解析,并利用B E R
28、T对得到的日志模板进行特征提取,以解决日志序列的数据依赖问题;然后,使用多层卷积网络来提取局部信息;最后,利用基于注意力的B i-G RU网络进行日志异常检测。3 模型介绍本文提出了一种基于注意力机制的B i-G RU7041尹春勇等:基于注意力机制的半监督日志异常检测方法网络的日志序列异常检测模型B L o g A D,如图1所示。本节从该模型的日志解析、特征提取和异常检测这3部分展开介绍。F i g u r e 1 B L o g A D m o d e l图1 B L o g A D模型3.1 日志解析随着大数据时代日志数量的快速增长,效率成为日志解析的一个主要关注点。日志解析的目标是将
29、原始日志消息中的静态模板、动态变量和头信息(包括时间戳、日志级别和记录器名称)提取出来并以结构化格式表示。B L o g A D使用先进的日志解析方法D r a i n 3进行模板提取。D r a i n是一种基于固定深度树的在线日志解析方法,通过D r a i n解析得到的日志模板,如图2所示。原始的日志语句为“-1 1 1 7 8 3 8 5 7 0 2 0 0 5.0 6.0 3 R 0 2-M 1-N 0-C:J 1 2-U 1 1 2 0 0 5-0 6-0 3-1 5.4 2.5 0.3 6 3 7 7 9 R 0 2-M 1-N 0-C:J 1 2-U 1 1 R A S K E
30、 R N E L I N F O i n s t r u c t i o n c a c h e p a r i t y e r r o r c o r r e c t e d”。首先,通过简单的正则表达式得到结构化 的 日 志 序 列,每 一 条 序 列 都 包 含“L a b e l”“T i m e s t a m p”“E v e n t I d”和“E v e n t T e m p l a t e”等信息,之后通过D r a i n解析器提取到日志模板。F i g u r e 2 L o g p a r s i n g图2 日志解析3.2 特征提取得到日志序列模板之后,对日志序列模
31、板进行特 征 提 取,得 到 句 向 量 来 进 行 后 续 操 作。w o r d 2 v e c3 1是现在常用的将单词嵌入向量的方法,然而w o r d 2 v e c不能解决同义词问题。如图3所示的2个例子中,情况1和情况2都包含块。情况1中的块是一个动词,意思是阻止某事发生、发展或取得进展。而情况2中的块是表示要处理的数 据 块 的 名 词。w o r d 2 v e c只 会 将 句 子 中 的“b l o c k”块嵌入相同的单词中,这可能会造成语义混淆。为了克服多义词和日志数据中事件变化的挑战,更好地捕捉单词的词性差异和联系语句上下文信息,B L o g A D使用了一种更高级
32、的词嵌入方法B E R T。F i g u r e 3 T w o l o g e x t r a c t i o n c a s e s图3 2个日志提取案例在自然语言处理领域中,预训练的语言表示研究已经取得了相当大的进展,尤其是谷歌开发的B E R T。B E R T模型已经在维基百科语料库和图书语料库上进行了训练,被设计为通过在所有层的上下文上联合条件化,从未标记的文本中预训练深度双向表示。与其他嵌入方法相比,B E R T预训练语言模型提供了足够的单词库,可以更精确地编码单词。此外,B E R T2 1有2个版本:1 2层的T r a n s-f o r m e r和2 4层的T r
33、a n s f o r m e r。为了平衡时间消耗和 性 能,B L o g A D采 用 了 官 方 发 布 的1 2层T r a n s f o r m e r。B E R T模型的主要结构就是T r a n s f o r m e r的堆叠。所以,当使用B E R T的时候,只需要对输入的句子进行拆分得到每个单词的t o k e n,再将t o k e n输入到B E R T模型中每一层的T r a n s f o r m e r层,就会自动生成相应数量的隐藏层向量,经过层层传递最后得到需要的词向量。如图4所示,嵌入层为8041C o m p u t e r E n g i n e e
34、 r i n g&S c i e n c e 计算机工程与科学 2 0 2 3,4 5(8)每个标记生成嵌入向量Ei,其中i表示句子中单词的索引;然后,将嵌入向量输入到变压器编码器Tr m中,此时每条消息的向量维度为7 6 8维。为了提高模型运行效率,B L o g A D使用B E R T-Wh i t e n i n g3 2进行简单的白化操作,将数据进行降维。定义一组词向量 xini=1,n是单词个数,通过式(1)所示的线性变换实现各向同性:x=(xi-)W(1)其中,为向量xi的均值,=1NNi=1xi;xi是通过B E R T模型得到的词向量;W由下面一系列公式推导而得。xi Ni=
35、1的原始协方差矩阵如式(2)所示:G=1NNi=1xi-Txi-(2)对协方差矩阵进行转换得到式(3):G=WTGW(3)将转换后的协方差矩阵变为单位矩阵得到式(4):G=WT -1W-1=W-1 TW-1(4)由于协方差矩阵为正定矩阵,满足式(5)的奇异值S V D(S i n g u l a r V a l u e D e c o m p o s i t i o n)分解:G=U UT(5)联合式(4)和式(5)可以得到本文需要的W矩阵,如式(6)所示:W=-1U(6)其中,U是正交矩阵,是正对角矩阵。通过白化操作可以最大程度地保留B E R T的原始向量信息,并且将数据维数从7 6 8降
36、至2 5 6,使得模型在运行过程中大大减少时间和内存开销,且不降低精度。F i g u r e 4 A r c h i t e c t u r e o f B E R T图4 B E R T结构虽然使用的B E R T模型联系了日志序列的上下文信息,但是局部的日志数据之间还包含很多重要的 信 息。受C NN(C o n v o l u t i o n a l N e u r a l N e t-w o r k s)网络在计算机视觉3 3中的应用和C NN网络特点的启发,同时,相邻日志之间包含一些信息且卷积神经网络的卷积运算具有很好的局部连通性,因此B L o g A D使用卷积网络来提取日志序
37、列之间的局部信息。由于日志序列都是一维向量,本文实验使用一维卷积来进行信息提取。然而,由于单个卷积网络从日志序列中提取信息具有局限性,为了更有效地提取日志中的局部信息,可以采用多层卷积操作,并在每层使用多个卷积核并且通过最大池进行特征选择。卷积网络可以很好地提取数据信息,同时由于卷积网络的卷积核作用,在一定程度上可以加快数据运算。经过B E R T预训练,日志序列X被换成单词向量的列表L=v1,v2,vN,其中viRd,表示第i个词向量,d=2 5 6。将这些词向量进行卷积运算生成新的特征ci,1iN。最后通过最大池化运算选择最重要的特征,如式(7)所示:c=m a xci(7)其中,ci是卷
38、积运算生成的特征向量,m a x用于求向量最大值。3.3 异常检测在日志异常检测模型中,有一些是使用双向长短期记忆网络(B i-L S TM)来实现异常检测,例如L o g R o b u s t6、S w i s s l o g1 3等。B i-L S TM通 过 前向和反向2个方向来计算输入序列,实验证明双向长短期记忆网络能够达到很好的效果3 4。门控循环单 元 网 络G RU(G a t e R e c u r r e n t U n i t)作 为L S TM网络的变体,它优化了L S TM网络的单元架构,只依赖更新门和重置门,与L S TM网络相比其计算效率更高,同时不会降低其实现效
39、果3 5。本文使 用基于注意力 的双向门控 循环 单 元B i-G RU神经网络进行异常检测。B i-G RU网络能够解决长期记忆问题和捕获序列数。G RU网络中只有更新门和重置门,更新门决定从先前状态传递到新状态的信息量,重置门决定应该忘记多少信息量。将G RU网络在t时刻输入的语义向量定义为qt,根据t-1时刻的隐藏层状态Ht-1,更新门zt和重置门rt在t时刻的时间步长如式(8)和式(9)所示:zt=WzVt+UzHt-1 (8)rt=(WrVt+UrHt-1)(9)其中,是s i g m o i d函数,Wz、Wr、Uz、Ur是权重参数矩阵,Vt表示t时刻的输入向量。重置门zt用于捕获
40、序列中的短期依赖关系,更新门rt用于捕获序列中的长期依赖关系。隐藏层状态由式(1 0)9041尹春勇等:基于注意力机制的半监督日志异常检测方法和式(1 1)计算得到:Ht=ztHt-1+1-zt Ht(1 0)Ht=t a n hW1Vt+U1rtHt-1 (1 1)其中,W1和U1也是本文的网络参数矩阵;t a n h是非线 性 激 活 函 数,控 制Ht的 每 个 元 素 保 持 在(-1,1)。当t=0时不会出现日志事件,此时隐藏层状态H0是一个零矩阵。B i-G RU是G RU网络的一个扩展,采用前向和反向计算得到2个不同的隐藏层状态,能够充分利用序列信息。在日志语句中,不同的日志语句
41、在日志序列中重要性不同。在B i-G RU中引入了注意力机制(A t t e n t i o n M e c h a n i s m3 6),基于注意力的B i-G RU模型能够捕获日志序列的上下文信息,并自动学习不同日志事件的重要性。注意力机制为不同的日志语句分配不同的权重,过滤掉无关的信息,将计算资源分给更重要的日志语句,从而提高模型的效率和准确性。如图5所示,将词向量输入进B i-G RU网络中,t时刻的注意力t由全连接层(F u l l y C o n n e c t-e d L a y e r s)实现,注意力函数的执行如式(1 2)所示:t=t a n hW t ht (1 2)其
42、中,W t 表示t时刻注意力层的可训练权重矩阵,函数t a n h是一种激活函数,ht是B i-G RU网络在t时刻的状态。之后对所有的隐藏状态乘以它们对应的t并进一步求和,得到一个汇总的隐藏状态向量,最后通过s o f t m a x层应用于汇总的隐藏状态向量来计算预测输出,如式(1 3)所示。p r e d=s o f t m a x W Tt=0tht (1 3)其中,W 表示s o f t m a x层的权重。经过注意力函数计算,最后预测出日志序列是否为异常。F i g u r e 5 A r c h i t e c t u r e o f a t t e n t i o n-b a
43、s e d B i-G RU图5 基于注意力的B i-G RU网络图B L o g A D算法如算法1所示:算法1 B L o g A D算法输入:原始日志数据S=s1,s2,sN。输出:检测概率p r e d。步骤1 D r a i n方法对原始日志数据S=s1,s2,sN解析后得到日志序列X=x1,x2,xN;步骤2 B E R T对日志序列进行语义提取得到语义向量列表L=v1,v2,vN;步骤3 多层卷积网络对语义向量进行进一步提取,得到新的语义向量c;步骤4 语义向量进行最大池化操作得到最终的语义向量c=m a xc;步骤5 将语义向量输入到B i-G RU网络中,输出t时刻隐藏层状态
44、ht;步骤6 全 连 接 层 连 接t时 刻 的 注 意 力t=t a n hW tht ;步骤7 输 出 预 测p r e d=s o f t m a x W Tt=0t ht 。4 实验本节通过实验来验证改进模型的有效性,从定性和定量2个方面对其展开分析。所有实验代码使用P y t h o n 3.6编 写,深度学习 框架 选 用P y-T o r c h 1.3.0,机 器 学 习 方 法 使 用S c i k i t-l e a r n 0.2 1.3提供的A P I。实验平台为W i n d o w s 1 1,使用I n t e l C o r e i 5-1 2 4 0 0 F
45、C P U2.5 GH z 1 2 C P U和N V I D I A G e F o r c e R T X 3 0 6 0 G P U加速模型训练。4.1 实验环境4.1.1 基准数据集如表1所示,本文在3个公共数据集上评估所提出的 方 法。3个 数 据 集 是 指:HD F S(H a d o o p D i s t r i b u t e d F i l e S y s t e m)3 7、B G L(B l u e G e n e/L)3 8和T h u n d e r b i r d3 8。T a b l e 1 S t a t i s t i c s i n f o r m a
46、t i o n o f t h r e e p u b l i c d a t a s e t s表1 3个公共数据集统计信息数据集大小/G B时间跨度/d条数模板数量 异常条数是否有标签H D F S1.5 0 0 1.6 1 2 5 1 1 1 7 5 6 2 94 31 6 8 3 8是B G L0.7 4 32 1 4.74 7 4 7 9 6 3 1 8 2 2 3 4 8 4 6 0是T h u n d e r b i r d1.4 0 02 4 41 0 0 0 0 0 0 09 8 7 7 6 8 1 4 2是 HD F S:HD F S数据集是在2 0 0多个Am a z o
47、 n E C 2节点上运行基于 H a d o o p分布式文件系统生成的1 1 1 7 5 6 2 9条日志消息。每一条日志消息都包含一个“b l o c k I D”标识符,具有相同标识符的日志 按 时 间 顺 序 排 列,以 形 成 日 志 序 列。从0141C o m p u t e r E n g i n e e r i n g&S c i e n c e 计算机工程与科学 2 0 2 3,4 5(8)1 1 1 7 5 6 2 9条日志中共合成了5 7 5 0 6 1条日志序列。HD F S数据集通过手工规则标记异常。H a-d o o p领域专家用正常或异常标签对这些日志序列进行
48、了标记,共有1 6 8 3 8个异常序列和5 5 8 2 2 3个正常序列。B G L:B G L数 据 集 包 含 从L a w r e n c e L i v e r-m o r e国家实验室的B l u e G e n e/L超级计算机上收集的4 7 4 7 9 6 3条日志消息,其中3 4 8 4 6 0条是异常日志。与HD F S数据集不同,B G L日志包含特定标识 符,因此使用 固定窗口或 者滑动窗 口将B G L数据集划分为日志序列。如果日志的第1列是“-”,表示该条日志为正常日志;如果没有这个标识,则为异常日志。T h u n d e r b i r d:T h u n d
49、e r b i r d数 据 集 是 使 用S a n d i a国家实验室的2台真实世界的超级计算机搜集的,这些数据集中的每条日志消息都被手动标记为异常或者正常。如果日志的第1列是“-”,表示该条日志为正常日志;如果没有这个标识,则为异常日志。3个数据集的下载链接可参考文献3 9 4 1。4.1.2 基准方法实验将本文提出的方法B L o g A D与如下6种基线方法进行了对比:(1)L S A D N E T4 2:使 用 了 一 种 全 局 稀 疏T r a n s f o r m e r模型来改进自注意力机制,根据日志模板的共现模式,提出日志模板传递值的计算公式。(2)P C A:用于
50、发现模板计数向量之间的模式,并生成正常和异常2个子空间。(3)L o g C l u s t e r:对日志进行聚类,然后使用分层集群将模板计数向量分配给正常或异常集群。(4)L S TM-A E:重建模板计数向量,并通过重建错误识别异常。(5)D e e p L o g:一种基于模板计数矢量的方法,使用L S TM将日志序列建模为自然语言序列。(6)L o g A n o m a l y:应用B i-L S TM模型和注意力机制预测日志模板。4.1.3 评价指标为了衡量本文方法在异常检测中的有效性,使用精确度(P r e c i s i o n)、召回率(R e c a l l)和F1(F1