掌桥专利:专业的专利平台
掌桥专利
首页

一种基于自动化监控日志的系统异常检测方法

文献发布时间:2023-06-19 11:16:08


一种基于自动化监控日志的系统异常检测方法

技术领域

本发明涉及软件系统的异常检测与故障预警技术领域,具体涉及一种基于自动化监控日志的系统异常检测方法。

背景技术

随着计算机技术和互联网的飞速发展,人们已经进入了一个信息量极为丰富、数据量极为海量的大数据时代。如今的软件系统规模越来越庞大,结构越来越复杂,异常和错误的发生变得难以避免。软件异常充斥在软件开发的每个阶段,并且包含在最终交付的软件产品中。现今,分析系统日志已经成为判断系统是否出现异常的最主要的手段。系统日志蕴含的丰富信息可以帮助系统开发人员和维护人员更好地理解系统行为并在生产过程中检测和定位系统异常。

对于软件系统自动异常检测这一领域,近年来已经有了许多研究与积累,但仍难以满足现实应用环境的需求。具体表现在:(1)软件系统之间在行为、输入、输出等方面有很大差别,目前提出的一些自动异常检测方法往往只对某一类的系统比较有效,通用的异常检测方法难以在多数系统上都达到较好的检测效果;(2)现代软件系统构建在以云计算为代表的新一代技术之上,有很强的横向扩展能力,包含成千上万个计算节点的分布式系统已不鲜见,并发度非常高,而传统的自动异常检测方法多专注于检测单一节点(服务)的故障;(3)目前的自动异常检测方法大多很不直观,极少数能够提供关于异常的有意义的信息,在报告异常之后不能为系统检测人员诊断异常提供更多帮助。

基于日志的异常检测方法,对原始日志文件中的非结构化数据的解析为基础。现有的研究主要分为:基于统计的方法、基于分类的方法、聚类分析方法、基于信息理论的方法和基于图模型的方法。其中,基于统计的日志异常检测方法是基于设计出一个统计模型,即先给数据们创建一个模型,根据对象拟合模型的情况来评估对象有多大可能符合该模型,但是,如果选择了错误的模型,则对象很可能被错误地判为异常点;基于分类的日志异常检测方法,分类主要是一种有监督的方法,通过已有的训练样本,即已知数据及其对应的输出,去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。基于有监督式学习的异常检测方法的最大的缺点不在于技术层面,而在于其需要大量有标记的训练数据,获取有标记数据的成本很高,这在很大程度上限制了基于有监督式学习的异常检测方法的应用范围。基于聚类的日志异常检测方法即将相似的数据实例聚成一类,聚类主要是一种经典的、无监督的机器学习方法,聚类方法的前提假设为正常的日志数据实例属于日志数据实例数量大且密度高的类,异常的日志数据实例属于日志数据实例数量小且密度低的类,然而,基于聚类的异常检测准确率不稳定并且难以在大规模的日志文件上进行应用。基于信息理论的日志异常检测方法的基础假设是为异常的日志数据将会导致整个日志数据在信息量上的不规则性,不同的基于信息理论的方法使用不同的信息理论的度量方法,例如柯尔莫哥洛夫复杂度、熵、相对熵等去分析数据集合的信息量。基于图模型的日志异常检测方法最重要的是要构造出能够很好地代表正常行为的有限自动状态机,然后将日志数据与这个有限自动状态机进行匹配,如果这个状态机不能匹配到某些日志数据,那么这些日志数据就很可能是异常的日志数据。

发明内容

本发明的目的是提供一种基于自动化监控日志的系统异常检测方法。

为了达到上述目的,本发明通过以下技术方案实现:

一种基于自动化监控日志的系统异常检测方法,包括:

步骤S1:获取软件系统的原始日志数据,根据日志模板提取所述原始日志数据中包含的有效信息,得到初始日志集;

步骤S2:对所述初始日志集的日志信息进行规范化,得到规范日志集,分析所述规范日志集的生成特征,进行特征提取,得到对应的日志特征集合,根据日志特征把所述规范日志集划分为不同类型的行为序列,即训练日志集;

步骤S3:基于训练日志集,对相应的行为序列进行模式训练,生成对应的行为模式;

步骤S4:对实时日志流进行异常行为检测,计算异常指数,通过与异常阈值的比较判断系统状态,得出日志异常检测结果。

进一步的,在步骤S2中,对所述初始日志集的日志信息进行规范化的方式包括以下至少一种:

重排不规范日志记录;

去参数化,数值型数据被替换为占位符;

调整日志结构,把跨越多行的记录调整为一行;

去除冗余字符;

把日志级别转化为数字表示。

进一步的,在步骤2中,分析所述规范日志集的生成特征,进行特征提取,得到对应的日志特征集合,根据日志特征把所述规范日志集划分为不同类型的行为序列,包括:

对日志数据进行标准化和降维,并从中选出最有效的日志特征;

对选择的日志特征进行数据转换,形成日志特征集合;

选择相似度标准,找出最适合特征类型的距离函数或构造新的距离函数;

执行聚类算法,将所述规范日志集划分为不同类型的行为序列。

进一步的,所述聚类算法为使用层次方法对日志数据进行聚类,采用自底向上的凝聚方式。

进一步的,在步骤S3中,基于训练日志集,对相应的每一行为序列进行模式训练,生成对应的行为模式,包括:

为每个日志类型赋一个类型号,以训练日志集为输入,依次读入该训练日志集中每条日志记录,把规范化的日志映射到对应的日志类型,最后输出对应的类型号,最终的结果序列包含了一个日志时间戳和对应的类型号,将该结果序列转化为频率序列;

通过滑动窗口技术对频率序列进行遍历,提取出所有的频率子序列,作为行为子序列;

为行为子序列定义一个相似度量标准,对相同及相似的频率子序列数目进行统计,把不同类型行为子序列的形状特征及出现频率作为该类型行为序列的行为模式。

进一步的,在步骤S4中,通过以下公式计算异常指数:

式中,L表示所述实时日志流构成的日志序列,

进一步的,设定行为模式的更新时间,当达到更新时间,则重新执行步骤S1~S3,对行为模式进行更新。

本发明与现有技术相比,具有以下有益效果:

本发明提出了基于日志标准化和层次聚类的日志预处理方法,经过预处理后的日志数据被归类为不同类型,具有良好的结构,方便后续行为模式的提取和异常行为的判断;基于行为异常的通用日志异常检测模型,通过异常值的大小对系统进行判断,预测可能发生的系统异常。不仅提高了系统异常检测准确率,同时一定程度上解决了系统日志数据量大、结构复杂、存在差异、系统故障类型多样等日志分析问题,是一个通用的日志检测算法。

附图说明

为了更清楚地说明本发明的技术方案,下面将对描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图:

图1为本发明提供的一种基于自动化监控日志的系统异常检测方法的流程图;

图2为本发明提供的实施整体流程图;

图3为本发明提供的异常检测流程图;

图4为本发明提供的系统异常检测总体架构示意图。

具体实施方式

以下结合附图和具体实施方式对本发明提出的技术方案作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需要说明的是,附图采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施方式的目的。为了使本发明的目的、特征和优点能够更加明显易懂,请参阅附图。须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容能涵盖的范围内。

根据对现有技术的问题的分析,我们所需要的是一个实时高效的、能处理不同日志结构的通用日志监控系统。针对这些问题进行研究和实验,提出了一种基于系统日志监控的行为异常检测方法。该异常检测方法不仅提高了检测准确率,一定程度上解决了处理大量数据,日志结构不统一的问题,是一个通用的日志检测算法,能够及时并对系统可能发生的已成做出准确的预测。不仅克服了基于机器学习的异常检测方法中判别准确性和泛化能力较低、对训练样本中未出现的故障无法预警的缺陷,也克服了基于知识的异常检测方法中需要耗费极大的时间成本和人工成本的缺陷。

如图1所示,本发明一实施例提供的一种基于自动化监控日志的系统异常检测方法,包括:

步骤S1:获取软件系统的原始日志数据,根据日志模板提取所述原始日志数据中包含的有效信息,得到初始日志集;

步骤S2:对所述初始日志集的日志信息进行规范化,得到规范日志集,分析所述规范日志集的生成特征,进行特征提取,得到对应的日志特征集合,根据日志特征把所述规范日志集划分为不同类型的行为序列,即为训练日志集;

步骤S3:基于训练日志集,对相应的行为序列进行模式训练,生成对应的行为模式;

步骤S4:获取所述软件系统的实时日志数据进行异常行为检测,计算异常指数,通过与异常阈值的比较判断系统状态,得出日志异常检测结果。

以下结合图2-4对本发明的各步骤进行详细说明。

步骤1:日志数据收集与解析:将各节点生成的日志数据归拢收集到一起,通过抽象语法树进行源代码解析,将非结构化的数据转化成结构化数据,提取初始日志集中包含有效信息,作为后续日志划分和特征挖掘的输入,得到初始日志数据集。

具体步骤如下:

步骤1.1:针对字符串拼接和方法调用两种获取日志的方法,本发明分别采用不同的方法生成日志模板。

对于字符串拼接的方式,通过拆分加法表达式来获得日志模板。对于方法调用,采用程序的抽象语法树(Abstract Syntax Tree,AST)的方法生成模板。日志模版识别的输入为程序源代码,首先构造抽象语法树,然后对其进行遍历,寻找返回值类型为String的方法,并获得其返回值的正则表达式,从而产生对应的日志模板。由于不同类中可能包含同名方法,所以方法名必须使用方法的全限定名。最后将两种方法生成的日志模板做进一步整合。

步骤1.2:根据日志模板提取日志数据中包含的有效信息,作为后续日志划分和特征挖掘的输入。

步骤2:日志数据预处理:将初始日志集规范化,得到规范日志集,分析日志集的生成特征,对日志事件序列集进行特征提取得到对应的特征集合,根据日志特征把规范日志集划分为不同类型的行为序列,得到训练日志集。

具体步骤如下:

步骤2.1:日志规范化:在日志规范化中,日志数据进行了重排不规范日志记录,去参数化操作,数值型数据被替换为占位符,调整日志结构,把跨越多行的记录调整为一行,删除冗余字符。规范化后的数据被存储在关系数据库,元组的每一个属性代表了日志记录中的一项。

把日志级别转化为数字表示,方便了日志聚类时的相似度测量。

当系统在运行中发生错误,并抛出一个异常时,日志不仅记录错误发生的时间和位置,还会抛出异常的函数及其调用栈,针对这种情况,删除调用栈记录所占的多余几行,并删除行与行之间的换行符,使用其他分隔符代替,把跨越多行的记录调整为一行。

在日志分析时会因为日志消息中不同的参数值可能把相同类型的日志误判为不同类型。为解决这个问题,使用去参数化的方法,把每条日志中出现的数字参数用关键字占位符代替。

步骤2.2:划分行为序列的方法如下:

特征选择:对日志数据进行特征标准化和降维,并从中选出最有效的N个日志特征;

特征提取:对选择的N个日志特征进行数据转换,形成日志特征集合,其结果可表示为一个矩阵,其中行代表样本,列代表特征变量;

相似度选择:对相似度标准进行选择,找出最适合特征类型的距离函数或构造新的距离函数。

分组:执行聚类算法,将所述规范日志集划分为不同类型的行为序列。算法的输入是样本矩阵,输出可以是树形图或具体分类方案,以不同的粒度反映分类情况。凭借领域知识划定分类阈值,得到最终聚类结果,评估聚类有效性。

具体的,使用层次方法对日志数据进行聚类,采用自底向上的凝聚方式。把日志数据划分为n个簇,每个簇包含一个数据点;计算簇之间的距离,得到n×n的相似性矩阵;找到矩阵中距离最小的两个簇:

采用全连接complete linkage作为度量标准,去度量不同簇之间的距离。全连接聚类使用最大距离dist

p、p’表示两点距离,最大距离是两个簇中任意两点之间距离的最大值。当任意两个簇之间的最大距离超过距离阈值时,聚类过程就会停止。

相似度计算,采用基于动态规划的算法,通过把要求解的问题分解成子问题,完成了求解子问题的各个子阶段后,原问题也得到了解答。

凝聚方式的层次聚类最后会终止于预定义的终止条件或使所有数据点聚到同一个簇,需要确定终止条件,使同类型的日志尽量聚到一起,同时区分不同的类,保留数据本来的信息。

步骤3:模式训练:对训练日志集的日志流进行分析,为不同行为序列生成行为模式。当上次训练时间超过更新周期长度或收到更新命令时,重新执行整个模式训练流程,具体步骤如下:

步骤3.1:日志流到频率序列的转换:根据上述训练日志集的不同类型,把训练日志集转换为频率序列。

为每个日志类型赋一个类型号,以训练日志集为输入,依次读入该训练日志集中每条日志记录,把规范化的日志映射到对应的日志类型,最后输出类型对应的类型号。构造一个字典结构,加快字符串查找速度,进一步提高查找效率。最终的结果序列包含了一个日志时间戳和对应的类型号,为提取频率序列做准备,把该结果序列转化为频率序列。

步骤3.2:生成行为模式:通过上一步骤得到了由不同日志类型组成的频率序列,即行为序列。令频率序列集由T

首先,定义长度为k的滑动窗口,提取长度m的频率序列T

每个长度为m的频率序列T

接着为行为子序列定义一个相似度量标准,对相同及相似的频率子序列数目进行统计,把不同类型行为子序列的形状特征及出现频率作为该类型行为序列的行为模式。对相似频率子序列的归类操作可以使用日志预处理中的层次聚类方法。由于之前所做的特征提取操作使得行为子序列的周期性和波形都相当规律,因此可以采取更简单的方式,如定义一个相似度阈值进行简单聚类,或者把子序列向量作为键值,统计其出现次数。最后,为行为模式集中的每一个行为模式定义一个异常值。使用每个行为子序列的出现频率作为行为模式参数,出现次数少的行为模式必然具有更高的异常值。因此把行为子序列出现频率的倒数作为行为模式

步骤4:异常检测:对实时日志流进行异常行为检测,计算异常指数,通过与异常阈值的比较判断系统状态,得出日志异常检测结果。整个分析流程如附图3所示,具体步骤如下:

步骤4.1:按照预定义时间间隔和时间窗口对日志流分片,根据聚类结果把日志转化为不同类型的频率子序列。

根据预先定义的单位时间间隔和长度k的滑动时间窗口,实时截取最近k个单位时间的日志序列L,并根据不同日志类型把日志序列拆分成N个日志子序列,记作:L={l

步骤4.2:把日志流的行为序列和日志行为模式作为参数,根据异常检测计算公式计算日志异常值。如果行为模式达到更新时间,要执行行为模式的更新操作,待更新完成后再进行计算。

当前序列集D包含N个行为序列,每个行为序列d

而日志序列L的异常指数定义为所有子序列异常指数的和,即

最后的异常指数计算公式记为:

当d

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

相关技术
  • 一种基于自动化监控日志的系统异常检测方法
  • 一种基于注意力机制的大规模系统日志异常检测方法
技术分类

06120112859930