基于LSTM-Transformer的日志异常检测方法及系统
技术领域
本发明涉及计算机技术领域,更具体说是涉及一种基于LSTM-Transformer的日志异常检测方法及系统。
背景技术
对于大规模的软件系统,特别是那些部署在云服务器上的软件系统,增强系统的健康状况和稳定性至关重要。外部故障(例如,恶意攻击、节点断开)和内部软件错误(例如,无限循环、不正确的配置)都可能传递到意外的系统中止。所有这些故障都被视为异常现象。云服务器的大规模停止可能会导致下游服务的失败,客户流失,甚至造成巨大的经济损失。日志数据是一种广泛可用的数据资源,它在各种软件系统的运行时记录系统状态和关键事件。开发人员通常利用日志数据来获取系统状态,检测异常情况,并定位根本原因。隐藏的丰富信息为分析系统问题提供了一个很好的视角。因此,通过在大量的日志数据中挖掘日志信息,日志异常检测的方法可以帮助增强系统的运行状况、稳定性和可用性。随着现代计算机系统的规模和复杂性的增加,日志数据呈爆炸式产生。处理如此大量的日志数据是一个关键的挑战。我们迫切需要一个高效的日志处理和检测异常的工具,而不是容易出错和耗时的手工工作。
对日志进行异常检测工作前需要对日志进行日志解析和特征提取等工作。日志解析已取得了很好的成绩。在本发明中,着重讨论特征提取和异常检测的细节。
现有的检测日志异常的特征提取方法大致可以分为两类:基于日志事件计数的方法和基于日志事件语义信息的方法。基于日志事件计数的方法(如PCA、不变挖掘、SVM、DeepLog)首先将日志事件从日志消息中提取出来,然后转换为消息计数特征空间。这些方法不仅忽略了日志事件发生的顺序而且忽略了日志消息中的语义信息。基于日志事件语义信息的方法(如LogAnomaly、LogRobust)将日志流建模为自然语言序列。这些方法使用词嵌入将日志事件转换成向量,然后基于这些向量训练他们的模型。然而,现有的基于词向量加权聚合的方法都不会关注词序关系,不能保证日志有唯一的表示方式。而且现有的方法仅仅局限于日志事件的语义,可能会错过日志中其他用于异常检测的关键值。为了解决这些问题,进一步改进序列异常检测技术,本发明提出了一种新的日志表示方法。这种日志表示不仅能捕获日志中的语义信息和利用日志顺序关系,而且还考虑到日志的组件值。
深度学习方法在近年迎来了研究与应用的热潮,在各个领域都取得了较好的成绩。同时也为日志异常检测提供了新的方法。基于长短时记忆网络(LSTM)的深度学习模型DeepLog、LogAnomaly、LogRobust。基于Transformer的深度学习模型HitAnomaly。最近的研究表明,在某些任务中LSTM性能优于Transformer,但同时某些任务中Transformer又会取代循环神经网络模型,如LSTM。LSTM和Transformer的性能都可以通过考虑日志的语义信息而得到改善,因此本发明考虑将LSTM和Transformer同时在一个网络中相互嵌套,来实现更高的精度。本发明以较低的计算成本来解决日志异常检测的不稳定性问题,提高异常检测的准确性和效率。
发明内容
本发明目的是提供一种日志异常检测的方法及系统,用于解决根据原始日志数据发现多类型异常,以便及时采取有效的措施进行规避风险,减少系统崩溃次数,保证系统运行安全,用于解决提高日志异常检测的准确性和效率的问题。
为了解决以上所述问题,本发明提出了一种基于LSTM-Transformer的日志异常检测方法及系统,首先使用日志的语义信息、序列关系以及组件值对日志进行向量表示。然后,创新性的使用了一个添加了LSTM的Transformer作为最终的分类模型。通过这种方式,不仅能捕获日志序列中的语义信息和组件值信息,而且还能实现更高精度的异常检测。包括:
步骤1:对原始的系统日志数据使用Drain进行解析,将半结构化日志转化为日志模板和日志组件参数等。
步骤2:将解析后的日志按照生成顺序排列在一起构成日志序列向量。
步骤3:将日志模板内容作为Word2Vec的输入,得到单词向量,结合日志事件序列的TF-IDF,可以得到日志事件序列的特征向量。
步骤4:根据组件参数序列的TF-IDF,得到日志组件序列的特征向量。
步骤5:将日志事件序列的特征向量矩阵与日志组件序列的特征向量矩阵进行拼接得到最终的特征向量矩阵。
步骤6:得到最终的特征向量矩阵之后,基于LSTM-Transformer的日志异常检测方法可以区分正常日志和异常日志。
可选的,所述步骤2中,若日志原始数据中含有block_id,则将block_id设置为特定执行序列的标志符,将具有相同block_id的分成一组;若不含有block_id,则需要使用滑动窗口将日志进行分割,窗口大小设置为15。
可选的,所述步骤3中,Word2Vec以单词作为输入,所以需要对日志模板内容进行分段。
可选的,所述步骤3中,首先输入目标单词的前n个单词和后n个单词的one-hot编码,其次经过隐藏测和softmax层来预测该目标单词,从而构成单词的词向量。所有单词的词向量按照其在日志序列向量中出现的顺序构成一个词向量矩阵。然后对于每个单词,其TF-IDF权重w按TF×IDF计算。所有日志序列的TF-IDF权重构成一个词序列向量权重矩阵。最终将词向量矩阵乘以词序列权值矩阵得到日种子序列特征向量。
可选的,所述步骤4中,首先按照步骤2的方式对日志组件值进行排列,其次使用TF-IDF进行权重的分析,最后构成日志组件序列矩阵。
可选的,所述步骤6中,LSTM-Transformer的日志异常检测采用LSTM和Transformer对输入的特征矩阵进行建模,检测异常日志。将LSTM模型添加到Transformer的子集中,对于包含LSTM的Transformer,输入特征矩阵先经过LSTM处理,然后在传送到多头注意力机制中。
可选的,所述步骤6中,首先经过Embedding层的处理,然后将处理好的特征矩阵分别传入LSTM层和PositionalEncoding层。LSTM层的输出矩阵和PositionalEncoding层输出矩阵进行融合发送到MuliheadAttention层。计算过程可概括为:
emb=Encoder(E)emb=Encoder(E)
out_l,h=LSTM(emb)out_l,h=LSTM(emb)
x=Fusion(src,out_l)x=Fusion(src,out_l)
其中,emb为Embedding层的输出,out_l和src分别为LSTM和PositionalEncoding层的输出,ninp为Embedding层嵌入的维度。Fusion(·)为融合层的组合操作,x为融合层的输出,输入到下个部分中。
下部分由Transformer模型的解码器部分构成,包括MuliheadAttention层、归一化层和全连接层。以融合层的输出x作为该模块的输入,其计算过程如下。
Q=xWQQ=xWQ
K=xWKK=xWK
V=xWVV=xWV
O=Concat(H1,H2,...,Hn-1,Hn)WO0=Concat(H1,H2,...,Hn-1,Hn)WO
WQ,WK,WV是模型可学习的参数矩阵,将输入进来的数据转化为query,key,和value。dk是关键向量的维度。Concat(·)函数使用参数矩阵WO将每个头的输出连接起来。
然后,将经过多头注意力机制处理的O与其输入x进行加和连接,通过全连接层生成Ot。
Ot=FNN(O+x)Ot=FNN(O+x)
其中,FFN(·)为前馈网络。与x的大小形状相同的Ot可以成为下一个模块的输入,直到输出层。
最后,通过softmax计算该日志序列的预测标签y_pred,并将其定义为1或0,以表示该输入数据是否异常。
在训练阶段,我们使用交叉熵作为损失函数。通过这个损失函数,我们使用自适应矩估计优化算法(Adam)对模型的参数进行调优。
更可选的,所述步骤6中,使用两层LSTM和两层Transformer,学习率设置为0.0001。
与现有的技术相比,本发明的提升和优势在于:
一、本发明提供了一种新颖的日志表示形式,该表示形式采用具有组件值的新日志表示形式。此方法不仅可用于收集日志的组件值信息,还可用于捕获日志序列上的语义信息。进而关注多类型的日志异常。
二、本发明用LSTM和Transformer的对日志进行异常检测。LSTM能够模拟时间维度,并在Transformer中的注意力机制的帮助下捕获全局上下文信息。就目前而言,我们的发明是第一个应用两种模型的组合来完成日志异常检测任务的。
三、应用于系统日志的异常检测中,提高异常检测的准确性和效率,提高应对异常的能力,保证系统运行的安全。
附图说明
为了更清楚的说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,可以获得更多其他的附图。
图1为本说明书实施例提供的一种日志异常检测方法及系统的流程图。
图2为本说明书实施例日志解析算法的展示图例。
图3为本说明书实施例日志序列向量的展示图例。
图4为本说明书实施例Word2vec算法的展示图例。
图5为本说明书实施例LSTM-Transformer模型的流程图。
图6为本说明书实施例Transformer block的流程图。
图7为本说明书实施例遵循的检测方法概况图。
具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述。此处所描述的具体实施例仅用以解释本发明的实施,不限定本发明。
在可选的实施例中,图1示例性地展示了一种基于LSTM-Transformer的日志异常检测方法及系统流程。
1.获取原始日志数据
首先获取原始的日志数据,日志数据可以来自任何需要进行日志异常检测的系统。本说明书实施例选用的是从分布式系统收集的HDFS和超级计算机日志BGL。
2.日志解析
在日志异常检测之前,首先需要对非结构化和自由文本的日志进行解析,使它能够传入异常检测模型中。日志解析的目的就是从非结构化的日志中提取变量并保存不变量为日志模板。Drain具有解析精度高、解析效率高的特点。经过Drain解析的日志符合本研究所提出模型的要求,能够很好的被本说明书实施例使用。因此,在本项发明中,使用Drain方法对所有的日志数据进行解析。如图2所示,Drain是基于日志数据构建一个固定深度的解析树。首先根据领域知识通过简单的正则表达式对日志进行预处理,其次以日志消息的长度(token的数量)区分日志组,然后通过日志前面的token进行搜索并进行token相似度的计算,找到最佳匹配,最后更新解析树。
3.生成日志序列向量
每个数据集都有唯一的标识符。在HDFS数据集中,本说明书的实施例将block_id设置为特定执行序列的标识符。日志事件根据这些标识符分组在一起,或者将并发进程产生的日志项分解为单独的、单线程的顺序序列。图3包含5个不同的日志执行序列。图3中的每一行都是一个日志执行序列,执行序列中的每个数字(ID)都是一条日志。日志执行序列中的每个日志都具有相同的block_id。将具有相同block_id的日志按照生成的顺序排列在一起构成日志序列向量。与HDFS数据集不同,BGL日志不记录每个日志事件生成的块ID。因此,需要使用滑动窗口将日志消息分割成日志序列。如果某个日志序列中存在错误日志,则将该日志序列标记为异常。这样可以检测到日志执行顺序出现错误的异常。
4.生成日志事件序列特征向量
首先向Word2Vec输入日志模板内容,得到词向量。其次结合日志事件序列的TF-IDF,可以得到日志事件序列特征向量。
需要说明的是,Word2Vec是一种有效的词嵌入的方法,其在训练的过程中考虑了词语的上下文,就是在目标词(x)和目标词的上下文(y)之间建立一个语言模型f(x)=y,根据上下文的词得到目标词或者根据目标词得到上下文的词。本实施例使用Word2Vec方法可以有效的考虑到日志消息中的语义信息。如图4所示,首先输入目标单词的前n个单词和后n个单词的one-hot编码,然后经过隐藏层和softmax层来预测该目标单词,从而构成单词的词向量。所有单词的词向量根据他们在日志序列向量中出现的顺序构成一个词向量矩阵V∈Ra×b。
需要说明的是,TF-IDF是信息检索和数据挖掘中常用的一种加权技术。句子中单词的重要性可以被TF-IDF有效地衡量,这正好满足了高分辨率的要求。本实施例使用TermFrequency(TF)来描述其的重要性,并使用Inverse Document Frequency(IDF)来衡量日志事件的发生。
其中,nini表示wordi在所有日志序列中的出现次数,∑knk∑knk表示所有日志序列中的单词总数,s表示日志序列的总数,分母加1是防止s=0,sisi表示包含wordi的日志序列的总数。对于每个单词,其TF-IDF权重w按TF×IDF计算。所有日志序列的TF-IDF权重构成一个词序列向量权重矩阵W∈Rc×a。
日志序列特征矩阵的生成:将词向量矩阵V乘以词序列权值矩阵W,得到日志序列特征向量Ew∈Rc×b。因此,日志序列特征矩阵不仅能够关注日志执行顺序中出现的异常还能关注日志的语义信息。
Ew=W×VEw=W×V
5.生成组件值特征向量
与日志序列特征矩阵生成类似。首先,将具有相同block_id的日志组件值按照执行顺序构成组件值序列向量。然后使用TF-IDF进行权重分析,此处的TF-IDF的算法与词序列权重的计算略有不同。我们依旧使用Term Frequency(TF)来描述它的重要性,InverseDocument Frequency(IDF)作为日志事件发生度量。
其中,mimi表示component componenti在所有日志序列中的出现次数,∑kmk∑kmk表示所有日志序列中的组件值总数,c表示日志序列的总数,分母加1是防止c=0,cici表示包含component componenti的日志序列的总数。对于每个组件值,其TF-IDF权重w按TF×IDF计算。所有组件值序列的TF-IDF权重构成一个组件序列权重矩阵Wc∈Rc×d。
最后,日志组件值序列矩阵就等于组件序列权重矩阵,Ec∈Rc×d。
Ec=WcEc=Wc
6.生成最终的特征向量
最终的特征矩阵的获取是日志异常检测的关键步骤。日志异常检测模型以最终的特征矩阵为输入。最终的特征矩阵由日志序列特诊矩阵与组件值序列特征矩阵拼接构成,E∈Rc×(b+d)。concatenate(·)表示将俩个矩阵拼接起来。
E=concatenate(Ew,Ec)
7.异常检测
为了能够利用LSTM对时间维度的建模和Transformer中自注意力机制捕获全局的上下文信息。基于LSTM-Transformer的日志异常检测方法采用LSTM和Transformer对输入的特征矩阵进行建模,检测异常日志。我们将LSTM模型添加到Transformer的子集中,如图5所示,对于包含LSTM的Transformer,输入特征矩阵先经过LSTM处理,然后在传送到Transfomer块中。
如图6所示,下部分由Transformer模型的解码器部分构成,包括MuliheadAttention层、归一化层和全连接层。
本实施例将LSTM结合到Transformer结构中,通过一种交叉的信息表达,来获得更强大更鲁棒的模型。
综上所述,本发明的总概括如图7,首先进行日志解析,将半结构化日志转化为日志模板和日志组件参数等。该实施例将日志模板和日志组件参数作为输入。其次,向Word2Vec输入日志模板内容,得到词向量。结合日志事件序列的TF-IDF,可以得到日志事件序列的特征向量。然后根据组件参数序列的TF-IDF,得到日志组件序列的特征向量。将日志事件序列的特征向量矩阵与日志组件序列的特征向量矩阵进行拼接得到最终的特征向量矩阵。在得到最终的特征向量矩阵之后,基于LSTM-Transformer的日志异常检测方法就可以对日志进行检测。这样不仅能够更准确的表示日志而且能够检测多种类型的异常,提高检测效率。