一种基于日志的根因分析系统

文档序号:32751328发布日期:2022-12-31 01:01阅读:58来源:国知局
一种基于日志的根因分析系统

1.本发明涉及自动化日志分析技术领域,特别是涉及一种基于日志的根因分析系统。


背景技术:

2.自动化日志分析技术是一类通过分析软件日志实现软件可靠性管理的技术,致力于克服人工检索日志所带来的效率低、遗漏多、准确性低等痛点。其中,基于日志的根因分析是一种细粒度的自动化日志分析技术,旨在将会话中的异常日志与故障的可能解释进行定位,从而为进一步确定和排除故障提供重要参考。现有的基于日志的根因分析技术通过使用不包含异常的日志序列构建一个参考模型,然后通过判断测试日志是否偏离此模型,来区分正常日志和日常日志,具体来说,已有方法首先提取日志事件序列,然后将日志事件序列通过有限状态机或因果关系,抽象为一个有向图,作为参考模型。然后,任何偏离该模型的日志都将被视为异常的根本原因,并被标记以为系统做故障排除。
3.然而,基于因果图的方法依赖于贝叶斯的后验概率。基于有限状态机的方法和基于因果图的方法都遵循封闭世界的假设,在处理未知数据时受到限制。然而,在最初的版本发布后,软件经历了持续的发展,以满足客户的需求,修复错误,并扩展到新的功能,即软件演化。以spark系统为例,从spark2到spark3,关于日志的开发包括(1)在添加新功能时插入新的日志语句功能时插入新的日志语句;(2)解析日志语句,以便更精确地记录;(3)在废弃的函数中删除旧的日志语句。
4.软件演化过程中中改变的日志语句对现有的根因分析技术提出了挑战,包含一下三方面:
5.日志解析器从日志信息中提取事件(即由开发人员编写的固定模板)和参数(即从系统中生成的动态变量)。由于现代日志分析只使用提取的事件,根因分析技术的性能在很大程度上取决于日志解析器的准确性。然而,解析器有可能产生错误并误导根因分析器。此外,软件进化过程中新引入的参数也会降低解析器的性能。已有的根因分析技术无法克服由解析器引起的缺陷。
6.即使最先进的解析器如期工作,软件演化也会带来新的日志语句或改写旧的日志语句,即事件演化。演变的事件将偏离已有的根因技术中的参考模型(因而被直接视为异常的根因,引发错误),因为它们都不能在训练过程中被模型观察到。
7.除了单条的日志事件之外,运行相同作业的日志序列也会发生变化,称为不稳定的序列。这种变化可能是由多个线程产生的日志交错造成的。此外,软件演化可能会改变函数调用序列,导致新的序列模式。然而,基于有限状态及的方法假设日志在正常状态下遵循严格的时间顺序,因而不能解决不稳定的序列问题。
8.总的来说,现有的根因分析技术都没有考虑到软件演化的情况,而如果不进行特殊处理,软件演化会导致根因分析技术的性能低下。


技术实现要素:

9.本发明的目的是在于解决已有的根因分析技术无法克服由解析器引起的缺陷,没有考虑到软件演化的情况,而如果不进行特殊处理,软件演化会导致根因分析技术的性能低下的技术问题。
10.为此,本发明提出一种基于日志的根因分析系统,包括:
11.多层特征提取器,用于从日志中提取多极特征,以捕捉类似日志中的高层次共性;
12.根因定位器,用于接收多层特征提取器提取的特征,以无监督的方式自动定位故障。
13.在本发明的一些实施例中,所述多层特征提取器提取的特征包括单条日志的语义表征,具体提取方式为:
14.用大型语料库对大型自然语言处理模型(large language processing model,llpm)进行训练,并采用对比学习对llpm进行微调,利用微调后的llpm提取单条日志的语义表征。
15.所述对比学习具体为,为了构建相似的日志对,通过两次应用dropout功能将一个日志送入lplm以获得两个不同的嵌入,在批训练背景下,将同一批(batch)中的其他日志被认为是不相似的对。
16.在本发明的一些实施例中,所述多层特征提取器提取的特征还包括抽象表征,具体提取方式为:建立一个基于密度的方法对所述信息表征进行层次聚类得到抽象表征。
17.在本发明的一些实施例中,所述基于密度的方法为hdbscan。
18.在本发明的一些实施例中,在层次聚类过程中,利用主成分分析降低输入表示的维度,提高算法的效率。
19.在本发明的一些实施例中,所述根因定位器包括一个局部定位器,其使用当前检测窗口的中心日志及其上下文来获取针对不稳定序列的局部特征,然后学习这种局部特征的常态,即学习系统正常无故障运行状态下的上下文常态,其中所述中心日志为当前待检测日志。
20.在本发明的一些实施例中,所述根因定位器还包括一个单位定位器,其学习单个日志的单位特征,即学习单个日志的常态,得到常态单位特征和常态上下文特征。
21.所述以无监督的方式自动定位故障具体为:
22.首先,单位定位器计算出当前检测的日志的单位特征和常态单位特征的差值,记为abnscore
uni

23.然后,局部定位器计算出当前日志的上下文特征和常态上下文特征的差值,记为abnscore
local
;两个定位器计算出的异常分数的加权和为λ
×
abnscore
uni
+(1-λ)
×
abnscore
local
,参数λ是人工定义的参数,取值为0~1;
24.如果异常分数的加权和大于人工预设的阈值d,则判定为异常,即标记当前日志为根因并输出。
25.本发明还提出一种基于日志的根因分析方法,包括如下步骤:
26.s1、语言模型微调:使用正常状态下的日志文本对已经预训练好的llpm进行微调,即只改变语言模型最下游几层网络的权值;
27.s2、常态特征提取:输入正常状态下的文本到所述特征提取器中,每条日志本身及
其上下文日志分别通过多层特征提取器,并通过对比学习提取系统在正常运行下生成的日志的特征,即常态特征,包括单位常态特征和上下文常态特征,同时训练本发明提出的模型;
28.s3、未知日志特征提取:输入待检测的日志文件,重复步骤s2,通过多层特征提取器提取当前日志特征,包括单位特征和上下文特征;
29.s4、异常分数计算:将步骤s2和步骤s3中的单位常态特征和单位特征、上下文常态特征和上下文特征分别进行比较并计算距离,再计算距离的加权和,作为待检测日志的异常分数;
30.s5、结果输出:如果步骤s4中得到的异常分数大于人工预先定义的阈值,则标记此日志为根因并输出,否则则将此日志视为正常日志,不予标记。
31.本发明具有如下有益效果:
32.(1)日志解析器有可能产生错误并误导已有根因分析器,但是本发明没有使用日志解析器,而是直接设计了多层特征提取器,借助语言模型提取日志中蕴含的语义信息,从而规避日志解析器的误导,提高辨识准确率。
33.(2)事件演化可能导致语义相似但没有出现过的事件被已有技术识别为异常事件,从而造成精准率过低。本发明不依赖于固定的事件提取,而是从事件中识别出多级语义,因而能够识别出语义相似、但表达方式略有不同的新事件,即演化事件,从而避免将正常的演化事件识别为根因,因而能够大幅提高识别精准率。
34.在本发明的的一些实施例中,软件演化或负载并行运行可能导致新的序列模式,已有的技术会将未知的序列模式直接视为根本原因,从而导致较低的识别精准率。本发明采用了一个由两个子定位器构成的根因定位器,并不假定序列模式是固定的,而是分析中心日志是否异常,并结合中心日志的上下文(即整体序列)综合分析其是否异常,从而更加准确地识别出异常序列。
附图说明
35.图1是本发明实施例的技术原理图;
36.图2是本发明实施例的流程示意图。
具体实施方式
37.下面对照附图并结合优选的实施方式对本发明作进一步说明。需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。
38.需要说明的是,本实施例中的左、右、上、下、顶、底等方位用语,仅是互为相对概念,或是以产品的正常使用状态为参考的,而不应该认为是具有限制性的。
39.现有的基于日志的根因分析技术使用有限状态机或日志事件间的因果关系构建有向图,作为参考模型。其包含以下假设:解析器是完全准确的、日志事件是固定不变的、正常状态下的日志序列是稳定的。
40.在软件演化的背景下,日志演化对现有技术提出了三大挑战,包括解析器错误、事件演化和不稳定的日志序列。本发明实施例采用了多级语义提取器和联合训练的定位器,借助语义模型和对比学习技术,克服了以上三大挑战。
41.本发明下述实施例提出了一种基于日志的根因分析系统,本发明实施例的技术原理如图1所示,以应对软件进化带来的新的根因分析挑战。本发明实施例由两部分组成,即一个多层特征提取器以获得多级健壮的日志表征,和一个根因定位器,用注意力机制来识别根源。其中,多层特征提取器的目标是提取尽可能丰富的表征和抽象的表征,以捕捉类似日志中的高层次共性。然后,这些特征被送入根因定位器,以无监督的方式自动定位故障。
42.一、多层特征提取器
43.为了从语义上理解日志,本发明实施例从日志中提取多级特征,这些特征包含了日志信息中的各种相关信息。多层次的语义包括丰富的单条日志的语义表征和抽象的表征。低层次特征提供了对某一特定日志的具体理解。相比之下,高层次的抽象特征抓住了具有类似语义的日志的共性,而不考虑表现形式上的不太明显和轻微的差异。
44.给定一个日志文件x,丰富的语义表示x
rich
被设计为尽可能丰富地捕捉其语义。为了从日志中获得与语义有关的信息表征,本发明实施例通过对比性学习对一个大型的预训练语言模型(large pre-trained language model,lplm)进行了微调。这种设计的原理如下:lplm在软件工程领域的许多任务中显示了强大的语义编码能力,如基于日志的异常检测和代码理解。为了克服潜在的解析错误,并对日志信息内部的信息进行最佳利用,本发明实施例通过大型语言模型学习特定领域的语义表示。一方面,系统日志与自然语言共享一些基本知识,因为日志语句是由程序员撰写而成的。在对大型语料库进行训练后,lplms学习了更多的词义信息,而不仅限于系统日志。有了这些共享的知识,返回的嵌入就比其他浅层模型对日志信息有了更好的理解。另一方面,由于知识差距,这些lplms对于特定领域的任务是不够的。因此,本发明实施例采用对比学习对llpm进行微调,以进一步捕捉特定领域的语义。
45.所采用的对比学习是一种无监督的表征学习方法,目的是将相似的日志对拉到嵌入空间中相互靠近,而不相似的日志对则保持较远的距离。我们通过一个简单而有效的规则来构建相似的日志对和不相似的日志对。具体来说,为了构建相似的日志对,我们通过两次应用dropout功能(即从神经网络中随机丢弃一定比例的神经元)将一个日志送入lplm,以获得两个不同的嵌入。然后,同一小批中的其他日志被认为是不相似的对。这一步利用了dropout功能。由于一个日志通过网络两次,不同的神经元被激活,由此产生的两个嵌入产生轻微的差异,而来自不同日志的嵌入则有很大差异。在微调阶段,我们要求模型在所有不相似的对中预测相似的那个。这样一来,丰富的提取器就能更好地对齐具有相似语义的日志信息对,而将语义不一致的信息对推开。这个无解析器的特征提取器接受日志消息而非日志事件,使它能够摆脱解析器引入的潜在错误。
46.除了丰富的表征之外,本发明实施例还致力于提取代表日志信息共性的高层次特征,并在软件演进过程中保持其稳定性,即给定一个日志文件x,本发明实施例还借用抽象的语义表示x
abs
。为此,本发明实施例建立了一个基于密度的方法来进行层次聚类,以聚类类似的日志信息,并采用集群中心点特征作为原型来表示属于这个集群的日志信息。与其他聚类方法相比,基于密度的聚类在本发明实施例的应用场景中具有特殊的优势。它可以自动提取“密集”聚类,而无需预先指定聚类的数量。本发明实施例采用了一种最先进的聚类方法的思路,即基于密度的有噪声的应用空间层次聚类(hierarchical density-based spatial clustering of applications with noise,hdbscan)。hdbscan包含三个步骤。它
首先将嵌入空间转换为距离加权图的最小生成树。然后,它将该树转换为连接组件的层次结构。最后,它将层次结构浓缩为更简单的树并提取稳定的集群。考虑到大的输入维度会降低聚类的速度,本发明实施例还利用主成分分析来降低输入表示的维度,以提高算法的效率。最终,每个日志信息x
abs
的抽象表示是其对应群组的中心点,它是通过对属于该群组的所有点进行平均计算得出的。
47.二、根因定位器
48.根因定位器的基本想法是开发一个神经网络,在特征空间中学习一个特定的超几何图形,其中正常特征尽可能地保持接近,被描述为“常态”。远离常态的日志被认为是异常的。通过这种方式,具有不断变化的事件的日志可以被转化为接近以前语义相似的日志的嵌入,而对结果没有不利影响。例如,如果一个正常的日志在软件演化过程中被解析,具有类似语义的演化日志将被映射到常态里面。这种新方法有两个优点:1)由于神经网络成熟的学习能力,它比其他传统方法有更好的表现。2)它可以将人类从劳动密集型标签中解放出来,因为它可以以无监督的方式从大规模的正常日志中自然地学习正常性,这些日志可以很容易地从稳定的软件中收集。
49.具体来说,根因定位器训练目标是构建一个模型,同时使包围正常数据的网络表征的超球体积最小。通过这种方式,模型被迫挖掘隐性语义,因为它必须将具有类似语义的数据点紧密映射到超球的中心。因此,引入的具有类似语义的日志也可以被嵌入到靠近中心的位置。
50.本发明实施例的根因定位器包含一个由两层前馈神经网络构成的一个单位定位器来学习单个日志的单位特征ф
uni
,以及一个局部定位器使用中心日志及其上下文来获取针对不稳定序列的局部特征ф
local
,然后学习这种局部特征的常态,其特征保存在可学习的神经元矩阵w中。单位定位器学习单个日志的常态,而局部定位器学习运行状态下的上下文常态。采用联合训练方法同时训练这两个子定位器,总体损失被定义为两个子定位器损失的加权平均值。
51.最终,定位器可以给出一条日志是否是“正常”的,并将由全部异常日志组成的子序列作为根因输出。判断依据为:
52.首先,单位定位器计算出当前检测的日志的单位特征和常态单位特征的差值,记为abnscore
uni

53.然后,局部定位器计算出当前日志的上下文特征和常态上下文特征的差值,记为abnscore
loca
l;两个定位器计算出的异常分数的加权和为λ
×
abnscore
uni
+(1-λ)
×
abnscore
local
,参数λ是人工定义的参数,取值为0~1。
54.如果异常分数的加权和大于人工预设的阈值d,则判定为异常,即当前日志可视为根因之一。
55.具体发明实施流程图请参考图2。
56.给定一个日志文件;
57.首先通过本发明实施例的多层特征提取器对文件中的每条日志提取单位具体表征;
58.训练模式下根据根因定位器的回传梯度进行单位表征学习;
59.检测模式下输入到根因定位器中进行判定,根因定位器首先判断单条日志为根因
的概率。
60.与此同时,将文件中的单位具体表征通过hdbscan进行层次聚类,得到上下文的抽象表征。
61.类似的,训练模式下根据根因定位器的回传梯度进行上下文表征学习。
62.检测模式下输入到根因定位器中进行判定,即根因定位器同时判断当前检测日志在该上下文环境下为根因的概率。
63.将二者得到的概率进行加权求和,综合判断该条日志是否为根因。
64.对日志文件中的每条日志重复以上步骤,即可从该文件中抽取出根因集合,输出为结果。
65.本发明实施例可以准确迅速地从大量日志中细粒度地辨识出异常日志,并给出异常的根本原因。相较于已有技术,本发明实施例能够解决软件演化背景下的三个根因分析挑战,具体如下:
66.日志解析器有可能产生错误并误导已有根因分析器,但是本发明实施例没有使用日志解析器,而是直接设计了多层特征提取器,借助语言模型提取日志中蕴含的语义信息,从而规避日志解析器的误导,提高辨识准确率。
67.事件演化可能导致语义相似但没有出现过的事件被已有技术识别为异常事件,从而造成精准率过低。本发明实施例不依赖于固定的事件提取,而是从事件中识别出多级语义,因而能够识别出语义相似、但表达方式略有不同的新事件,即演化事件,从而避免将正常的演化事件识别为根因,因而能够大幅提高识别精准率。
68.软件演化或负载并行运行可能导致新的序列模式,已有的技术会将未知的序列模式直接视为根本原因,从而导致较低的识别精准率。本发明实施例采用了一个由两个子定位器构成的根因定位器,并不假定序列模式是固定的,而是分析中心日志是否异常,并结合中心日志的上下文(即整体序列)综合分析其是否异常,从而更加准确地识别出异常序列。
69.综合以上三点,本发明实施例相较以往的背景技术,采用了考虑日志演化的语义提取设计和联合训练的定位器,因而能够在软件演化背景下更加准确地、有效地识别出异常的根本原因。
70.为进一步展示本发明实施例在跨版本软件中的根因识别准确率,以spark系统产生的日志为例进行实验,得到结果如下:
71.表1本发明实施例与以往方法用于根因检测的实验结果
[0072][0073]
上表中的intra-version表示训练数据和测试数据均来自同一版本spark软件的日志,inter-version表示训练数据和测试数据来自不同版本的spark日志。箭头左端为训练数据的版本,箭头右端为测试数据的版本。precision、recall、f1是三个用来衡量分类准确度的指标,指标越高说明方法的效果越好,其计算方式为:precision=tp/(tp+fp),recall=tp/(tp+fn),f1=2*precision*recall/(precision+recall),其中tp表示正确检
测出的根因数量,fp表示常态日志被错误地标记为根因的数量,fn表示未被识别出的根因日志数量。
[0074]
由上表结果可知,在考虑软件演化的背景下,本发明实施例提出的方法相较于以往相似技术有极大的效果提升。
[0075]
本发明实施例还提供一种融合多层次特征的日志根因分析方法,包括下述步骤:
[0076]
s1、语言模型微调:使用正常状态下的日志文本对已经预训练好的自然语言模型进行微调,即只改变语言模型最下游几层网络的权值。
[0077]
s2、常态特征提取:输入正常状态下的文本到本发明实施例中,每条日志本身及其上下文日志分别通过多层特征提取器,并通过对比学习的方法提取常态特征,包括单位常态特征和上下文常态特征,同时训练本发明实施例提出的网络。
[0078]
s3、未知日志特征提取:输入待检测的日志文件,类似步骤s2,通过多层特征提取器提取当前日志特征,包括单位特征和上下文特征。
[0079]
s4、异常分数计算:将步骤s2和步骤s3中的常态和未知状态的单位特征和上下文特征分别进行比较并计算距离,再计算距离的加权和,作为待检测日志的异常分数。
[0080]
s5、结果输出:如果步骤s4中得到的异常分数大于人工预先定义的阈值,则标记此日志为根因并输出,否则则将此日志视为正常日志,不予标记。
[0081]
以spark日志为例,使用第2版本的spark常态日志进行训练,使用第3版本的包含故障状态的日志进行测试,spark日志在第2版本软件中的表现形式为spark2:started reading broadcast variable《*》,在第3版本软件中的表现形式为spark3:started reading broadcast variable《*》with《*》pieces(estimated total size《*》mib),本发明实施例提出的方法能够准确识别出两个版本不同表达形式的日志本质上在表达同一种信息,因而不会将第3版本的日志错误地判定为根因。
[0082]
本发明实施例的定位器采用了两个子定位器联合训练的架构,但是在实际开发中,出于成本的考量,可能可以只采用一个定位器,即局部定位器。由于没有重点考虑单个正常日志的常态或异常态,可能导致准确率降低,但是仍允许模型学习不稳定的序列的特征,因此优于以往的、假定序列不变的根因识别技术。
[0083]
本发明实施例使用了对比学习中一种简单的技术(即使用dropout对同一条日志语句生成相似但不同的表征),但是可以采用其他对比学习技术生成更复杂的表征。尽管采用更复杂的技术会加大实际应用中的时间成本和技术实施成本,但是可能可以得到更准确的表征。
[0084]
本发明实施例的方案中有如下要点:
[0085]
使用聚类方法在丰富语义的基础上提取日志的抽象语义,从而将语义相似但表达方式略有不同的日志语句映射到同一个表征中。
[0086]
联合训练两个子定位器来进行根因识别,其中一个定位器识别单条日志,另一个定位器考虑上下文识别日志序列。
[0087]
本发明实施例考虑到了软件演化对根因识别技术的负面影响,并通过提取日志语义来克服这种影响。
[0088]
本发明实施例考虑到已知解决方案的假设与实际情况不符,因为软件演化会带来日志演化,从而带来三大挑战(即解析器错误、日志事件演化和不稳定的日志序列),有悖于
已有方案的假设,并将降低已有方案的准确率。本发明实施例摒弃了已有方案的不现实的假设,通过提取多级日志语义信息来识别语义相似但表达形式略有不同的演化日志,并避免了使用解析器带来的错误,同时并不假定日志上下文是固定的,而是综合分析上下文顺序和单条日志本身是否异常,来进行更准确的判别。
[0089]
尽管本发明实施例主要应用于分布式软件系统,但是其他软件系统如嵌入式软件系统也可以使用本发明实施例进行异常的根因分析。
[0090]
本发明实施例基于对比学习技术的兴起和大规模预训练语言模型的实现。以往的方案提出时,这些自然语言处理界前沿技术还没有被迁移到软件工程界。
[0091]
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1