日志分析方法、装置、电子设备和存储介质与流程

文档序号:32655340发布日期:2022-12-23 21:22阅读:49来源:国知局
日志分析方法、装置、电子设备和存储介质与流程

1.本发明涉及日志管理技术领域,特别涉及一种日志分析方法、一种日志分析装置、一种电子设备和一种计算机可读存储介质。


背景技术:

2.日志的主要作用是记录程序运行的过程,通过日志方便观察程序的运行状况和运行过程,便于分析程序的执行过程。
3.目前,通信运营商内部使用的数据应用平台越来越多,也越来越复杂,生成的日志是海量的。当发生故障时,人工需要从海量日志中定位异常的成本非常高,其主要原因有:一方面,日志格式繁多,难以依靠人工划分,而传统的日志规则分类需要配置复杂的规则和正则,难以通用化;另一方面,日志量级大,报警多,难以定位需要关注的异常,一些无关日志容易掩盖真正的问题所在。


技术实现要素:

4.鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的日志分析方法。
5.本发明实施例还提供了一种日志分析装置、电子设备和存储介质,以保证上述方法的实施。
6.为了解决上述问题,本发明实施例公开了一种日志分析方法,所述方法包括:
7.获取多个日志,并确定各个日志对应的长度和标签;
8.根据所述各个日志对应的长度和标签,对所述多个日志进行分类;
9.根据同一类型的日志生成日志模板;
10.对所述日志模板进行检测;
11.若所述日志模板检测为异常,则进行异常告警。
12.可选地,所述确定各个日志对应的长度和标签,包括:
13.针对各个日志,按照分隔符/空格将所述日志划分为多个标签;所述各个日志对应多个标签;
14.根据所述各个日志对应的多个标签,确定所述各个日志对应的长度。
15.可选地,所述根据所述各个日志对应的长度和标签,对所述多个日志进行分类,包括:
16.分别将所述多个日志输入至预设的前缀树;所述前缀树包括长度节点、与所述长度节点连接的标签节点;
17.将所述各个日志分类至与所述对应的长度相匹配的目标长度节点;
18.将所述各个日志分类至与所述对应的标签相匹配的目标标签节点。
19.可选地,所述各个日志对应的标签包括多个;所述目标长度节点连接至少一个标签节点;所述将所述各个日志分类至与所述对应的标签相匹配的目标标签节点,包括:
20.针对分类至所述目标长度节点的各个日志,确定所述各个日志对应的标签顺序;
21.按照所述对应的标签顺序,将所述各个日志对应的各个标签依次与所述至少一个标签节点进行匹配;
22.当匹配到与其中一个标签相同的目标标签节点时,将所述其中一个标签所对应的日志分类至所述目标标签节点。
23.可选地,所述各个日志具有对应的日志编号;所述目标标签节点链接有日志组列表,所述日志组列表包括多个日志组,所述日志组包括日志事件和日志编号集合;
24.所述根据同一类型的日志生成日志模板,包括:
25.将分类至同一目标标签节点的日志确定为同一类型的日志;
26.针对同一类型的各个日志,计算所述各个日志与各个日志组的日志事件之间的相似度,得到多个相似度值;所述各个日志对应多个相似度值;
27.从所述各个日志对应的多个相似度值中,确定所述各个日志对应的最大相似度值;
28.若所述最大相似度值大于或等于第一阈值,则确定所述最大相似度值所对应的日志匹配到日志组;
29.将所述匹配到日志组的日志确定为第一类日志;
30.将各个第一类日志对应的日志编号添加至所匹配到的日志组中的日志编号集合,得到日志模板。
31.可选地,在所述从所述各个日志对应的多个相似度值中,确定所述各个日志对应的最大相似度值之后,还包括:
32.若所述最大相似度值小于第一阈值,则确定所述最大相似度值所对应的日志未匹配到日志组;
33.将所述未匹配到日志组的日志确定为第二类日志;
34.分别在所述第二类日志对应的日志组列表中创建新的日志组;
35.将各个第二类日志添加至对应新的日志组中的日志事件,以及将各个第二类日志对应的日志编号添加至所述对应新的日志组中的日志编号集合,得到日志模板。
36.可选地,在所述对所述日志模板进行检测之前,还包括:
37.获取所有日志模板;
38.依次匹配两两日志模板之间的最长公共子序列;
39.若所述最长公共子序列大于或等于第二阈值,则将所述最长公共子序列所对应的两两日志模板进行合并,直至末尾的两两日志模板完成最长公共子序列的匹配,得到更新后的日志模板。
40.可选地,所述对所述日志模板进行检测,包括:
41.获取所有更新后的日志模板以及对应日志量的日志数据;
42.将所述所有更新后的日志模板所对应日志量的日志数据,基于卡方分布进行聚合,得到聚合后的日志数据;
43.对所述聚合后的日志数据进行检测;
44.若所述聚合后的日志数据检测为异常,则针对各个更新后的日志模板,分别对对应日志量的日志数据进行检测,以确定是否存在有异常的日志模板。
45.可选地,所述若所述日志模板检测为异常,则进行异常告警,包括:
46.若存在有异常的日志模板,则采用所述异常的日志模板进行异常告警。
47.本发明实施例还公开了一种日志分析装置,所述装置包括:
48.日志获取模块,用于获取多个日志,并确定各个日志对应的长度和标签;
49.日志分类模块,用于根据所述各个日志对应的长度和标签,对所述多个日志进行分类;
50.日志模板生成模块,用于根据同一类型的日志生成日志模板;
51.日志模板检测模块,用于对所述日志模板进行检测;
52.异常告警模块,用于若所述日志模板检测为异常,则进行异常告警。
53.可选地,所述日志获取模块包括:
54.标签划分子模块,用于针对各个日志,按照分隔符/空格将所述日志划分为多个标签;所述各个日志对应多个标签;
55.长度确定子模块,用于根据所述各个日志对应的多个标签,确定所述各个日志对应的长度。
56.可选地,所述日志分类模块包括:
57.日志输入子模块,用于分别将所述多个日志输入至预设的前缀树;所述前缀树包括长度节点、与所述长度节点连接的标签节点;
58.第一分类子模块,用于将所述各个日志分类至与所述对应的长度相匹配的目标长度节点;
59.第二分类子模块,用于将所述各个日志分类至与所述对应的标签相匹配的目标标签节点。
60.可选地,所述各个日志对应的标签包括多个;所述目标长度节点连接至少一个标签节点;所述第二分类子模块包括:
61.标签顺序确定单元,用于针对分类至所述目标长度节点的各个日志,确定所述各个日志对应的标签顺序;
62.标签匹配单元,用于按照所述对应的标签顺序,将所述各个日志对应的各个标签依次与所述至少一个标签节点进行匹配;
63.日志分类单元,用于当匹配到与其中一个标签相同的目标标签节点时,将所述其中一个标签所对应的日志分类至所述目标标签节点。
64.可选地,所述各个日志具有对应的日志编号;所述目标标签节点链接有日志组列表,所述日志组列表包括多个日志组,所述日志组包括日志事件和日志编号集合;
65.所述日志模板生成模块包括:
66.日志类型确定子模块,用于将分类至同一目标标签节点的日志确定为同一类型的日志;
67.相似度计算子模块,用于针对同一类型的各个日志,计算所述各个日志与各个日志组的日志事件之间的相似度,得到多个相似度值;所述各个日志对应多个相似度值;
68.最大相似度值确定子模块,用于从所述各个日志对应的多个相似度值中,确定所述各个日志对应的最大相似度值;
69.第一日志组确定子模块,用于若所述最大相似度值大于或等于第一阈值,则确定
所述最大相似度值所对应的日志匹配到日志组;
70.第一类日志确定子模块,用于将所述匹配到日志组的日志确定为第一类日志;
71.第一添加子模块,用于将各个第一类日志对应的日志编号添加至所匹配到的日志组中的日志编号集合,得到日志模板。
72.可选地,所述日志模板生成模块还包括:
73.第二日志组确定子模块,用于若所述最大相似度值小于第一阈值,则确定所述最大相似度值所对应的日志未匹配到日志组;
74.第二类日志确定子模块,用于将所述未匹配到日志组的日志确定为第二类日志;
75.创建子模块,用于分别在所述第二类日志对应的日志组列表中创建新的日志组;
76.第一添加子模块,用于将各个第二类日志添加至对应新的日志组中的日志事件,以及将各个第二类日志对应的日志编号添加至所述对应新的日志组中的日志编号集合,得到日志模板。
77.可选地,在所述对所述日志模板进行检测之前,还包括:
78.日志模板获取模块,用于获取所有日志模板;
79.最长公共子序列匹配模块,用于依次匹配两两日志模板之间的最长公共子序列;
80.日志模板更新模块,用于若所述最长公共子序列大于或等于第二阈值,则将所述最长公共子序列所对应的两两日志模板进行合并,直至末尾的两两日志模板完成最长公共子序列的匹配,得到更新后的日志模板。
81.可选地,所述日志模板检测模块包括:
82.日志数据获取子模块,用于获取所有更新后的日志模板以及对应日志量的日志数据;
83.日志数据聚合子模块,用于将所述所有更新后的日志模板所对应日志量的日志数据,基于卡方分布进行聚合,得到聚合后的日志数据;
84.第一检测子模块,用于对所述聚合后的日志数据进行检测;
85.第二检测子模块,用于若所述聚合后的日志数据检测为异常,则针对各个更新后的日志模板,分别对对应日志量的日志数据进行检测,以确定是否存在有异常的日志模板。
86.可选地,所述异常告警模块包括:
87.异常告警子模块,用于若存在有异常的日志模板,则采用所述异常的日志模板进行异常告警。
88.本发明实施例还公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
89.所述存储器,用于存放计算机程序;
90.所述处理器,用于执行存储器上所存放的程序时,实现如本发明实施例所述的方法。
91.本发明实施例还公开了一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如本发明实施例所述的方法。
92.与现有技术相比,本发明实施例包括以下优点:
93.在本发明实施例中,先获取多个日志,并确定各个日志对应的长度和标签,然后根
据各个日志对应的长度和标签,对多个日志进行分类,接着根据同一类型的日志生成日志模板,从而对日志模板进行检测,若日志模板检测为异常,则进行异常告警。本发明实施例根据日志长度和日志标签确定相似性,根据相似性对日志进行分类,并根据同一类型的日志生成日志模板,从而有效避免相似日志的无效查看,大幅节省排查时间,并且可以通过对日志模板进行检测来发现潜在的异常,帮助程序快速定位异常,从而提高日志分析效率,提升平台数字化能力。
附图说明
94.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
95.图1是本发明实施例提供的一种日志分析方法的步骤流程图;
96.图2是本发明实施例提供的日志分析系统与机器的连接示意图;
97.图3是本发明实施例提供的前缀树的结构示意图;
98.图4是本发明实施例提供的基于lcs的二次分类的流程图;
99.图5是本发明实施例提供的基于卡方分布进行聚合的流程图;
100.图6是本发明实施例提供的一种日志分析装置的结构框图。
具体实施方式
101.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
102.参照图1,示出了本发明实施例提供的一种日志分析方法的步骤流程图,该方法具体可以包括如下步骤:
103.步骤101,获取多个日志,并确定各个日志对应的长度和标签。
104.在本发明实施例中,可以应用于日志分析系统,日志分析系统可以与多台机器通信连接。在实际应用中,当检测到有机器发生故障时,日志分析系统可以按照机器维度依次获取每台机器的多个日志,分别针对每台机器的多个日志进行分析,以排查出发生故障的机器,从而针对发生故障的机器进行异常报警。
105.参照图2,示出了本发明实施例提供的日志分析系统与机器的连接示意图,日志分析系统分别与机器1~机器n通信连接,其中,n为正整数,当检测到有机器发生故障时,日志分析系统从机器1中获取多个日志,然后针对机器1的多个日志进行分析,如果分析出机器1是正常的,那么日志分析系统从机器2中获取多个日志并进行分析,以此类推,直至分析出某台机器是异常的,将有异常的机器确定为发生故障的机器,从而针对发生故障的机器进行异常报警。
106.如图2所示,在获取到某一台机器的多个日志后,日志分析系统首先对该机器的多个日志进行预处理,通过预处理可以确定出该机器的各个日志所对应的长度和标签。其中,
标签可以是token,token在计算机身份认证中具有令牌的含义。
107.本发明的一个可选实施例中,步骤101可以包括以下子步骤:
108.子步骤s11,针对各个日志,按照分隔符/空格将所述日志划分为多个标签;所述各个日志对应多个标签;
109.子步骤s12,根据所述各个日志对应的多个标签,确定所述各个日志对应的长度。
110.在具体实现中,日志通常包含字符串/字符/数字/base64编码/地址编码等内容,这些内容之间会有分隔符/空格隔开,日志分析系统可以以分隔符/空格为单位,将每个日志切分为一个个的标签,从而得到多个标签。其中,每个日志可以对应多个标签。示例性地,假设日志a为[receive from node 4],那么可以按照分隔符/空格将日志a划分为多个标签,得到标签为[receive]、[from]、[node]、[4]。
[0111]
在划分得到多个标签后,可以根据每个日志对应的多个标签,确定每个日志对应的长度。具体地,可以根据每个日志划分得到的标签数量,确定每个日志对应的长度。示例性地,假设日志a为[receive from node 4],那么划分得到4个标签,从而确定日志a的长度为4。
[0112]
此外,traceback(回溯)日志与普通日志不一样。对于普通日志,可以以分隔符/空格为单位来划分标签,但是traceback日志是一个trace的结构,无法用分隔符/空格来划分标签。traceback日志按行查看较合适,因此,本发明实施例可以把每一行traceback日志作为一个标签,这样可以把trace类似的错误聚到一起,方便查找问题。
[0113]
步骤102,根据所述各个日志对应的长度和标签,对所述多个日志进行分类。
[0114]
随着业务经验的累积,为了提高日志分类的准确性,本发明实施例采用两级模型对日志进行流式分类。其中一次分类相当于是预分类,然后把预分类结果再进行二次分类,目的是将预分类没有分好的日志进行融合,形成最终满足预期的分类结果。
[0115]
其中,一次分类使用的是一种改进的前缀树,前缀树的树深是预先设定的,一般会预设得比较小,所以匹配的速度会非常快。在基于前缀树的一次分类中,可以采用每个日志对应的长度和标签,对多个日志进行分类,从而得到预分类结果。
[0116]
本发明的一个可选实施例中,步骤102可以包括以下子步骤:
[0117]
子步骤s21,分别将所述多个日志输入至预设的前缀树;所述前缀树包括长度节点、与所述长度节点连接的标签节点;
[0118]
子步骤s22,将所述各个日志分类至与所述对应的长度相匹配的目标长度节点;
[0119]
子步骤s23,将所述各个日志分类至与所述对应的标签相匹配的目标标签节点。
[0120]
参照图3,示出了本发明实施例提供的前缀树的结构示意图,前缀树可以包括root node(根节点)、internal node(内部节点)、leaf node(叶子结点),其中,内部节点可以包括长度节点和标签节点。
[0121]
在确定出每个日志对应的长度和标签后,可以将每个日志依次输入至预设的前缀树。在前缀树中,每个长度节点对应一个长度,每个长度节点连接有至少一个标签节点,每个标签节点对应一个标签。日志进入到前缀树,从根节点开始,第二层为长度层,同样长度的日志进到同一个长度节点,接下来的节点是根据标签进行判别,只有匹配了同样标签的日志,才往对应的标签节点进行分类。
[0122]
在一种示例中,假设日志a为[receive from node 4],如图3所示,根据日志a的长
度是4,可以确定与日志a的长度相匹配的目标长度节点为“length:4”,那么可以将日志a分类到目标长度节点“length:4”,然后根据日志a的标签{[receive]、[from]、[node]、[4]},可以确定与日志a的标签相匹配的目标标签节点为“receive”,那么可以将日志a分类到目标标签节点“receive”。所述示例仅用于使本领域技术人员更好理解本发明实施例,本发明对此不作出限定。
[0123]
本发明的一个可选实施例中,所述各个日志对应的标签包括多个;所述目标长度节点连接至少一个标签节点;子步骤s23可以包括以下子步骤:
[0124]
子步骤s231,针对分类至所述目标长度节点的各个日志,确定所述各个日志对应的标签顺序;
[0125]
子步骤s232,按照所述对应的标签顺序,将所述各个日志对应的各个标签依次与所述至少一个标签节点进行匹配;
[0126]
子步骤s233,当匹配到与其中一个标签相同的目标标签节点时,将所述其中一个标签所对应的日志分类至所述目标标签节点。
[0127]
每个日志所划分得到的标签可以包括多个,因此,针对分类至目标长度节点的每个日志,可以确定每个日志对应的标签顺序。目标长度节点连接至少一个标签节点,因此,可以按照每个日志所对应的标签顺序,将每个日志所对应的各个标签依次与至少一个标签节点进行匹配,当某一日志匹配到与其中一个标签相同的目标标签节点时,停止该日志的标签匹配,然后将该日志分类到目标标签节点。
[0128]
在一种示例中,假设日志a为[receive from node 4],如图3所示,日志a分类到目标长度节点“length:4”,而目标长度节点“length:4”连接有两个标签节点,分别是“send”、“receive”,且日志a划分得到的标签包括4个,分别是[receive]、[from]、[node]、[4],因此,针对分类至目标长度节点“length:4”的日志a,可以先确定日志a的标签顺序。确定出日志a的标签顺序为[receive]

[from]

[node]

[4],然后按照该标签顺序,将日志a的各个标签依次与“send”、“receive”进行匹配,当匹配到与其中一个标签相同的目标标签节点时,将日志a分类到该目标标签节点。具体地,先将日志a的第一个标签[receive]与第一个标签节点“send”进行匹配,如果匹配得到失败结果,那么再与第二个标签节点“receive”进行匹配,如果匹配得到成功结果,那么可以停止日志a的标签匹配,然后将日志a分类到目标标签节点为“receive”。所述示例仅用于使本领域技术人员更好理解本发明实施例,本发明对此不作出限定。
[0129]
步骤103,根据同一类型的日志生成日志模板。
[0130]
在对多个日志进行分类后,可以得到不同类型的日志,从而日志分析系统可以根据同一类型的日志生成日志模板。
[0131]
本发明的一个可选实施例中,所述各个日志具有对应的日志编号;所述目标标签节点链接有日志组列表,所述日志组列表包括多个日志组,所述日志组包括日志事件和日志编号集合;步骤103可以包括以下子步骤:
[0132]
子步骤s31,将分类至同一目标标签节点的日志确定为同一类型的日志;
[0133]
子步骤s32,针对同一类型的各个日志,计算所述各个日志与各个日志组的日志事件之间的相似度,得到多个相似度值;所述各个日志对应多个相似度值;
[0134]
子步骤s33,从所述各个日志对应的多个相似度值中,确定所述各个日志对应的最
大相似度值;
[0135]
子步骤s34,若所述最大相似度值大于或等于第一阈值,则确定所述最大相似度值所对应的日志匹配到日志组;
[0136]
子步骤s35,将所述匹配到日志组的日志确定为第一类日志;
[0137]
子步骤s36,将各个第一类日志对应的日志编号添加至所匹配到的日志组中的日志编号集合,得到日志模板。
[0138]
本发明实施例根据每个日志对应的长度和标签,将每个日志分类到相应的长度节点、相应的标签节点之后,可以将分类至同一目标标签节点的日志确定为同一类型的日志。而对于同一类型的日志,需要进一步细化分类。
[0139]
如图3所示,目标标签节点“receive”链接有日志组列表(alist of log groups),日志组列表位于叶子节点(leaf node)中。日志组列表包含有多个日志组(log group),日志组包含有日志事件(log event)和日志编号集合(log ids)。
[0140]
其中,日志事件可以是预先设定的,本发明实施例可以将数字、base64编码和地址编码等变量提前填充为《*》,保留常量,这样可以极大地提升了日志模板的收敛速度,原本需要较长周期(如一周)才能稳定并可用的日志模板,现在接入后立即可用。
[0141]
在具体实现中,针对同一类型的每个日志,可以计算每个日志与每个日志组的日志事件之间的相似度simseq,得到多个相似度值。其中,每个日志可以对应多个相似度值。然后从每个日志所对应的多个相似度值中,确定出每个日志所对应的最大相似度值。由于相似度值是日志与日志组之间的相似度,所以如果某一日志的最大相似度值大于或等于第一阈值st,那么可以确定该日志匹配到合适的日志组,也即是,该日志已匹配到满足相似度要求的日志组。为了便于描述,可以将匹配到日志组的日志确定为第一类日志,然后可以将每个第一类日志对应的日志编号添加到所匹配到的日志组中的日志编号集合,从而可以得到日志模板。
[0142]
此外,如果直接计算日志与日志组的日志事件之间的相似度,需要较长时间才可以完成日志模板的收敛,且收敛后的日志模板与输入的顺序有很大的关系,无法获得一个鲁棒的结果。因此,本发明实施例在计算相似度之前,可以提前识别出日志的变量,提前将变量填充为《*》,保留常量,也即是,在日志包含的多个标签中,将与日志组的日志事件存在差异部分的标签用《*》替换,而存在相同部分的标签则保留,这样可以极大地提升日志模板的收敛速度,也可以获得更加鲁棒的日志模板。
[0143]
本发明的一个可选实施例中,在子步骤s33之后,还可以包括以下子步骤:
[0144]
子步骤s41,若所述最大相似度值小于第一阈值,则确定所述最大相似度值所对应的日志未匹配到日志组;
[0145]
子步骤s42,将所述未匹配到日志组的日志确定为第二类日志;
[0146]
子步骤s43,分别在所述第二类日志对应的日志组列表中创建新的日志组;
[0147]
子步骤s44,将各个第二类日志添加至对应新的日志组中的日志事件,以及将各个第二类日志对应的日志编号添加至所述对应新的日志组中的日志编号集合,得到日志模板。
[0148]
在确定每个日志对应的最大相似度值后,由于相似度值是日志与日志组之间的相似度,所以如果某一日志的最大相似度值小于第一阈值st,那么可以确定该日志没有匹配
到合适的日志组,也即是,该日志没有匹配到满足相似度要求的日志组。为了便于描述,可以将未匹配到日志组的日志确定为第二类日志,然后可以在第二类日志对应的日志组列表中创建新的日志组,然后再将每个第二类日志添加至其对应新的日志组中的日志事件,以及可以将每个第二类日志对应的日志编号添加至其对应新的日志组中的日志编号集合。也即是,新的日志组中的日志事件正是该第二类日志,新的日志组中的日志编号集合仅包含该第二类日志所对应的日志编号,从而使用新的日志组更新前缀树,得到日志模板。
[0149]
需要说明的是,子步骤s34~s36与子步骤s41~s44属于并列关系。
[0150]
此外,某些情况下,当出现新的日志组时,希望对新的日志组进行告警。但是当日志分类结果尚未稳定时,会经常出现新的日志组,有可能产生很多误报。因此,本发明实施例设计了自适应对新的日志组报警,比如当一天内出现新的日志组超过一定阈值时,对新的日志组报警以进行抑制。
[0151]
具体地,周期性异常是指昨天或者上周出现过的同样的异常,此类报警属于周期性误报。此时,昨天或者上周对应时间点的异常分数也会较高,可以利用这个历史分数对当前分数进行抑制,达到消除周期性误报的效果。但是,出现异常的时间点可能会有一定的偏移,因此需要对昨天和上周一定时间窗口内的分数进行中心rolling_max操作,再使用当前异常分数减去昨天或者上周较大的那个分数,从而可以得到抑制后的分数。
[0152]
本发明的一个可选实施例中,在步骤104之前,还可以包括以下步骤:
[0153]
获取所有日志模板;依次匹配两两日志模板之间的最长公共子序列;若所述最长公共子序列大于或等于第二阈值,则将所述最长公共子序列所对应的两两日志模板进行合并,直至末尾的两两日志模板完成最长公共子序列的匹配,得到更新后的日志模板。
[0154]
如图2所示,在基于前缀树的一次分类得到日志模板之后,且在对日志模板进行日志异常检测之前,本发明实施例可以进一步对所得到的的日志模板进行基于lcs(longest common sequence,最长公共子序列)的二次分类,其主要原因为:一次分类的第二层会有一个长度匹配,那么不同长度的日志必然不会被分到同一类型,而且一次分类是根据标签顺序一个个匹配的,计算相似度也是顺序计算的,两个很像的日志,如果仅中间某些token(标签)划分不能对齐,就会导致无法分到同一类型。
[0155]
为了克服上述问题,本发明实施例引入了基于最长公共子序列的匹配算法,将一次分类所获得的日志模板进行二次合并,获得聚类效果更佳的日志模板。同时,由于最长公共子序列的时间复杂度较高,因此设计了前缀树、简单循环等两种前置预匹配方法,可以减少部分lcs的匹配,提升算法整体的效率。其中,简单循环是指再次执行基于前缀树的一次分类。
[0156]
在本发明实施例中,基于lcs的二次分类是通过获取基于前缀树的一次分类所得到的所有日志模板,然后依次匹配两两日志模板之间的lcs,如果lcs大于或等于第二阈值,那么可以将lcs所对应的两两日志模板进行合并,直至末尾的两两日志模板完成lcs的匹配,从而可以得到更新后的日志模板。
[0157]
在具体实现中,首先定义一个日志对象lcsobject,日志对象lcsobject包括日志键lcsseq和行数列表lineids,另外还定义一个日志对象列表lcsmap,其用于保存每个日志对象lcsobject。定义好后,输入日志模板,按行读取,每读取一行,就遍历日志对象列表lcsmap,在日志对象列表lcsmap中查看是否存在日志对象lcsobject拥有和其一样的日志
键lcsseq。如果存在这样的日志对象lcsobject,则将这个日志模板的lineids添加到日志对象lcsobject的行数列表lineids;如果不存在这样的日志对象lcsobject,则生成新的日志对象lcsobject到日志对象列表lcsmap中,不断读取日志模板,直到结束。
[0158]
在一种示例中,参照图4,示出了本发明实施例提供的基于lcs的二次分类的流程图,首先将日志模板1[temperature(41c)exceeds warning threshold]作为日志对象lcsobject保存到日志对象列表lcsmap中,其日志键lcsseq为[temperature(41c)exceeds warning threshold],行数列表lineids为{0}。接下来读取日志模板2[temperature(43c)exceeds warning threshold],遍历日志对象列表lcsmap中的日志对象lcsobject,此时的日志对象lcsobject包含有日志模板1,故匹配日志模板2与日志模板1之间的lcs,得到的lcs为temperature exceeds warning threshold,假设第二阈值为所输入的日志模板的1/2倍,那么可以确定日志模板2与日志模板1属于同一个日志键lcsseq,于是将日志模板2与日志模板1进行合并,即把两者的日志键lcsseq存在差异部分的变量用《*》替换,并把日志模板2的行数列表linelds{1}增加到日志对象lcsobject的行数列表linelds中,从而得到更新后的日志模板。接下来读取日志模板3[command has completed successfully],遍历日志对象列表lcsmap中的日志对象lcsobject,此时的日志对象lcsobject包含有日志模板1和2,故匹配日志模板3分别与日志模板1、日志模板2之间的lcs,得到的lcs均为空,那么可以确定日志模板3与日志模板1、日志模板2不属于同一个日志键lcsseq,于是将日志模板3作为新的日志对象lcsobject到日志对象列表lcsmap中,其日志键lcsseq为[command has completed successfully],行数列表lineids为{2},从而得到更新后的日志模板。所述示例仅用于使本领域技术人员更好理解本发明实施例,本发明对此不作出限定。
[0159]
步骤104,对所述日志模板进行检测。
[0160]
在获得日志模板后,可以采用日志模板进行检测,以判断其中是否存在有异常的日志模板。其主要是基于统计+无监督的日志模板异常检测算法,完全没有人工标注成本,计算简单并具有较好的可解释性。
[0161]
本发明的一个可选实施例中,步骤104可以包括以下子步骤:
[0162]
子步骤s51,获取所有更新后的日志模板以及对应日志量的日志数据;
[0163]
子步骤s52,将所述所有更新后的日志模板所对应日志量的日志数据,基于卡方分布进行聚合,得到聚合后的日志数据;
[0164]
子步骤s53,对所述聚合后的日志数据进行检测;
[0165]
子步骤s54,若所述聚合后的日志数据检测为异常,则针对各个更新后的日志模板,分别对对应日志量的日志数据进行检测,以确定是否存在有异常的日志模板。
[0166]
在本发明实施例中,基于前缀树的一次分类得到日志模板,基于lcs的二次分类得到更新后的日志模板,之后就可以获取所有更新后的日志模板以及对应日志量的日志数据。其中,日志量的日志数据是指已分配到该更新后的日志模板里面的日志数据。
[0167]
在本发明实施例中,设计以1min(分钟)为检测周期,由于是日志是按照机器维度来获取的,故日志异常检测也是按照机器维度来获取当前机器的所有更新后的日志模板以及对应日志量的日志数据。
[0168]
然后将所有更新后的日志模板所对应日志量的日志数据,基于卡方分布(chi-square distribution)进行聚合,得到聚合后的日志数据,也即是,将不同日志模板的日志
量的日志数据使用卡方分布进行聚合。其中,基于卡方分布进行聚合,其具体过程为:参照图5,示出了本发明实施例提供的基于卡方分布进行聚合的流程图,假设n个模板的频率特征符合标准正态分布,基于此构建模板的平方和特征,该特征满足卡方分布,在n较大时,卡方分布可近似为正态分布,这样可以使用3σ方法进行检测。
[0169]
除了使用3σ方法外,还可以使用箱线图(boxplot)方法,箱线图方法是使用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。
[0170]
在通过3σ方法和箱线图方法得到检测结果后,可以将两者的检测结果转换为异常分数后再进行融合,从而可以得到聚合后的日志数据。
[0171]
然后对聚合后的日志数据进行检测,如果没有发现异常,那么返回的检测结果为正常;如果发现异常,那么进一步针对每个更新后的日志模板所对应日志量的日志数据进行检测,来确定其中是否存在有异常的日志模板。
[0172]
在本发明实施例中,日志异常检测设计为两步主要原因是:根据每台机器的日志所生成的日志模板的数量都很多,对应日志量的日志数据中噪声也较多,直接进行日志模板的异常检测容易产生较多无效的报警。日志模板的数量多,全量进行1min粒度的异常检测计算压力大,可能无法在1min内完成检测。因此,本发明实施例考虑先从全局的角度设计一个噪声较少的指标,先对该指标进行检测,当检测结果为异常后,再下钻到具体的日志模板进行检测,找到有异常的日志模板,这样既能减少误报,也可以降低cpu压力。
[0173]
步骤105,若所述日志模板检测为异常,则进行异常告警。
[0174]
在获得日志模板后,根据日志模板的日志量的日志数据进行异常判定,如果发现其中存在有异常的日志模板,那么可以将对应异常通过告警发送给用户。
[0175]
本发明的一个可选实施例中,步骤105可以包括以下子步骤:
[0176]
子步骤s61,若存在有异常的日志模板,则采用所述异常的日志模板进行异常告警。
[0177]
在具体实现中,针对每个更新后的日志模板所对应的日志量的历史数据进行检测,来确定其中是否存在有异常的日志模板。如果确定出其中不存在有异常的日志模板,那么返回的检测结果为正常;如果确定出其中存在有异常的日志模板,那么返回的检测结果为异常,然后可以采用该异常的日志模板进行异常告警,从而用户可以确定出当前机器是发生了故障。
[0178]
综上,在本发明实施例中,先获取多个日志,并确定各个日志对应的长度和标签,然后根据各个日志对应的长度和标签,对多个日志进行分类,接着根据同一类型的日志生成日志模板,从而对日志模板进行检测,若日志模板检测为异常,则进行异常告警。本发明实施例根据日志长度和日志标签确定相似性,根据相似性对日志进行分类,并根据同一类型的日志生成日志模板,从而有效避免相似日志的无效查看,大幅节省排查时间,并且可以通过对日志模板进行检测来发现潜在的异常,帮助程序快速定位异常,从而提高日志分析效率,提升平台数字化能力。
[0179]
参考图6,示出了本发明实施例提供的一种日志分析装置的结构框图,具体可以包括如下模块:
[0180]
日志获取模块601,用于获取多个日志,并确定各个日志对应的长度和标签;
[0181]
日志分类模块602,用于根据所述各个日志对应的长度和标签,对所述多个日志进行分类;
[0182]
日志模板生成模块603,用于根据同一类型的日志生成日志模板;
[0183]
日志模板检测模块604,用于对所述日志模板进行检测;
[0184]
异常告警模块605,用于若所述日志模板检测为异常,则进行异常告警。
[0185]
本发明的一个可选实施例中,所述日志获取模块601可以包括:
[0186]
标签划分子模块,用于针对各个日志,按照分隔符/空格将所述日志划分为多个标签;所述各个日志对应多个标签;
[0187]
长度确定子模块,用于根据所述各个日志对应的多个标签,确定所述各个日志对应的长度。
[0188]
本发明的一个可选实施例中,所述日志分类模块602可以包括:
[0189]
日志输入子模块,用于分别将所述多个日志输入至预设的前缀树;所述前缀树包括长度节点、与所述长度节点连接的标签节点;
[0190]
第一分类子模块,用于将所述各个日志分类至与所述对应的长度相匹配的目标长度节点;
[0191]
第二分类子模块,用于将所述各个日志分类至与所述对应的标签相匹配的目标标签节点。
[0192]
本发明的一个可选实施例中,所述各个日志对应的标签包括多个;所述目标长度节点连接至少一个标签节点;所述第二分类子模块可以包括:
[0193]
标签顺序确定单元,用于针对分类至所述目标长度节点的各个日志,确定所述各个日志对应的标签顺序;
[0194]
标签匹配单元,用于按照所述对应的标签顺序,将所述各个日志对应的各个标签依次与所述至少一个标签节点进行匹配;
[0195]
日志分类单元,用于当匹配到与其中一个标签相同的目标标签节点时,将所述其中一个标签所对应的日志分类至所述目标标签节点。
[0196]
本发明的一个可选实施例中,所述各个日志具有对应的日志编号;所述目标标签节点链接有日志组列表,所述日志组列表包括多个日志组,所述日志组包括日志事件和日志编号集合;
[0197]
所述日志模板生成模块603可以包括:
[0198]
日志类型确定子模块,用于将分类至同一目标标签节点的日志确定为同一类型的日志;
[0199]
相似度计算子模块,用于针对同一类型的各个日志,计算所述各个日志与各个日志组的日志事件之间的相似度,得到多个相似度值;所述各个日志对应多个相似度值;
[0200]
最大相似度值确定子模块,用于从所述各个日志对应的多个相似度值中,确定所述各个日志对应的最大相似度值;
[0201]
第一日志组确定子模块,用于若所述最大相似度值大于或等于第一阈值,则确定所述最大相似度值所对应的日志匹配到日志组;
[0202]
第一类日志确定子模块,用于将所述匹配到日志组的日志确定为第一类日志;
[0203]
第一添加子模块,用于将各个第一类日志对应的日志编号添加至所匹配到的日志
组中的日志编号集合,得到日志模板。
[0204]
本发明的一个可选实施例中,所述日志模板生成模块603还可以包括:
[0205]
第二日志组确定子模块,用于若所述最大相似度值小于第一阈值,则确定所述最大相似度值所对应的日志未匹配到日志组;
[0206]
第二类日志确定子模块,用于将所述未匹配到日志组的日志确定为第二类日志;
[0207]
创建子模块,用于分别在所述第二类日志对应的日志组列表中创建新的日志组;
[0208]
第一添加子模块,用于将各个第二类日志添加至对应新的日志组中的日志事件,以及将各个第二类日志对应的日志编号添加至所述对应新的日志组中的日志编号集合,得到日志模板。
[0209]
本发明的一个可选实施例中,在所述对所述日志模板进行检测之前,还可以包括:
[0210]
日志模板获取模块,用于获取所有日志模板;
[0211]
最长公共子序列匹配模块,用于依次匹配两两日志模板之间的最长公共子序列;
[0212]
日志模板更新模块,用于若所述最长公共子序列大于或等于第二阈值,则将所述最长公共子序列所对应的两两日志模板进行合并,直至末尾的两两日志模板完成最长公共子序列的匹配,得到更新后的日志模板。
[0213]
本发明的一个可选实施例中,所述日志模板检测模块604可以包括:
[0214]
日志数据获取子模块,用于获取所有更新后的日志模板以及对应日志量的日志数据;
[0215]
日志数据聚合子模块,用于将所述所有更新后的日志模板所对应日志量的日志数据,基于卡方分布进行聚合,得到聚合后的日志数据;
[0216]
第一检测子模块,用于对所述聚合后的日志数据进行检测;
[0217]
第二检测子模块,用于若所述聚合后的日志数据检测为异常,则针对各个更新后的日志模板,分别对对应日志量的日志数据进行检测,以确定是否存在有异常的日志模板。
[0218]
本发明的一个可选实施例中,所述异常告警模块605可以包括:
[0219]
异常告警子模块,用于若存在有异常的日志模板,则采用所述异常的日志模板进行异常告警。
[0220]
综上,在本发明实施例中,先获取多个日志,并确定各个日志对应的长度和标签,然后根据各个日志对应的长度和标签,对多个日志进行分类,接着根据同一类型的日志生成日志模板,从而对日志模板进行检测,若日志模板检测为异常,则进行异常告警。本发明实施例根据日志长度和日志标签确定相似性,根据相似性对日志进行分类,并根据同一类型的日志生成日志模板,从而有效避免相似日志的无效查看,大幅节省排查时间,并且可以通过对日志模板进行检测来发现潜在的异常,帮助程序快速定位异常,从而提高日志分析效率,提升平台数字化能力。
[0221]
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0222]
本发明实施例还提供了一种电子设备,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述日志分析方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0223]
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有
计算机程序,计算机程序被处理器执行时实现上述日志分析方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0224]
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0225]
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0226]
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0227]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0228]
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0229]
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0230]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0231]
以上对本发明所提供的日志分析方法、装置、电子设备和计算机可读存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1