本发明属于软件异常检测,具体涉及一种基于lstm网络和过程状态检查的日志异常检测方法。
背景技术:
1、当代大规模分布式系统的发展和应用已成为处理复杂计算和大数据任务的基础和标准架构。这些分布式系统通过在多台计算机上分布式操作软件,增强了软件操作的处理能力和可靠性。这不仅显著提升了计算和存储能力,还为新兴技术的发展创造了平台。随着物联网(iot)和边缘计算的兴起,分布式系统的规模和复杂性显著增加,对系统监控和异常检测的需求也提高了。
2、异常检测不仅在确保系统的稳定性和可靠性方面发挥关键作用,而且是软件开发和测试中的一个重要课题。在软件部署过程中,异常检测能够及时识别系统操作中的故障、性能瓶颈和安全威胁,使开发和运营团队能够迅速响应,减少系统停机时间和服务中断。因此,有效的异常检测机制往往可以预先识别问题,避免服务中断和服务质量下降,这可能导致重大的经济损失。
3、软件异常检测算法通常依赖于多种数据来源,包括系统日志、性能指标(如cpu和内存使用情况)、网络流量和用户行为数据。其中,基于日志的检测算法效率高且被广泛使用,因为这些日志文件在软件操作过程中详尽记录了各种关键事件和状态信息,为故障诊断和性能评估提供了宝贵的信息资源。相比之下,其他异常检测方法更多地关注实时性能数据,或通过机器学习模型识别区分正常行为与异常行为的模式。这些算法在不同层面上补充了异常检测方法,为系统稳定运行提供了多方面的支持。
4、系统日志几乎存在于所有计算机系统中,记录了软件操作过程中的各种事件,包括系统启动和关闭、用户操作、系统错误、警告消息以及其他关键的运行状态信息。日志数据对开发人员和运营人员至关重要,它提供了有关软件行为的视角,有助于诊断问题、监控系统状态和优化性能。
5、传统的基于规则的异常检测依赖于预定义的规则或模式来识别异常行为,通常基于专家知识。这种方法在特定场景下有效,但依赖于手动设置的规则和人工识别异常,使其无法检测未知的异常模式。随着分布式系统的规模和复杂性增加,日志数量的指数增长使得传统的软件异常检测方法变得不切实际。相比之下,基于深度学习的软件异常检测方法利用深度神经网络的强大学习能力,自动从数据中学习正常行为模式。这种方法不需要预定义的规则,而是通过分析大量的日志数据来识别正常和异常。
6、以往的通常日志异常检测研究主要遵循以下过程:日志解析将原始日志条目转换为结构化的格式。在这一步中,日志条目被分解为文本常量和参数变量,文本常量通常代表了日志中的固定信息,而参数变量则代表了可变的信息。通过对解析后的日志数据进一步分析,研究者们提取出事件模板,事件模板是对日志条目中文本常量进行抽象的结果,它忽略了参数变量的具体值。这一步骤的目的是从大量的日志条目中归纳出有限的事件类型。在获取到事件模板序列之后,以前的方法会应用不同的算法来进行异常检测。
7、主成分分析(pca)是一种数据降维技术,它通过线性变换将数据转换到新的坐标系统中,使得在新坐标系统的第一坐标轴上的数据方差最大(即第一主成分),第二坐标轴上的数据方差次之,依此类推。在日志异常检测的上下文中,pca按会话对日志条目进行分组,并计算每个会话中每个事件模板的出现次数,形成一个会话向量。通过将所有会话向量堆叠起来,形成一个矩阵。通过对上述矩阵应用pca技术,将高维会话向量转换到一个低维空间中,同时尽可能保留原始数据的主成分。变换后,异常会话向量通常会因为与其他向量相比有显著不同的属性而脱颖而出。n-gram方法是一种基于统计的模型,用于文本处理和自然语言处理领域。它通过分析文本中的n个连续项的序列来预测或检测模式。在日志异常检测的上下文中,选择一个合适的n值(即n-gram中的“gram”的数量),然后基于正常日志数据构建n-gram模型。这涉及到计算和存储所有可能的n个连续事件模板序列及其在日志数据中出现的频率或概率。n-gram方法的一个优点是其简单性和直观性,在短序列数据时表现良好。但是,n-gram模型可能无法捕捉长期依赖性,原因是当n的值较大时,模型可能会遇到“维度爆炸”的问题,有可能的n-gram组合数量呈指数级增长,这会大幅增加存储和计算的需求。deeplog是一种利用深度学习技术对系统日志进行异常检测的方法。deeplog通过学习正常日志数据的模式来建立一个模型,该模型能够预测正常操作中接下来可能出现的日志键。当实际出现的日志键与模型预测的不匹配时,系统将其视为异常。deeplog特别适用于在线异常检测场景,可以实时地处理和分析日志数据,识别异常行为。deeplog的一个关键优势是其能够利用lstm网络处理长期依赖关系,这对于理解复杂的日志序列模式非常重要。不过,deeplog的性能依赖于充足且高质量的训练数据。
8、尽管这些方法在处理日志数据进行异常检测方面取得了一定的成功,但它们主要侧重于分析日志内容本身,没有充分利用如cpu使用率、内存占用、磁盘i/o和网络流量等系统性能信息,这对于全面的异常检测机制非常重要。
9、在软件异常检测领域,尤其是基于日志的异常检测的研究和应用中,主要面临以下几个挑战:
10、1.软件系统产生的日志通常是非结构化的文本数据,包含时间戳、日志级别、事件(深度日志中称为日志键)以及描述性消息,如参数值。此外,不同系统的日志结构也各不相同。有效地解析非结构化数据并提取有用的信息和特征是实现高效异常检测的主要挑战。
11、2.在大规模分布式系统中,多个进程或服务常常同时运行。这些并发进程生成的日志消息相互交织在一起,使得难以区分和追踪由单一工作流或事务产生的日志序列。这种并发性为日志数据引入了高度的复杂性,对异常检测算法的设计和实施提出了更高的要求。
12、3.实时处理和自适应模型更新,异常检测系统不仅需要能够实时处理和分析大量日志数据,快速识别异常行为,还必须能够根据系统运行环境的变化自动更新检测模型。
13、4.将日志数据与性能指标集成带来了新的挑战,日志数据记录系统的操作历史,而性能指标则反映系统的运行状态,设计一个能够处理这两种数据类型以进行异常检测的算法是提高检测准确性的关键。
技术实现思路
1、本发明针对上述问题提供了一种基于lstm网络和过程状态检查的日志异常检测方法,利用模拟日志条目序列和cpu采样序列这两种不同类型的数据源来提高异常检测的准确性和时效性。日志条目并非孤立存在,它们是按时间顺序生成的,彼此之间具有内在联系,类似于自然语言处理中句子或段落之间的关系。同样,特定的工作流程常常需要一定量的计算资源,工作流的变化直接影响资源使用,尤其是cpu使用。异常的cpu使用可能表明存在性能瓶颈、无效循环或配置错误,这些可能在日志中不明显。因此,将日志异常与同一工作流下生成的cpu使用相关联,可以提供一个更全面的异常检测机制。
2、为达到上述目的本发明采用了以下技术方案:
3、一种基于lstm网络和过程状态检查的日志异常检测方法,包括以下步骤:
4、步骤1,基于规则的分类方法,收集软件系统内的日志条目;
5、步骤2,从日志条目中提取事件模板,并对事件模板进行编码,形成日志序列;
6、步骤3,获取软件系统内的cpu使用率;
7、步骤4,使用双层lstm网络和多层感知器构建异常检测模型,输入是基于设定时间窗口大小选择的日志序列和cpu使用率,输出是下一个事件模板的预测概率分布以及预测的cpu使用率;
8、步骤5,对于事件模板:如果实际发生的事件模板与预测的下一个事件模板不符,或者实际事件模板的预测概率低于某个阈值,则该事件模板可能被视为异常;对于cpu使用率:预测的cpu使用率和真实值之间的误差通过均方误差测量,且该误差遵循高斯分布,如果该误差超出高斯分布的置信区间,则预测的下一个事件模板被视为异常。
9、进一步,所述步骤2中使用日志解析器从日志条目中提取事件模板和相应的参数值向量,事件模板由日志条目中的文本常量组成,在提取的过程中,将时间戳、标识符和度量值替换为占位符,编码后,日志条目被映射成一个明确定义的事件模板序列,即日志序列。
10、进一步,所述步骤3中在虚拟机上使用资源管理命令top来获取软件系统内的cpu使用率。
11、进一步,所述步骤4中双层lstm网络包括两层lstm网络,分别输入基于设定窗口大小选择的日志序列和cpu使用率,所述lstm网络引入输入门、遗忘门、输出门和一个细胞状态;
12、所述遗忘门负责决定从细胞状态中遗忘什么信息,通过一个sigmoid函数实现,该函数考虑当前输入xt和前一隐藏状态ht-1,公式如下:
13、ft=σ(wf·[ht-1,xt]+bf)
14、其中,ft表遗忘门的输出,σ表示sigmoid激活函数,wf和bf分别是遗忘门的权重和偏置;
15、所述输入门负责更新细胞状态,由两个部分组成:一个sigmoid层和一个tanh层,sigmoid层决定哪些信息会被更新,而tanh层则生成一个新的候选值向量公式如下:
16、it=σ(wi·[ht-1,xt]+bi)
17、
18、其中,it是lstm网络中的输入门,wi是输入门的权重矩阵,bi是输入门的偏置项,wc是用于生成新的候选细胞状态的权重矩阵,bc是用于生成新的候选细胞状态的偏置项;
19、所述细胞状态负责传递和维护信息,当前时刻的细胞状态ct是基于前一细胞状态ct-1、遗忘门的输出和输入门的输出来更新的,公式如下:
20、
21、所述输出门决定基于当前细胞状态的输出值,通过一个sigmoid层来决定哪部分状态将输出,然后与tanh处理过的细胞状态相乘,产生最终的输出ht,公式如下:
22、ot=σ(wo·[ht-1,xt]+bo)
23、ht=ot*tanh(ct)
24、其中,ot是lstm网络中的输出门,wo是输出门的权重矩阵,bo是输出门的偏置项,*表示相乘。
25、进一步,所述步骤4中输入是基于设定窗口大小选择的日志序列和cpu使用率以及参数值,输出是下一个事件模板的预测概率分布以及预测的cpu使用率,具体为:
26、对于一个事件模板集合e={e1,e2,…,en},一个由日志序列构成的时间窗口w={mt-h,…,mt-1},其中,h是窗口大小,mt-h到mt-1代表时间步t-h到t-1处的事件模板;对于每一个时间步t,异常检测模型的目标是预测下一个事件模板和下一个时间步的cpu使用率;
27、事件模板的预测被建模为:
28、pr(et|e(t-h):(t-1))=softmax(f(e(t-h):(t-1)))
29、其中,f是双层lstm网络的第一层;
30、通过lstm网络处理时间窗口w,并输出一个向量,随后通过softmax函数转换为概率分布,即输出是一个概率分布pr[mt|w]={k1:p1,k2:p2,…,km:pn},其中,k1,k2,…,kn代表可能的事件模板,而p1,p2,…,pn则表示给定时间窗口w下,该事件模板作为下一个事件模板出现的概率;
31、cpu使用率的预测被建模为:
32、
33、其中,是lstm网络基于时间窗口w的输出,表示在时间步t的cpu使用率预测值,是双层lstm网络的第二层。
34、再进一步,所述步骤4中异常检测模型的训练过程包括最小化预测事件模板的交叉熵损失函数和最小化预测cpu使用率和真实值之间的误差∈t,所述交叉熵损失函数如下:
35、
36、其中,yt,i是事件模板et的真实标签,n是训练样本的数量,wt是在时间步t的时间窗口值;
37、所述误差∈t如下:
38、
39、其中,ct是真实的cpu使用率,n表示高斯分布。
40、更进一步,所述步骤5中预测的cpu使用率和真实值之间的误差遵循一个以μ为均值,σ2为方差的高斯分布:
41、∈t~n(μ,σ2);
42、如果误差∈t超出高斯分布的置信区间,则认为在时间步t有一个异常:
43、∈t>τ(μ,σ2,α)
44、其中,τ(μ,σ2,α)=μ+zα,τ是基于高斯分布的置信区间阈值,α是置信水平,zα是基于标准高斯分布的临界值。
45、与现有技术相比本发明具有以下优点:
46、1、本发明利用长短期记忆(lstm)网络将编码的事件模板建模为自然语言序列,从而在正常执行期间自动学习日志模式。
47、2、本发明通过研究日志数据的结构和特性,成功地实现了对大规模分布式系统日志的解析和任务分类。此外,采用多任务学习框架整合了事件模板序列和cpu使用率的检测任务,从而提高了异常检测的准确性和效率。
48、3、本发明将事件模板序列的异常检测建模为一个多分类问题,其中事件模板的数量e={e1,e2,…,en}等于类别的数量。将该模型训练为一个多分类器,其中对事件模板ei的预测输出在很大程度上依赖于ei。对于cpu使用率的异常检测,避免设置一个单纯的统计阈值,模型预测和实际值之间的差异通过均方误差(mse)来测量。
49、4、本发明设计了异常评分机制。对于事件模板:如果实际发生的事件模板与预测的下一个事件模板不符,或者实际事件模板的预测概率低于某个阈值,则该事件模板可能被视为异常;对于cpu使用率:预测的cpu使用率和真实值之间的误差通过均方误差测量,且该误差遵循高斯分布,如果该误差超出高斯分布的置信区间,则预测的下一个事件模板被视为异常。