CN113128213A - 日志模板提取方法及装置 - Google Patents

日志模板提取方法及装置 Download PDF

Info

Publication number
CN113128213A
CN113128213A CN201911401898.2A CN201911401898A CN113128213A CN 113128213 A CN113128213 A CN 113128213A CN 201911401898 A CN201911401898 A CN 201911401898A CN 113128213 A CN113128213 A CN 113128213A
Authority
CN
China
Prior art keywords
log
records
template
row
log record
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911401898.2A
Other languages
English (en)
Inventor
雅尔·埃瑞恩
艾坦·波利尼可
诺阿姆·佩雷斯
王琛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201911401898.2A priority Critical patent/CN113128213A/zh
Publication of CN113128213A publication Critical patent/CN113128213A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1734Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/35Clustering; Classification

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种日志模板提取方法及装置,属于计算机技术领域。所述方法包括:将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录;基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同所述第一日志记录组包括所述日志中的不同行日志记录;分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板。本申请解决了目前确定的日志模板的准确性较低的问题,本申请应用于日志的日志模板提取。

Description

日志模板提取方法及装置
技术领域
本申请涉及计算机技术领域,特别涉及一种日志模板提取方法及装置。
背景技术
通过在软件源代码中填加的一些特定的代码,可以将软件运行的实时状态记录以文本形式记录在文件中,该文件称为日志(logs)或日志文件。软件开发者(或运维工作人员)可以通过阅读日志,掌握软件运行的实时情况。
一个日志包括多行日志记录(也称日志语句),每一行日志记录用于记录软件运行时的一个事件,日志中的日志记录通常具有隐含的日志模板(schema),即该记录本身的模式或格式。基于日志的日志模板的不同,日志可以分为同质化日志(Homologous logs)和异质化日志(Heterogeneous logs)两类。同质化日志是指,日志中所有行日志记录的日志模板相同;异质化日志是指,日志中的各行日志记录没有统一的日志模板。通过识别日志的日志模板可以帮助用户快速掌握系统运行全貌。
目前,对于异质化日志,提取其日志模板的方法如下:将该行日志记录进行分词(tokenization),得到多个词条(token);基于每行日志记录的分词结果,计算每个日志记录之间的相似度,基于相似度对日志中的日志记录进行层次聚类(HierarchicalClustering),得到多类日志记录;对每类日志记录进行模板提取,将得到的多类日志记录的日志模板作为异质化日志的日志模板。
但是,由于日志中记录的内容较多,容易影响最终确定的日志模板的准确性。
发明内容
本申请实施例提供了一种日志模板提取方法及装置,能够解决目前的日志模板提取方法的运算代价较大的问题。所述技术方案如下:
第一方面,提供一种日志模板提取方法,所述方法包括:
将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录;基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同所述第一日志记录组包括所述日志中的不同行日志记录;分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板。
本申请实施例中,通过将日志的多行日志记录中每行日志记录中的指定字符删除,可以有效减少计算复杂度,并且避免了指定字符对日志模板提取过程的干扰,从而提高提取日志模板的进度。
可选地,所述将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录,包括:
在一种可选示例中,获取所述日志中每行日志记录的至少一个词条,将所述每行日志记录的每个词条中的所述指定字符删除,得到所述预处理后的每行日志记录;
在另一种可选示例中,将所述多行日志记录中每行日志记录中的指定字符删除,得到简化后的每行日志记录,获取所述多行日志的简化后的每行日志记录的至少一个词条,得到所述预处理后的每行日志记录。
不同的第一简化哈希码的个数通常小于不同的第一哈希码的个数,分组得到的第一日志记录组的个数相应减少,因此,采用前述另一种可选示例,可以减少哈希桶个数,避免哈希桶分布过于分散。
可选地,所述指定字符为数字和/或标点符号。由于日志记录中的变量符号,如时间戳和IP地址,包括大量数字和标点符号,当指定字符为数字和/或标点符号时,可以有效减少这些变量符号对日志模板提取的干扰,提高日志模板提取精度。
可选地,所述基于预处理后的每行日志记录,确定至少一个第一日志记录组,包括:
将所述预处理后的每行日志记录的第一指定位置的连续的m个非空词条拼接得到第一字符签名,m为正整数;基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名;基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,每个所述第一日志记录组包括的所有日志记录所对应的第一数字签名相同。
本申请实施例中,第一指定位置通常为预先指定(通常为用户指定)的位置,其对应的字符内容为常量的概率大于预设阈值,也即是,第一指定位置对应的字符内容有较大的概率为常量。由于日志记录中靠前的位置的内容是常量的可能性较高,因此可选地,该第一指定位置为靠前的位置,则该m个非空词条为每行日志记录的前m个非空词条。不过,在不同的应用场景中,不同日志的日志记录中第一指定位置可能不同,本申请实施例对此不做限定。
可选地,所述基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,包括:将所述预处理后的每行日志记录的第二指定位置的连续的n个非空词条拼接得到第二字符签名,且所述第一指定位置与所述第二指定位置不同,所述n为正整数;基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到至少一个第二日志记录组;每个所述第二日志记录组包括的所有日志记录所对应的第一数字签名相同;基于所述每行日志记录的第二数字签名,对所述至少一个第二日志记录组中每个第二日志记录组进行分组,得到所述至少一个第一日志记录组;每个所述第一日志记录组包括的所有日志记录所对应的第二数字签名相同。
如此可以在第一数字签名的基础上补充分组依据,以进行分组,从而使得得到的第一日志记录组中的哈希碰撞较少,分组结果更准确。
本申请实施例中,第二指定位置通常为预先指定(通常为用户指定)的位置,其对应的字符内容为常量的概率大于预设阈值,也即是,第二指定位置对应的字符内容大概率为常量。如前所述,由于日志记录中靠前的位置的内容是常量的可能性较高,因此可选地,该第二指定位置为靠前的位置,则该n个非空词条为每行日志记录的前m个非空词条之后的相邻的n个非空词条。不过,在不同的应用场景中,不同日志的日志记录中第二指定位置可能不同,本申请实施例对此不做限定。
可选地,所述基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名,包括:
将所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定为所述每行日志记录的第一数字签名;或者,对所述预处理后的每行日志记录的第一哈希码进行简化处理,得到所述预处理后的每行日志记录的第一简化哈希码,将所述预处理后的每行日志记录的第一简化哈希码,确定为所述每行日志记录的第一数字签名。
其中,简化处理可以包括取余处理、取模处理或者基于获取的第一哈希码计算新的哈希码(新的哈希码的位数小于原哈希码的位数,从而起到简化作用)。通过对第一哈希码进行简化处理,可以减少处理得到的第一简化哈希码的位数,从而减少后续分组数量,降低分组复杂度。
可选地,所述分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板,包括:
对于每个所述第一日志记录组中的每行日志记录,基于所述日志记录与所述第一日志记录组的历史日志模板,生成备选日志模板;当所述日志记录与生成的备选日志模板中任一备选日志模板匹配,将所述任一备选日志模板确定为所述第一日志记录组的新的日志模板;当所述日志记录与所有所述备选日志模板均不匹配,将所有所述备选日志模板回退为对应的历史日志模板和所述日志记录,并将从所述日志记录提取的日志模板,添加为所述第一日志记录组的新的日志模板。
第二方面,提供一种日志模板提取装置,所述装置可以包括至少一个模块,该至少一个模块可以用于实现上述第一方面或者第一方面的各种可能实现提供的所述日志模板提取方法。
第三方面,本申请提供一种计算机设备,该计算机设备包括处理器和存储器。该存储器存储计算机指令;在该处理器执行该存储器存储的计算机指令时,该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,使得该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的该日志模板提取装置。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,该计算机指令指示该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,或者该计算机指令指示该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的日志模板提取装置。
第五方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,使得该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的日志模板提取装置。
第六方面,提供一种分析系统,包括:终端和分析设备,所述分析设备包括第二方面或者第二方面的各种可能实现所述的日志模板提取装置或第三方面所述的计算机设备。
第七方面,提供一种芯片,所述芯片可以包括可编程逻辑电路和/或程序指令,当所述芯片运行时用于实现如第一方面任一所述的模板提取方法。
本申请实施例中,通过将日志的多行日志记录中每行日志记录中的指定字符删除,可以有效减少计算复杂度,并且避免了指定字符对日志模板提取过程的干扰,从而提高提取日志模板的进度。
示例的,由于日志记录中的变量符号,如时间戳和IP地址,包括大量数字和标点符号,当指定字符为数字和/或标点符号时,可以有效减少这些变量符号对日志模板提取的干扰,提高日志模板提取精度。
当第一日志记录组有多组时,对于各个第一日志记录组的处理过程可以并行执行,从而减少运算时延,每次执行处理过程时所需要运算的数据量远远小于日志整体的数据量,有效降低运算代价,同时提高运算效率。
附图说明
图1是本申请实施例提供的一个日志中的部分日志内容的示意图;
图2是本申请实施例提供的一种日志模板提取方法所涉及的应用环境示意图;
图3是本申请实施例提供的另一种日志模板提取方法所涉及的应用环境示意图;
图4是本申请实施例提供的一个日志模板提取方法的流程示意图;
图5是本申请实施例提供的一种采用空格分词的方式示意图;
图6是本申请实施例提供的一种采用空格分词的方式进行分词得到的分词结果示意图;
图7是本申请实施例提供的一种采用特殊字符分词的方式进行分词得到的分词结果示意图;
图8是本申请实施例提供的日志记录X1在分词后删除指定字符的结果示意图;
图9是在图8所示的日志记录X1在分词后删除指定字符的基础上进行字符拼接的结果示意图;
图10是本申请实施例提供的一种第一数字签名的确定过程示意图;
图11是本申请实施例提供的日志记录X3至X6的分组结果的示意图;
图12是本申请实施例提供的日志记录X7和X8的分组结果的示意图;
图13至图16为本申请实施例提供的一个第一日志记录组中的日志模板提取过程示意图;
图17是本申请实施例提供的一种第一日志记录组的分组结果的示意图;
图18是本申请实施例提供的一种日志模板示意图;
图19是本申请实施例提供的一种确定模块的示意图;
图20是本申请实施例提供的一种计算机设备的示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
日志用于记录软件运行的实时状态,通过分析日志,可以掌握软件运行的实时情况,或者进行日志的异常检测等。本申请实施例中,日志分析的场景包括离线分析场景和在线分析场景。在离线分析场景中,进行分析的日志数据可以为批量(batch)日志数据,如日志文件,或者在日志数据库中查询得到的日志数据;在在线分析场景中,进行分析的日志数据可以为实时日志数据,也称日志流(log stream)数据。其中,日志文件通常是用户、软件开发者或运维工作人员下载得到的文件,或者通过关键词搜索得到的文件。
如图1所示,图1是一个日志中的部分日志内容的示意图,日志包括多行日志记录(也称日志文本),每一行(也称每一条)日志记录用于记录软件运行时的一个事件。每一行日志记录都由多个字符组成,该多个字符可以包括字母和/或符号等。一行日志记录包括常量部分和变量部分,常量部分包括至少一个字符,变量部分包括至少一个字符(或者,在一些特殊情况下,变量部分为空字符,即不存在内容)。例如,假设某一日志记录对应的伪代码被定义为记录用户登录的信息:“logging.info('User%d login at%s',$uid,$time)”,该日志记录对应的伪代码中的“$”用来定义变量部分(也称变量名)。例如,“$IP”就是网际互连协议(Internet Protocol,IP)地址的意思。从该日志记录对应的伪代码中可以看出,该日志记录包含了两组变量部分,分别用于记录每一次登录的用户名(uid)和登录时间(time)。
日志中的日志记录通常具有隐含的日志模板(也称日志模式(pattern)),日志模板指的是用于生成日志中日志记录的标准样式,或者固定格式。例如,前述日志记录对应的伪代码在实际运行后,输出得到日志中的用于记录用户登录的信息的多行日志记录。在本申请实施例将该多行日志记录所在日志称为第一日志:
“User 025862 login at 2018-12-03 02:03:00
User 045210 login at 2018-12-04 02:03:15
User 033658 login at 2018-12-05 02:03:38
User 010100 login at 2018-12-06 02:04:06
User 023025 login at 2018-12-07 02:04:51
User 046523 login at 2018-12-08 02:05:22”。
日志的日志模板即该日志中的日志记录的日志模板。通常,在对日志记录进行日志模板提取时,若识别出日志记录的变量部分,会采用预设的变量标识符对变量部分进行标记,该标记方式实质为采用变量标识符将变量部分替换。该变量标识符通常为通配符“*”。示例的,对上述第一日志的多行日志记录进行日志模板提取时,可以将变量部分采用通配符“*”替换,得到的每行日志记录的日志模板为“User*login at*”,则第一日志的日志模板为“User*login at*”。值得说明的是,在后文中的匹配过程中,该变量标识符可以被判定为与任意字符或词条相同。例如,可以在将“*”与“046523”进行匹配时,确定“*”与“046523”相同。
日志可以分为同质化日志和异质化日志两类。前述实施例的第一日志中以同质化日志为例进行说明,同质化日志中的日志记录具有统一的日志模板,日志模板的提取过程可以采用正则表达式的方式实现,而异质化日志的多行日志记录没有统一的日志模板,通常业务日志为异质化日志。示例的,该异质化日志的部分内容如下所示(该异质化日志中的“#”用于标记行号,实际应用中,日志的内容中可以不包括该行号标记以及具体行号,该例子主要为了便于读者理解,因此在后续处理过程中忽略行号标记以及具体行号)。在本申请实施例将如下所示的多行日志记录所在日志称为第二日志:
“#0mod_jk child workerEnv in error state 6
#1jk2_init()Found child 6740 in scoreboard slot 7
#2jk2_init()Found child 6741 in scoreboard slot 8
#3workerEnv.init()ok/etc/httpd/conf/workers2.properties
#4mod_jk child workerEnv in error state 7
#5workerEnv.init()ok/etc/httpd/conf/workers2.properties”。
由于其各行日志记录没有统一的日志模板,因此提取过程更为复杂。又由于日志中记录的内容较多,容易影响最终确定的日志模板的准确性。
本申请实施例提供一种日志模板提取方法,可以降低日志模板提取过程中的运算代价。请参考图2,图2是本申请实施例提供的一种日志模板提取方法所涉及的应用环境示意图。该应用环境包括终端110、分析设备120和网络设备130。
终端110可以是显示器、计算机、智能手机、平板电脑和膝上型便携计算机等等能够与用户交互的设备。分析设备120可以是一台服务器,或者由若干台服务器组成的服务器集群等等能够进行数据分析的设备。可选的,该分析设备120可以是云服务器(也称云计算服务器),例如,用于提供的深度学习服务(Deep Learning Service,DLS)的深度学习服务器。终端110通过通信网络与分析设备120建立有线或无线的通信连接。其中,网络设备130可以为传感器或终端等能够运行软件并产生日志数据的设备。网络设备130用于向分析设备120提供待分析的数据,分析设备120用于进行日志数据的分析,终端110用于将分析结果呈现给用户。本申请实施例中所涉及的通信网络是第二代(2-Generation,2G)通信网络、第三代(3rd Generation,3G)通信网络、长期演进(Long Term Evolution,LTE)通信网络或第五代(5rd Generation,5G)通信网络等。
可选的,前述应用环境还可以包括存储设备,其用于存储终端110、分析设备120和/或网络设备130所需存储的数据,该存储设备可以为分布式存储设备,终端110、分析设备120和/或网络设备130可以对该存储设备所存储的数据进行读写。这样在应用场景中的数据较多的情况下,由存储设备进行数据存储,可以减轻分析设备的负载,提高分析设备的数据分析效率。需要说明的是,当应用环境中的数据量较少时,也可以不设置该存储设备。在这种情况下,终端110和分析设备120的功能也可以由同一设备实现,例如计算机。
如图3所示,该应用环境包括前台201和后台202两部分。前台201用于向用户呈现数据,以及接收用户输入的数据,实现与用户的交互;后台202用于与前台201进行数据交互,并进行管理操作和/或数据处理等。其中,前台201可以部署于前述终端110中。后台202可以部署于前述分析设备120中。示例的,终端110中可以安装有客户端、脚本或者浏览器,以实现前台201的部署。如此,终端110可以以客户端界面、终端界面或者与浏览器对应网页的形式呈现用户界面。
本申请实施例提供的日志模板提取方法可以用于软件调试、性能优化或业务分析等场景中。具体可以应用在这些场景中异常检测场景中。异常检测是指对不符合预期的模式进行检测。本申请实施例中,异常检测的数据来源为应用、进程、操作系统、设备或者网络中的软件运行所产生的日志数据,这些数据可以存储在数据库、本地文件或消息队列(如流式场景)中。示例的,前述分析设备120可以采用深度学习(deep learning)算法进行日志数据的异常检测。值得说明的是,本申请实施例提供的日志模板提取方法还可以用于日志压缩、关键词检索等其他场景中,本申请实施例对此不做限定。
如图4所示,本申请实施例提供一种日志模板提取方法,应用于图2或图3所示的应用环境中。图4以该方法应用于异常检测场景为例进行说明,该方法包括:
步骤301、分析设备获取日志,该日志包括多行日志记录。
如前所述,日志有批量日志数据和实时日志数据两种形式。本申请实施例中,分析设备支持这两种形式的日志的分析。在一种可选示例中,分析设备周期性获取日志文件,或者在指定时段获取日志文件,以得到批量日志数据,该指定时段可以是终端和/或服务器的低功耗时段(即功耗小于指定功耗阈值的时段),如此可以降低日志文件获取以及后续日志分析对终端和/或服务器的其他功能的影响;在另一种可选示例中,分析设备持续获取实时日志数据;在又一种可选示例中,分析设备在接收到分析指令后,获取批量日志数据或者实时日志数据。该分析指令可以是用户在终端触发生成,并由终端发送至分析设备的。
当分析设备实时获取日志流并进行分析时,由于能够及时对日志流进行监控,若日志流中出现异常可以及时发现并上报,提高异常检测的实效性,避免大规模异常的出现,从而提高用户体验。
本申请实施例提供的日志模板提取方法可以用于前述同质化日志的日志模板提取,也可以用于前述异质化日志的模板提取。在一种可选方式中,分析设备在执行步骤301之后,可以直接执行步骤302;在另一种可选方式中,由于本申请实施例提供的日志模板提取方法在应用于异质化日志的模板提取时,运算效率更高,因此可以先检测日志的类型,若日志的类型为同质化日志,采用正则表达式进行日志的模板提取,若日志的类型为异质化日志,则执行后续步骤302。
步骤302、分析设备将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录。
由于日志记录中的一些指定字符在多数情况下都是变量字符,这些字符影响着后续的计算复杂度和最终提取的日志模板的精度,因此,将这些指定字符进行删除,可以降低计算复杂度和提取的日志模板的精度。示例的,该指定字符为数字和/或标点符号。例如,“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“-”、“[”、“(”、“.”、“:”、“/”、“)”和“]”等等。如此,预处理后的每行日志记录通常只包括a-z,以及A-Z中的字一个或多个字符。
其中,将日志的多行日志记录中每行日志记录中的指定字符删除的方式可以有多种,本申请实施例以以下两种方式为例进行说明:
在第一种方式中,可以先分词再删除指定字符,该过程包括:
步骤A1、分析设备获取日志中每行日志记录的至少一个词条(token)。
可选的,分析设备可以通过分词技术对日志中每行日志记录进行分词,以得到分词后的每行日志记录的至少一个词条。词条包括至少一个最小语义单元,通常仅包括一个最小语义单元。语义单元为单词、词组或符号,该符号可以为数字符号,简称数字,如1或2,也可以为其他符号,如“/”或“:”。
本申请实施例在实际实现时,一行日志记录通常可以划分得到至少两个词条;少数情况下,一行日志记录可以划分得到一个词条,本申请实施例对划分得到的词条个数不做限定。
分词的目的是将每行日志记录切割成一个词条的集合,通过分词处理可以减少日志记录的处理复杂度,降低后续获取字符签名的运算代价,提高运算效率。
本申请实施例中,可以采用不同方式进行分词。例如,采用空格分;或者,采用特殊字符分词;或者,采用指定切分符分词,该指定切分符包括空格或特殊字符;或者采用自然语言分词。
如图5所示,图5为一种采用空格分词的方式示意图,采用空格分词,指的是将一行日志记录按照空格切分成多个词条,其切分实现过程简单,切分效率高。
采用特殊字符分词时,特殊字符通常为用户指定的字符,如“\n”、“[”、“:”、“=”、“{”、“(”、“\t”、“\r”、“|”或“##”等等。若一个词条仅包括一个最小语义单元,则相对于采用空格分词,采用特殊字符分词可以使得切分到的词条包括的语义单元更准确,切分精度更高。例如,对于以下日志记录:“20171223-22:15:35:11|Step_SPUtils|30002312|getTodayTotalDetailSteps=1514038440000##7015##548365##8661##13026##27177962”,采用空格分词的方式得到的分词结果如图6所示。可以看出,第一个词条和最后一个词条,都包含了很多信息。例如第一个词条里有时间,有类名,还有一个数字信息。而最后一个词条里有很多数字被特殊字符“##”隔开,每一个数字代表了一定的意义,应该单独切割出来。因此,每个词条无法被有效切割成一个最小语义单元。假设特殊字符包括:“|”,“##”或“=”,则采用特殊字符分词的方式得到的分词结果如图7所示。切分得到的每个词条均为一个最小语义单元,如此切分精度更高。
采用指定切分符分词是采用空格和采样特殊字符分词方式的组合方式。示例的,指定切分符可以包括:“\n”、“[”、“:”、“=”、“{”、“(”、“\t”、“\r”、“|”、“##”和空格中的一种。
采用自然语言分词的方式较为常用,在这种方式中可以直接将日志记录输入基于自然语言的分词器,例如NLTK(Natural Language Toolkit)中的Word_Tokenizer,TreeBank_Tokenizer,S-Expression_tokenizer等分词器。采用自然语言分词的方式相对于前述采用指定切分符或特殊字符分词的方式,无需用户预先指定用于切分的符号,从而简化用户操作。
步骤A2、分析设备将每行日志记录的每个词条中的指定字符删除,得到预处理后的每行日志记录。
可选地,分析设备可以遍历分词得到的每个词条,并将检测到的指定字符删除,以得到预处理后的每行日志记录。
如图8所示,假设前述指定字符为数字和标点符号,则对于日志记录X1:“2019-04-3007:00:31[INFO](com.navercorp.pinpoint.bootstrap.AgentDirBaseClassPathResolver)Agent original-path:/paas-apm/collectors/pinpoint”,分词后得到9个词条,删除指定字符后,该日志记录X1的前4个词条都变成空词条,即没有了实际内容。
在第二种方式中,分析设备可以先删除指定字符再分词,该过程包括:
步骤B1、分析设备将多行日志记录中每行日志记录中的指定字符删除,得到简化后的每行日志记录。
可选地,分析设备可以遍历日志中的每行日志记录,并将检测到的指定字符删除,以得到简化后的每行日志记录。
示例的,假设指定字符可以为数字。日志记录X2为:“Connected to10.110.12.01at 2019-11-04 15:40:00”,则采用该方式得到的简化后的日志记录X2为:“Connected to...at--::”。
值得说明的是,若某一指定字符与后续步骤B2分词所采用的分词符相同,则保留该指定字符,以保证步骤B2能够实现有效分词。
步骤B2、分析设备获取多行日志的简化后的每行日志记录的至少一个词条,得到预处理后的每行日志记录。
步骤B2可以参考前述步骤A1,分词过程也可以采用前述空格分词、特殊字符分词、指定切分符分词或者自然语言分词的方式,本申请实施例对此不做赘述。
仍然以前述简化后的日志记录X2为例,假设采样指定切分符分词,该指定切分符包括:“.”、“-”、“:”和空格,则对简化后的日志记录X2:“Connected to...at--::”分词得到“Connected”、“to”和“at”共3个词条。
步骤303、分析设备基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同第一日志记录组包括日志中的不同行日志记录。
基于预处理后的每行日志记录,确定至少一个第一日志记录组的可实现方式可以有多种,本申请实施例以以下几种可实现方式为例进行说明:
在第一种可实现方式中,基于预处理后的每行日志记录,确定至少一个第一日志记录组的过程可以包括:
步骤C1、分析设备将预处理后的每行日志记录的第一指定位置的连续的m个非空词条拼接得到第一字符签名,该m为正整数。例如,m为2或3。
本申请实施例中,第一指定位置通常为预先指定(通常为用户指定)的位置,其对应的字符内容为常量的概率大于预设阈值,也即是,第一指定位置对应的字符内容有较大的概率为常量。由于日志记录中靠前的位置的内容是常量的可能性较高,因此可选地,该第一指定位置为靠前的位置,则该m个非空词条为每行日志记录的前m个非空词条。不过,在不同的应用场景中,不同日志的日志记录中第一指定位置可能不同,本申请实施例对此不做限定。
对于预处理后的每行日志记录,将该日志记录的第一指定位置的连续的m个非空词条按排列顺序拼接得到一个长字符串,该长字符串称之为第一字符签名。
假设m=3,仍然以图8所示的预处理后的日志记录X2为例,如图9所示,拼接得到的第一字符签名为:“INFOcom.navercorppinpointbootstrapAgentDirBaseClassPathResolverAgent”。
值得说明的是,步骤302中,分析设备还可以直接将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录,不执行分词动作。如此,在步骤C1可以替换为:分析设备将预处理后的每行日志记录的第一指定位置的连续的w个非空字符拼接得到第一字符签名。例如,第一指定位置的连续的w个非空字符为连续的前w个非空字符,w为正整数,如w的取值范围为20-50。
步骤C2、分析设备基于预处理后的每行日志记录对应的第一字符签名的第一哈希(Hash)码,确定每行日志记录的第一数字签名。
在一种可选示例中,分析设备可以计算预处理后的每行日志记录对应的第一字符签名的第一哈希码,然后将预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定为每行日志记录的第一数字签名。
示例的,前述哈希算法可以为消息摘要算法4(Message Digest Algorithm4,MD4)或者安全散列算法-2(Secure Hash Algorithm-2,SHA-2),本申请实施例对哈希算法的类型不做限定。
在另一种可选示例中,分析设备可以计算预处理后的每行日志记录对应的第一字符签名的第一哈希码,然后对预处理后的每行日志记录的第一哈希码进行简化处理,得到预处理后的每行日志记录的第一简化哈希码,将预处理后的每行日志记录的第一简化哈希码,确定为每行日志记录的第一数字签名。
其中,简化处理可以包括取余处理、取模处理或者基于获取的第一哈希码计算新的哈希码(新的哈希码的位数小于原哈希码的位数,从而起到简化作用)。通过对第一哈希码进行简化处理,可以减少处理得到的第一简化哈希码的位数,从而减少后续分组数量,降低分组复杂度。
如图10所示,图10以第三日志记录X3至第六日志记录X6为例对该另一种可选方式进行说明,第三日志记录X3至第六日志记录X6对应的第一字符签名X31至第一字符签名X61经过哈希运算后,得到的哈希码分别为:20090、23327、10036和20090;经过简化处理分别为:90、327、326和90。图10以简化处理为以1000为除数的取余运算,但并不对本申请实施例所采用的简化处理的类型进行限定。
步骤C3、基于每行日志记录的第一数字签名,对日志中的多行日志记录进行分组,得到至少一个第一日志记录组,每个第一日志记录组包括的所有日志记录所对应的第一数字签名相同。
在第一种可选方式中,可以直接基于每行日志记录的第一数字签名,对日志中的多行日志记录进行分组,得到至少一个第一日志记录组。
通常情况下,分组得到的第一日志记录组有多个。分析设备可以将日志的多行日志记录中,第一数字签名均相同的日志记录,划分至同一第一日志记录组中,以得到该至少一个第一日志记录组。
如图11所示,仍然以图10所示的4个日志记录为例。第三日志记录X3和第六日志记录X6很相似,通过删除指定字符,得到的第一字符签名一样,因此他们的哈希码也相同,最后的第一数字签名也相同,最终划分在了相同的第一日志记录组中。图11仅示意性地以对应的第一数字签名标识各个第一日志记录组,本申请实施例对第一日志记录组的标识方式不做限定。
在第二种可选方式中,可以在第一数字签名的基础上补充分组依据,以进行分组,从而使得得到的第一日志记录组中的哈希碰撞较少,分组结果更准确。则基于每行日志记录的第一数字签名,对日志中的多行日志记录进行分组,得到至少一个第一日志记录组的过程可以包括:
步骤C31、将预处理后的每行日志记录的第二指定位置的连续的n个非空词条拼接得到第二字符签名,n为正整数,且第一指定位置与第二指定位置不同。
其中,n可以与m相等也可以不等,例如n为1、2或3。本申请实施例中,第二指定位置通常为预先指定(通常为用户指定)的位置,其对应的字符内容为常量的概率大于预设阈值,也即是,第二指定位置对应的字符内容大概率为常量。如前所述,由于日志记录中靠前的位置的内容是常量的可能性较高,因此可选地,该第二指定位置为靠前的位置,则该n个非空词条为每行日志记录的前m个非空词条之后的相邻的n个非空词条。不过,在不同的应用场景中,不同日志的日志记录中第二指定位置可能不同,本申请实施例对此不做限定。
值得说明的是,与前述步骤C2同理的,在一种可选示例中,分析设备可以计算预处理后的每行日志记录对应的第二字符签名的第二哈希码,然后将预处理后的每行日志记录对应的第二字符签名的第二哈希码,确定为每行日志记录的第二数字签名。
在二种可选示例中,分析设备可以计算预处理后的每行日志记录对应的第二字符签名的第二哈希码,然后对预处理后的每行日志记录的第二哈希码进行简化处理,得到预处理后的每行日志记录的第二简化哈希码,将预处理后的每行日志记录的第二简化哈希码,确定为每行日志记录的第二数字签名。其中,简化处理可以包括取余处理、取模处理或者基于获取的第二哈希码计算新的哈希码(新的哈希码的位数小于原哈希码的位数,从而起到简化作用)。通过对第二哈希码进行简化处理,可以减少处理得到的第二简化哈希码的位数,从而减少第二日志记录组中的分组数量,降低分组复杂度。
步骤C32、基于每行日志记录的第一数字签名,对日志中的多行日志记录进行分组,得到至少一个第二日志记录组;每个第二日志记录组包括的所有日志记录所对应的第一数字签名相同。
通常情况下,分组得到的第二日志记录组有多个。分析设备可以将日志的多行日志记录中,第一数字签名均相同的日志记录,划分至同一第二日志记录组中,以得到该至少一个第二日志记录组。
步骤C33、基于每行日志记录的第二数字签名,对至少一个第二日志记录组中每个第二日志记录组进行分组,得到至少一个第一日志记录组;每个第一日志记录组包括的所有日志记录所对应的第二数字签名相同。
分析设备可以将每个第二日志记录组中,第二数字签名均相同的日志记录,划分至同一第一日志记录组中,以得到该至少一个第一日志记录组。
由前述步骤C3的第一种可选方式可知,由于该分组方式可能将不同的日志记录放在同一个第一日志记录组中,容易导致该第一日志记录组中的日志模板提取难度较大。采用该第二种可选方式可以减少不同的日志记录放在同一个第一日志记录组中的概率,进而降低日志模板的提取难度。
如图12所示,假设m=2,n=2,第七日志记录X7为:“Order 123has beencreated”,第八日志记录X8为:“Good morning Bill Gates”,则对于每行日志记录,分析设备可以执行步骤C1提取其第一字符签名,执行步骤C31提取其第二字符签名。例如,第七日志记录X7的第一字符签名是第一个和第二个非空词条的拼接,即“Orderhas”。第二字符签名是第三个和第四个非空词条的拼接,即“beencreated”。同理,第八日志记录X8的第一字符签名和第二字符签名分别是:“Goodmorning”和“BillGates”。如基于第七日志记录X7和第八日志记录X8的第一字符签名计算哈希码,以得到相应的第一数字签名,两个日志记录的第一数字签名均为90,两者划分至同一第二日志记录组90;接着基于第七日志记录X7和第八日志记录X8的第二字符签名计算哈希码,以得到相应的第二数字签名:123和6,基于该两个第二数字签名将两行日志记录划分到不同的第一日志记录组中,则日志记录X7落入第一日志记录组123中,日志记录X8落入第一日志记录组6中。
由此可以看出,对于两个不同的日志记录,第一数字签名和第二数字签名同时发生碰撞的概率是很低的,采用该第二种可选方式进行分组,可以有效区分同一日志记录组中的不同的日志记录。图12仅示意性地以对应的第一数字签名标识各个第二日志记录组,第二数字签名标识各个第一日志记录组,本申请实施例对第一日志记录组和第二日志记录组的标识方式不做限定。该第二种可选方式所采用的分组算法也称为多层哈希算法,第一日志记录组和第二日志记录组分别属于不同层。
步骤304、分析设备分别提取至少一个第一日志记录组中每个第一日志记录组中的日志模板,并基于提取的日志模板确定日志的日志模板。
可选地,分析设备分别提取至少一个第一日志记录组中每个第一日志记录组中的日志模板,并基于提取的日志模板确定日志的日志模板的过程可以包括:
步骤D1、分析设备分别提取每个第一日志记录组中的日志模板。
前述步骤303的目的是将相似的日志记录划分在同一第一日志记录组中,虽然在步骤303中,已经基于第一数字签名划分得到一个或多个第一日志记录组,但是每个第一日志记录组中仍然有可能存在哈希碰撞的情况,例如,若第一数字签名为第一简化哈希码,假设一个日志记录的第一哈希码为20090,另一日志记录的第一哈希码为30090,两者实质不同,但是对应的简化哈希码均为90,最终划分在相同的第一日志记录组中。如此便产生了哈希碰撞。一方面,可以采用前述步骤C31至C33来减少该哈希碰撞;另一方面,可以采用本申请后续实施例提供的日志模板提取方式有效提取第一日志记录组中一个或多个日志模板。
分析设备分别提取每个第一日志记录组中的日志模板的实现方式可以有多种,本申请实施例以以下两种实现方式为例进行说明:
第一种实现方式,分析设备先进行历史日志模板与日志记录的合并,再进行新日志模板确定。
通常情况下,一个第一日志记录组中存在一个或多个历史日志模板。以下步骤D11至步骤D14以第一日志记录中存在一个历史日志模板为例,对第一种实现方式进行说明,该过程包括:
步骤D11、对于每个第一日志记录组中的每行日志记录,分析设备基于该日志记录与第一日志记录组的历史日志模板,生成备选日志模板。
分析设备基于该日志记录与第一日志记录组的历史日志模板,生成备选日志模板的过程可以称为合并过程,可选地,假设当前比较的日志记录为日志记录R,分析设备可以将历史日志模板中,与该日志记录R不同的部分采用变量指示符替换,相同的部分不变(相当于与该日志记录R相同的部分合并),得到备选日志模板。
或者,分析设备先判断历史日志模板中与该日志记录R不同的部分是否仅为历史日志模板的变量指示符所在部分,若该不同的部分还包括变量指示符所在部分之外的其他部分,将其他部分采用变量指示符替换,得到备选日志模板,若该不同的部分仅包括变量指示符所在部分之外的其他部分,可以直接将历史日志模板作为备选日志模板。
值得说明的是,在前述比较过程中,当该日志记录R的长度小于历史日志模板的长度,历史日志模板长出日志记录R的部分可以确定为相同的部分,则保留历史日志模板的该部分;当该日志记录R的长度大于历史日志模板的长度,日志记录R长出历史日志模板的部分可以确定为无效部分,将该部分忽略,也即是最终得到的备选日志模板中没有该部分;或者,日志记录R长出历史日志模板的部分可以确定为不同部分,将该部分以变量指示符替换后,添加在历史日志模板的对应位置(即末尾)。通常情况下,日志记录的长度以该日志记录所包括词条的个数表示。
其中,分析设备可以通过对位比较的方式来进行日志记录R与第一日志记录组的历史日志模板进行比较,以确定相同和不同的部分。所谓对位比较,即将日志记录与历史日志模板相同位置的词条进行比较。
例如,变量指示符为“*”,假设历史日志模板为:“Good morning,Bill Gates.”,日志记录X9为:Good morning,Ma Hua Teng.通过对位比较,历史日志模板与日志记录X9的前两个词条均相同,则保持历史日志模板这两个词条不变(相当于与日志记录X9合并),历史日志模板与日志记录X9的前第三个和第四个词条不同,则历史日志模板中的对应位置用一个“*”代替,由于日志记录X9的长度大于历史日志模板,因此可以将其第五个词条“Teng”忽略。所以,最终得到的备选日志模板为:“Good morning**”。
步骤D12、分析设备判断该日志记录与生成的备选日志模板是否匹配。
可选地,分析设备可以计算日志记录与生成的备选日志模板的匹配度,基于计算得到的匹配度,判断日志记录与备选日志模板是否匹配。
示例的,该日志记录与备选日志模板的匹配度可以基于匹配度计算公式确定,该匹配度计算公式为:
P=f1/(f-f2);
其中,P表示日志记录与备选日志模板的匹配度,f1表示备选日志模板中非变量指示符的个数,f表示日志记录与备选日志模板的最大词条个数,也即是两者词条个数的最大值,f2表示备选日志模板中变量指示符的个数。
仍然以前述步骤D11的例子为例,历史日志模板中不为“*”的词条个数为2(分别为“Good”和“Morning”),所以f1=2,历史日志模板与日志记录X9的词条个数分别为4和5,取最大值,为5,则f=5,历史日志模板中有2个“*”,f2=2,所以匹配度P=2/(max(4,5)-2)=0.67。
可选地,分析设备可以比较计算得到的匹配度与匹配度阈值,以判断日志记录与备选日志模板是否匹配。例如,当匹配度大于匹配度阈值,确定日志记录与备选日志模板匹配,当匹配度不大于匹配度阈值,确定日志记录与备选日志模板不匹配。
仍然以前述步骤D11的例子为例,匹配度阈值=0.5.前述计算得到的匹配度为0.67,大于0.5,因此确定日志记录与备选日志模板匹配。
步骤D13、当日志记录与备选日志模板匹配,分析设备将备选日志模板确定为第一日志记录组的新的日志模板。
当日志记录与备选日志模板匹配,说明日志记录与备选日志模板较为相似,则基于日志记录与历史日志模板,生成的备选日志模板是可以接受的日志模板,因此,分析设备可以将备选日志模板确定为第一日志记录组的新的日志模板。在一种可选示例中,分析设备可以删除第一日志记录组中的原来的历史日志模板。
步骤D14、当日志记录与备选日志模板不匹配,分析设备将备选日志模板回退为历史日志模板和日志记录。
当日志记录与备选日志模板不匹配,说明日志记录与备选日志模板不相似,则基于日志记录与历史日志模板,生成的备选日志模板是不可接受的日志模板,因此可以拒绝日志记录与历史日志模板合并成备选日志模板,则分析设备将备选日志模板回退为历史日志模板和日志记录。
当在第一日志记录组存在多个历史日志模板时,在一种可选方式中,对于任一日志记录,分析设备可以将该日志记录分别与该多个日志模板中的每个历史日志模板进行合并,得到备选日志模板,该合并过程参考前述步骤D11的过程。分析设备将该任一日志记录分别与每个备选日志模板进行匹配,该匹配过程参考前述步骤D12的过程。其中,该任一日志记录与各个日志模板的合并过程可以并行执行,也可以串行执行;同理,匹配过程可以并行执行也可以串行执行。在另一种可选方式中,对于任一日志记录,分析设备可以依次扫描各个历史日志模板,对于每个扫描到的历史日志模板,执行前述步骤D11至D14的过程。当任一日志记录与任一备选日志模板匹配,在将该第一备选日志模板获取为第一日志记录组的新的日志模板后,或者扫描完全部历史日志模板后,停止动作。
其中,当该任一日志记录仅与一个备选日志模板匹配,将该一个备选日志模板确定为第一日志记录组的新的日志模板;当该任一日志记录与多个备选日志模板匹配,可以在匹配的多个备选日志模板中确定目标日志模板作为第一日志记录组的新的日志模板,该目标日志模板为匹配的多个备选日志模板中匹配度最高的模板或者随机选择的模板;当该任一日志记录与所有备选日志模板均不匹配,分析设备在将所有备选日志模板回退为历史日志模板和日志记录后,可以将从日志记录提取的日志模板,添加为第一日志记录组的新的日志模板。
需要说明的是,当第一日志记录组不存在历史日志模板时,可以将从日志记录提取的日志模板,添加为第一日志记录组的新的日志模板。
可选地,前述分析设备从日志记录提取日志模板的过程可以有多种实现方式。在第一种示例中,分析设备可以直接将日志记录作为日志模板,也即是提取的日志模板为日志记录本身;在第二种示例中,由于日志记录中的一些指定字符在多数情况下都是变量,因此,可以将这些指定字符进行采用变量指示符替换,从而生成从该日志记录所提取的日志模板。示例的,该指定字符可以为数字,该固定字符可以为数字或者其他符号。例如1或2,*等。
第二种实现方式,分析设备进行历史日志模板与日志记录的匹配,再基于匹配结果确定日志模板,该过程包括:
步骤D15、对于每个第一日志记录组中的每行日志记录,分析设备可以将该行日志记录与第一日志记录组的历史日志模板进行比较。
分析设备最终得到的同一第一日志记录组中日志记录的长度可能相同也可能不同。本申请针对这两种情况,提供了两种比较方式:
第一种情况,同一第一日志记录组中日志记录的长度不同。如此,将日志记录与历史日志模板分别视为词条序列,可以通过求两者的最长公共子序列(Longest CommonSubsequence,LCS)的方式来进行日志记录与第一日志记录组的历史日志模板进行比较。在第一种示例中,若确定的最长公共子序列的长度(即最长公共子序列中的词条总数)在日志记录长度(即日志记录的词条总数)中的占比大于第三比例阈值,确定日志记录与该历史日志模板匹配;若确定的最长公共子序列的长度在日志记录长度中的占比不大于第三比例阈值,确定日志记录与该历史日志模板不匹配。在第二种示例中,若日志记录中除最长公共子序列之外的其他序列的长度(即日志记录的词条总数减去最长公共子序列中的词条总数)在日志记录长度中的占比小于第四比例阈值,确定日志记录与该历史日志模板匹配;若其他序列的长度在日志记录长度中的占比不小于第四比例阈值,确定日志记录与该历史日志模板不匹配。在第三种示例中,若最长公共子序列的长度大于第一长度阈值阈值,确定日志记录与该历史日志模板匹配;若最长公共子序列的长度不大于第一长度阈值,确定日志记录与该历史日志模板不匹配。确定日志记录与第一日志记录组的历史日志模板是否匹配还有其他方式,本申请实施例对此不做限定。
求取日志记录与历史日志模板的最长公共子序列即求取两者的最长的公共部分的子序列。示例的,可以通过递归方式或者动态规划方式求取最长公共子序列。以每个词条包括一个语义单元为例,假设在一个第一日志记录组中,日志记录X10为:“User Yang XiaoYu has been logged in”;第一历史日志模板为:“User*has been logged in”。则两者的最长公共子序列为:“User has been logged in”。假设在另一个第一日志记录组中,日志记录X11为:“User Yang Xiao Yu has been logged in”;第二历史日志模板为:“User**registered successfully”。则两者的最长公共子序列为:“User”。
以前述第三种示例的判定方式为例,假设第一长度阈值为3,则日志记录X10的最长公共子序列的长度为5,确定日志记录X10与该第一历史日志模板匹配。日志记录X11的最长公共子序列的长度为1,确定日志记录X11与该第二历史日志模板不匹配。
第二种情况,同一第一日志记录组中日志记录的长度相同。如此,可以通过对位比较的方式来进行日志记录与第一日志记录组的历史日志模板进行比较。在第一种示例中,若相同词条的个数在日志记录长度(即日志记录的词条总数)中的占比大于第一比例阈值,确定日志记录与该历史日志模板匹配;若相同词条的个数在日志记录长度中的占比不大于第一比例阈值,确定日志记录与该历史日志模板不匹配。在第二种示例中,若不同词条(该不同词条指的是一行日志记录中与另一日志记录不同的词条)的个数在日志记录长度中的占比小于第二比例阈值,确定日志记录与该历史日志模板匹配;若不同词条的个数在日志记录长度中的占比不小于第二比例阈值,确定日志记录与该历史日志模板不匹配;在第三种示例中,若相同词条的个数在日志记录长度中的占比大于第一比例阈值,且不同词条的个数小于第一个数阈值,确定日志记录与该历史日志模板匹配;若相同词条的个数在日志记录长度中的占比不大于第一比例阈值,或不同词条的个数不小于第一个数阈值,确定日志记录与该历史日志模板不匹配。在第四种示例中,若相同词条的个数大于第二个数阈值,确定日志记录与该历史日志模板匹配;若相同词条的个数不大于第二个数阈值,确定日志记录与该历史日志模板不匹配。在第五种示例中,若不同词条的个数小于第三个数阈值,确定日志记录与该历史日志模板匹配;若不同词条的个数不小于第三个数阈值,确定日志记录与该历史日志模板不匹配。确定日志记录与第一日志记录组的历史日志模板是否匹配还有其他方式,本申请实施例对此不做限定。
假设日志记录X10为:“User Yang Xiao Yu has been logged in”;历史日志模板为:“User***has been logged in”。假设每个词条包括一个语义单元,则分别将“User”、“Yang”、“Xiao”、“Yu”、“has”、“been”、“logged”和“in”与“User”、“*”、“*”、“*”、“has”、“been”、“logged”和“in”一一对应比较。以前述第一种示例的判定方式为例,相同词条的个数为8,日志记录长度为8,假设第一比例阈值为1/2,8/8大于1/2,确定日志记录与该历史日志模板匹配。
需要说明的是,通常情况下一个第一日志记录组中存在一个或多个日志模板。在第一日志记录组存在多个日志模板时,对于任一日志记录,可以将该日志记录分别与该多个日志模板中的每个日志模板进行比较,该比较过程参考前述两种情况的过程;或者,计算该日志记录与多个日志模板中每个日志模板的距离(如采用Jaccard距离函数计算该距离),将给日志记录与距离最近的日志模板进行比较,如此能够减少运算代价。
步骤D16、当该日志记录与历史日志模板匹配,基于该日志记录与历史日志模板,确定第一日志记录组的新的日志模板。
基于该日志记录与历史日志模板,确定第一日志记录组的新的日志模板的过程可以称为日志记录与历史日志模板的合并过程。
在第一种示例中,由于历史日志模板是已提取好的模板,而该日志记录又与该历史日志模板匹配,因此,可以直接将历史日志模板作为第一日志记录组的新的日志模板。
在第二种示例中,由于历史日志模板和日志记录可能存在一些不同的部分,这些不同的部分可以认为是变量部分。分析设备可以将历史日志模板中,与该日志记录不同的部分采用变量指示符替换;或者,分析设备先判断历史日志模板中与该日志记录不同的部分是否仅为变量指示符所在部分,若该不同的部分还包括变量指示符所在部分之外的其他部分,将其他部分采用变量指示符替换,得到新的日志模板,若该不同的部分仅包括变量指示符所在部分之外的其他部分,可以直接将历史日志模板作为新的日志模板。如此处理可以得到更为准确的日志模板。
上述两种示例中,可以采用新的日志模板后更新对应的历史日志模板,例如删除历史日志模板,或者采用新的日志模板后覆盖对应的历史日志模板,从而保证第一日志记录组中不存在重复的日志模板。
值得说明的是,与前述第一种情况相应的,由于无需保证日志模板与日志记录的长度一致性,进行替换操作时,一个变量指示符可以替换一个或多个连续的词条。
与前述第二种情况相应的,为了保证日志模板与日志记录的长度一致性,进行替换操作时,一个变量指示符仅替换一个词条,一个变量指示符在日志模板中的长度视为1。
步骤D17、当该日志记录与历史日志模板不匹配,将从该日志记录提取的日志模板,添加为第一日志记录组的新的日志模板。
当该日志记录与历史日志模板不匹配,说明第一日志记录组中当前不存在与该日志记录匹配的日志模板,需要生成一个与该日志记录对应的新的日志模板。该生成新的日志模板的过程可以参考前述步骤D14,本申请实施例对此不再赘述。
在步骤303中,分析设备通常通过遍历日志中的每行日志记录来确定至少一个第一日志记录组。则前述分别提取每个第一日志记录组中的日志模板的过程可以在所有日志记录分组完成后执行,也可以在日志记录的分组过程中实时执行。其中,在日志记录的分组过程中实时提取每个第一日志记录组中的日志模板,可以减少模板提取的时延,提高模板提取过程的整体时效性。
示例的,当采用前述第一种实现方式确定第一日志记录组中的日志模板时,以在日志记录的分组过程中实时提取每个第一日志记录组中的日志模板为例,与前述步骤303对应的,对于每个第一日志记录组,该分别提取每个第一日志记录组中的日志模板的过程可以包括:在接收到一行日志记录后,将接收到的日志记录与历史日志模板进行合并,得到备选日志模板,当接收到的日志记录与备选日志模板匹配,将备选日志模板确定为第一日志记录组的新的日志模板,当接收到的日志记录与备选日志模板不匹配,进行模板回退,并将从接收到的日志记录提取的日志模板,添加为第一日志记录组的新的日志模板。
假设匹配度阈值为50%,采用对应的第一数字签名标识第一日志记录组,变量指示符为通配符,将第十一日志记录X11至第十四日志记录X14依次划分至同一日志记录组,图13至图16分别对相应的日志模板提取过程进行示意性介绍。
如图13所示,假设第十一日志记录X11为:“Good morning,Bill Gaga”。其第一数字签名为90,由于日志记录组中没有对应第一数字签名为90的日志记录组,分析设备创建一个日志记录组90,用来存储第一数字签名等于90的日志记录。由于在此之前日志记录组90没有历史日志模板,因此可以默认第一条日志记录,即第十一日志记录X11与历史日志模板合并得到的备选日志模板1为第十一日志记录X11本身,两者的匹配度为100%。并将该备选日志模板1确定为新的日志模板,即日志模板1,其与第十一日志记录X11对应。
如图14所示,假设第十二日志记录X12为:“Good morning,Ma Xiao Ming”。其第一数字签名为90,分析设备将该第十二日志记录X12划分至日志记录组90中。此时,日志记录组90中的历史日志模板为日志模板1,将该第十二日志记录X12与日志模板1合并得到备选日志模板2:“Good morning,**”,并计算第十二日志记录X12与备选日志模板2的匹配度,该匹配度大于匹配度阈值,所以将备选日志模板2作为新的日志模板,即日志模板2,其与第十一日志记录X11以及第十二日志记录X12对应。
如图15所示,假设第十三日志记录X13为:“Order 123has been created”。其第一数字签名为90,分析设备将该第十三日志记录X13划分至日志记录组90中。此时,日志记录组90中的历史日志模板为日志模板2,将该第十三日志记录X13与日志模板2合并得到备选日志模板3:“****”,并计算第十三日志记录X13与备选日志模板3的匹配度,该匹配度小于匹配度阈值,所以将备选日志模板3回退为日志模板2和第十三日志记录X13,并基于第十三日志记录X13生成新的日志模板,即日志模板3:“Order 123has been created”,其与第十三日志记录X13对应。此时,日志记录组90中有两个日志模板,分别为日志模板2和日志模板3。
如图15所示,假设第十五日志记录X15为:“Order 456has been created”。其第一数字签名为90,分析设备将该第十五日志记录X15划分至日志记录组90中。此时,日志记录组90中的历史日志模板为日志模板2和日志模板3,将该第十五日志记录X15与日志模板2合并得到备选日志模板4:“****”,并计算第十五日志记录X15与备选日志模板3的匹配度,该匹配度不大于匹配度阈值,所以将备选日志模板4回退为日志模板2和第十五日志记录X15;将该第十五日志记录X15与日志模板3合并得到备选日志模板5:“Order*has beencreated”,并计算第十五日志记录X15与备选日志模板5的匹配度,该匹配度大于匹配度阈值,将备选日志模板5作为新的日志模板,即日志模板4,其与第十四日志记录X14以及第十五日志记录X15对应。此时,日志记录组90中有两个日志模板,分别为日志模板2和日志模板4。
示例的,当采用前述第二种实现方式确定第一日志记录组中的日志模板时,以在日志记录的分组过程中实时提取每个第一日志记录组中的日志模板为例,与前述步骤303对应的,对于每个第一日志记录组,该分别提取每个第一日志记录组中的日志模板的过程可以包括:在接收到一行日志记录后,将接收到的日志记录与历史日志模板进行比较,当接收到的日志记录与历史日志模板匹配,基于接收到的日志记录与历史日志模板,确定第一日志记录组的新的日志模板,当接收到的日志记录与历史日志模板不匹配,将从接收到的日志记录提取的日志模板,添加为第一日志记录组的新的日志模板。
以前述第二日志为例,假设分组结果为图17所示的分组结果,则对于第一日志记录组0,在接收到第0行日志记录后,第一日志记录组0的历史日志模板为空,第0行日志记录与历史日志记录不匹配,提取第0行日志记录的日志模板,添加为第一日志记录组的新的日志模板:“mod_jk child workerEnv in error state6”;在接收到第4行日志记录后,将接收到的日志记录与历史日志模板:“mod_jk child workerEnv in error state 6”进行比较,由于接收到的第4行日志记录与历史日志模板匹配,可以将第一日志记录组0的历史日志模板“mod_jk child workerEnv in error state*”作为新的日志模板。第一日志记录组1和第一日志记录组2的模板提取方式与该模板提取方式相同,最终提取到的每个第一日志记录组的模板如图17所示,本申请实施例对此不再赘述。
需要说明的是,前述历史日志模板和新的日志模板是相对的概念,历史日志模板指的是当前时刻已存在的日志模板,新的日志模板指的是当前时刻新生成的日志模板。
步骤D2、分析设备基于每个第一日志记录组的日志模板,确定日志的日志模板。
可选的,基于每个第一日志记录组的日志模板,确定日志的日志模板的过程可以通过以下三种方式实现:
第一种方式,对至少一个第一日志记录组的日志模板进行聚类处理,得到日志的日志模板。
聚类处理实质上是一种分组方式,用于使相似的处理对象归为一类,不相似的处理对象归为不同类。本申请实施例中,分析设备在获取了至少一个第一日志记录组的一个或多个日志模板后,可以通过聚类处理,将该一个或多个日志模板进行分类,尤其在获取的日志模板有多个时,可能存在不同的第一日志记录组的日志模板相似的情况,通过分类,可以把相似的日志模板划分为一类日志模板,从而将划分得到的一类或多类日志模板作为日志的日志模板。在后续呈现给用户时,可以将该一类或多类日志模板呈现给用户,以使用户直观地看到日志中存在几类日志模板。示例的,该聚类处理可以为层次聚类,其处理过程参考前述的层次聚类过程,本申请实施例对此不做赘述。
通过层次聚类得到的日志模板具有层次关系,用户可以调节聚类的精度(也称粒度),以得到不同的聚类结果。
第二种方式,对至少一个第一日志记录组的日志模板进行合并(merging)处理,得到日志的日志模板。
合并处理指的是将相同或相似的处理对象整合成一个对象的过程,其处理效果类似于去重处理的效果。本申请实施例中,对至少一个第一日志记录组的日志模板进行合并处理,得到日志的日志模板的过程包括:在至少一个第一日志记录组的日志模板包括至少两个日志模板时,对于每两个日志模板,检测两个日志模板的常量部分的相似度是否为1;当两个日志模板的常量部分的相似度为1,将两个日志模板中的一个日志模板的变量部分采用一个变量标识符替换,并删除另一日志模板(相当于保留任一日志模板的常量部分,并将常量部分之间原变量部分的位置插入变量标识符)。示例的,该变量标识符可以为通配符“*”。其中,两个日志模板的常量部分的相似度可以通过计算两个日志模板的常量部分的距离确定。该相似度可以采用杰卡德相似度(Jaccard similarity,也称杰卡德系数)算法计算。需要说明的是,当两个日志模板的常量部分的相似度不为1,不对两个日志模板进行处理。
例如两个模板分别为:“User**has logged in”和“User***has logged in”,两者的常量部分均包含四个词条:{User,has,logged,in}。两者的相似度为1。因此,可以将“User**has logged in”的变量部分“**”替换为“*”,删除“User***has logged in”,得到的是合并后的日志模板:“User*has logged in”。
第三种方式,将至少一个第一日志记录组的日志模板,作为日志的日志模板。
由于在多数情况下,每个第一日志记录组的日志模板通常为一个,且若前述第一日志记录组的分组方式得当,相同或相似的日志模板较少,则可以不进行聚类处理或合并处理,直接将获取的各个日志记录组的日志模板作为日志的日志模板。
本申请实施例中,该分析设备可以支持前述三种方式中一种或多种方式。终端可以在用户界面全部呈现该多个方式的触发按钮(或图标),或者以滚动方式呈现该多个方式的触发按钮,还可以呈现该多个方式的触发按钮中使用频率较高的一个或多个方式的触发按钮(其他方式的触发按钮可以由用户再次触发其他按钮后来显示,该其他按钮可以为下拉按钮)等,本申请实施例对此不做限定。用户想要通过观看某一方式所对应的日志的日志模板时,通过点击等方式触发该某一方式所对应的触发按钮,相应的,终端接收用户的选择指令,该选择指令携带有该某一方式的标识,终端将该选择指令发送至分析设备,分析设备基于获取的选择指令采用对应的方式获取日志的日志模板,并由终端在用户界面呈现给用户。其中,采用第一种方式呈现日志模板时,可以以多层文件目录结构或树结构(如二叉树)的方式呈现日志模板;采用前述第二种或第三种方式呈现日志模板时,若日志模板有多个,可以以列表方式呈现该多个日志模板。
值得说明的是,前述步骤304也可以通过聚类算法实现,例如层次聚类算法,本申请实施例对此不做赘述。
步骤305、分析设备基于日志的日志模板,对日志进行异常检测。
在一种可选方式中,分析设备基于日志的日志模板,对日志进行特征提取;并基于提取的日志的特征进行异常检测。
日志的特征指的是日志包含的日志记录所具有的特征。示例的,其可以包括:日志模板的出现次数、日志模板的出现频率和/或日志模板的出现时段。其中,日志模板的出现次数指的是日志中该日志模板对应的日志记录的个数;日志模板的出现频率指的是该日志模板对应的日志记录的个数与日志所包含的日志记录总个数的比值;日志模板的出现时段指的是该日志模板对应的日志记录的发生时刻或采集时刻所属时段。
示例的,假设第一日志模式为日志中的任一日志模式,对于第一日志模式,分析设备可以将日志划分为多个时间窗,统计每个时间窗中包括的每行日志记录,以检测到与第一日志模式匹配的日志记录,并统计该时间窗中所需要确定日志的特征,如该第一日志模板的出现次数。分析设备通过比较多个时间窗中的日志的特征,将与其他时间窗特征差距大于指定差距阈值的时间窗确定为异常时间窗,则该异常时间窗中的第一日志模式的日志记录为出现异常的日志记录。前述多个时间窗可以为固定大小,且互不重叠的时间窗,或者为通过滑窗算法确定的时间窗。
例如,当待分析的特征为第一日志模板的出现次数时,分析设备在发现第一日志模板的出现次数明显较高(例如与其他时间窗,或者所有时间窗中第一日志模板的出现次数的均值的差值为正,且该差值大于指定差值阈值)的时间窗,分析设备可以标定位热事件,发出告警信息;分析设备在发现第一日志模板的出现次数明显较低(例如与其他时间窗,或者所有时间窗中第一日志模板的出现次数的均值的差值为负,且该差值的绝对值大于指定差值阈值)的时间窗,分析设备可以标定位冷事件,发出告警信息。
值得说明的是,终端可以显示分析设备所确定的日志的日志模板,用户可以指定目标日志模板,相应的,终端接收到模板选择指令,将携带目标日志模板的标识的模板选择指令发送至分析设备,分析设备对该目标日志模板进行异常检测,该检测过程可以参考前述第一日志模板的异常检测过程。如此,分析设备可以根据用户指示进行特定的日志模板的异常检测,提高异常检测的针对性,保证用户体验。
在二种可选方式中,分析设备基于日志的日志模板,检测未知事件。分析设备可以采用每个日志模板分别与日志中的日志记录进行匹配,当存在与所有日志模板均不匹配的日志记录时,确定该日志记录为未知日志记录,该未知日志记录所对应的事件即为未知事件。其可能是异常事件。
在异常检测场景中,分析设备还可以其他方式对日志中的异常进行检测,本申请实施例对此不做限定。
需要说明的是,前述步骤302中,日志中的日志记录在分组时,采用了哈希码,因此,日志记录的分布规则遵循哈希分布规则,即键-值(key-value)分布规则,如此可以实现负载均衡。
为了便于读者理解,本申请实施例对哈希分布原理进行简单介绍。哈希分布是基于哈希函数的一种数据分布方法,哈希函数也可以称为散列函数。哈希函数是基于数据的键(key,也称键值,在分布式系统中也称分布键值),得到值(value,也称哈希码)的一种函数。即value=f(key),函数f即为哈希函数。以表1为例,假设哈希函数为f(key)=key mod5,“mod”表示取模,即该哈希函数为取模运算(Module Operation)函数。则假设key分别为1、2、3、4、5、6、7、8和9,则对应的value分别为1、2、3、4、0、1、2、3和4。
表1
key 1 2 3 4 5 6 7 8 9
value 1 2 3 4 0 1 2 3 4
由上可知,key为1和6时,value都为1。因此,采用哈希函数确定value可能存在不同的key对应相同的value的情况,这种情况称为哈希冲突。哈希桶算法是一种特殊的哈希算法,其能够解决哈希冲突。哈希桶为放置不同key链表(也称哈希表)的容器,该哈希桶也称f(key)集合,或value集合。同一哈希桶对应的哈希码相同。在本申请实施例中,参考前述步骤C2,对应于步骤C2的一种可选示例中,可以设置哈希桶的个数为获取的不同的第一哈希码的个数。多个第一哈希码与多个哈希桶一一对应。示例的,可以采用第一哈希码值作为哈希桶的标识,如索引或编号,每个哈希桶存放具有相同第一哈希码的key,同一个哈希桶中冲突的key之间用单向链表进行存储,这样就解决了哈希冲突。在查找与key对应的数据时,只需要通过key索引到对应第一哈希码的哈希桶,然后从哈希桶的首地址对应的节点开始查找,即按照链表顺序查找,对比key的值(即第一哈希码),直到找到对应key,再基于查找到的key索引到对应的数据。如表1所示,假设表1中的哈希码为第一哈希码,不同的第一哈希码有5个,因此哈希桶有5个,key为1和6时,存储在哈希桶1中,key为2和7时,存储在哈希桶2中;key为3和8时,存储在哈希桶3中;key为4和9时,存储在哈希桶4中;key为5时,存储在哈希桶0中。
对应于步骤C2的另一种可选示例中,可以设置哈希桶的个数为获取的不同的第一简化哈希码的个数。多个第一简化哈希码与多个哈希桶一一对应。示例的,可以采用第一简化哈希码作为哈希桶的标识,如索引或编号,每个哈希桶存放具有相同第一简化哈希码的key,同一个哈希桶中冲突的key之间用单向链表进行存储,这样就解决了哈希冲突。在查找与key对应的数据时,只需要通过key索引到对应第一简化哈希码的哈希桶,然后从哈希桶的首地址对应的节点开始查找,即按照链表顺序查找,对比key的值,直到找到对应key,再基于查找到的key索引到对应的数据。
由上可知,不同的第一简化哈希码的个数通常小于不同的第一哈希码的个数,哈希桶个数相应减少,因此,采用前述另一种可选示例,可以减少哈希桶个数,避免哈希桶分布过于分散。
需要说明的是,前述实施例仅以哈希函数为取模的函数为例进行说明,实际上该哈希函数还可以为取余的函数(此时,该哈希函数为取余运算(Complementation)函数,哈希桶的个数为模数的值),或者其他函数,本申请实施例对此不做限定。
参考前述介绍,本申请实施例可以引入哈希桶算法来进行日志记录的分布,从而避免哈希冲突,在这种情况下,通常以哈希桶为单位来标识分布的数据。因此,前述每个第一日志记录组可以由一个哈希桶表示,每个哈希桶由对应第一数字签名(即前述第一哈希码或者第一简化哈希码)标识。若存在第二日志记录组,每个第二日志记录组也可以由一个哈希桶表示。每个哈希桶由对应第二数字签名(即前述第二哈希码或者第二简化哈希码)标识。
本申请实施例提供的日志模板提取方法的步骤先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,例如,在其他应用场景中,如日志压缩或关键词检索等,可以不执行前述步骤305,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
综上所述,本申请实施例中,通过将日志的多行日志记录中每行日志记录中的指定字符删除,可以有效减少计算复杂度,并且避免了指定字符对日志模板提取过程的干扰,从而提高提取日志模板的进度。
示例的,由于日志记录中的变量符号,如时间戳和IP地址,包括大量数字和标点符号,当指定字符为数字和/或标点符号时,可以有效减少这些变量符号对日志模板提取的干扰,提高日志模板提取精度。
当第一日志记录组有多组时,对于各个第一日志记录组的处理过程可以并行执行,从而减少运算时延,每次执行处理过程时所需要运算的数据量远远小于日志整体的数据量,有效降低运算代价,同时提高运算效率。
本申请实施例提供一种日志模板提取装置40,如图18所示,所述装置包括:
预处理模块40,用于将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录;确定模块402,用于基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同所述第一日志记录组包括所述日志中的不同行日志记录;处理模块403,用于分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板。
综上所述,本申请实施例中,通过将日志的多行日志记录中每行日志记录中的指定字符删除,可以有效减少计算复杂度,并且避免了指定字符对日志模板提取过程的干扰,从而提高提取日志模板的进度。
可选地,所述预处理模块401,用于:获取所述日志中每行日志记录的至少一个词条,将所述每行日志记录的每个词条中的所述指定字符删除,得到所述预处理后的每行日志记录;或者,将所述多行日志记录中每行日志记录中的指定字符删除,得到简化后的每行日志记录,获取所述多行日志的简化后的每行日志记录的至少一个词条,得到所述预处理后的每行日志记录。
可选地,所述指定字符为数字和/或标点符号。
可选地,如图19所示,所述确定模块402,包括:
拼接子模块4021,用于将所述预处理后的每行日志记录的第一指定位置的连续的m个非空词条拼接得到第一字符签名,m为正整数;确定子模块4022,用于基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名;分组子模块4023,用于基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,每个所述第一日志记录组包括的所有日志记录所对应的第一数字签名相同。
可选地,所述分组子模块4023,用于:
将所述预处理后的每行日志记录的第二指定位置的连续的n个非空词条拼接得到第二字符签名,且所述第一指定位置与所述第二指定位置不同,所述n为正整数;基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到至少一个第二日志记录组;每个所述第二日志记录组包括的所有日志记录所对应的第一数字签名相同;基于所述每行日志记录的第二数字签名,对所述至少一个第二日志记录组中每个第二日志记录组进行分组,得到所述至少一个第一日志记录组;每个所述第一日志记录组包括的所有日志记录所对应的第二数字签名相同。
可选地,所述m个非空词条为所述每行日志记录的前m个非空词条。
可选地,所述确定子模块4022,用于:
将所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定为所述每行日志记录的第一数字签名;或者,对所述预处理后的每行日志记录的第一哈希码进行简化处理,得到所述预处理后的每行日志记录的第一简化哈希码,将所述预处理后的每行日志记录的第一简化哈希码,确定为所述每行日志记录的第一数字签名。
可选地,所述简化处理包括取余处理或取模处理。
可选地,所述处理模块403,用于:
对于每个所述第一日志记录组中的每行日志记录,基于所述日志记录与所述第一日志记录组的历史日志模板,生成备选日志模板;当所述日志记录与生成的备选日志模板中任一备选日志模板匹配,将所述任一备选日志模板确定为所述第一日志记录组的新的日志模板;当所述日志记录与所有所述备选日志模板均不匹配,将所有所述备选日志模板回退为对应的历史日志模板和所述日志记录,并将从所述日志记录提取的日志模板,添加为所述第一日志记录组的新的日志模板。
可选地,图20示意性地提供本申请所述计算机设备的一种可能的基本硬件架构。该计算机设备可以为服务器。
参见图20,计算机设备500包括处理器501、存储器502、通信接口503和总线504。
计算机设备500中,处理器501的数量可以是一个或多个,图20仅示意了其中一个处理器501。可选地,处理器501,可以是中央处理器(central processing unit,CPU)。如果计算机设备500具有多个处理器501,多个处理器501的类型可以不同,或者可以相同。可选地,计算机设备500的多个处理器501还可以集成为多核处理器。
存储器502存储计算机指令和数据;存储器502可以存储实现本申请提供的日志模板提取方法所需的计算机指令和数据,例如,存储器502存储用于实现日志模板提取方法的步骤的指令。存储器502可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口503可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口503用于计算机设备500与其它计算机设备或者终端进行数据通信。
总线504可以将处理器501与存储器502和通信接口503连接。这样,通过总线504,处理器501可以访问存储器502,还可以利用通信接口503与其它计算机设备或者终端进行数据交互。
在本申请中,计算机设备500执行存储器502中的计算机指令,使得计算机设备500实现本申请提供的日志模板提取方法,或者使得计算机设备500部署日志模板提取装置。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由服务器的处理器执行以完成本申请各个实施例所示的日志模板提取方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本申请实施例提供一种分析系统,包括:终端和分析设备,该分析设备包括前述任一所述的日志模板提取装置。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机的可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质,或者半导体介质(例如固态硬盘)等。
需要说明的是:上述实施例提供的日志模板提取装置在进行日志模板提取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的日志模板提取装置与日志模板提取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
在本申请中,术语“第一”和“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“多个”指两个或两个以上,除非另有明确的限定。A参考B,指的是A与B相同或者A为B的简单变形。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (20)

1.一种日志模板提取方法,其特征在于,所述方法包括:
将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录;
基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同所述第一日志记录组包括所述日志中的不同行日志记录;
分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板。
2.根据权利要求1所述的方法,其特征在于,所述将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录,包括:
获取所述日志中每行日志记录的至少一个词条,将所述每行日志记录的每个词条中的所述指定字符删除,得到所述预处理后的每行日志记录;
或者,将所述多行日志记录中每行日志记录中的指定字符删除,得到简化后的每行日志记录,获取所述多行日志的简化后的每行日志记录的至少一个词条,得到所述预处理后的每行日志记录。
3.根据权利要求1或2所述的方法,其特征在于,所述指定字符为数字和/或标点符号。
4.根据权利要求1至3任一所述的方法,其特征在于,所述基于预处理后的每行日志记录,确定至少一个第一日志记录组,包括:
将所述预处理后的每行日志记录的第一指定位置的连续的m个非空词条拼接得到第一字符签名,m为正整数;
基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名;
基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,每个所述第一日志记录组包括的所有日志记录所对应的第一数字签名相同。
5.根据权利要求4所述的方法,其特征在于,所述基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,包括:
将所述预处理后的每行日志记录的第二指定位置的连续的n个非空词条拼接得到第二字符签名,且所述第一指定位置与所述第二指定位置不同,所述n为正整数;
基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到至少一个第二日志记录组;每个所述第二日志记录组包括的所有日志记录所对应的第一数字签名相同;
基于所述每行日志记录的第二数字签名,对所述至少一个第二日志记录组中每个第二日志记录组进行分组,得到所述至少一个第一日志记录组;每个所述第一日志记录组包括的所有日志记录所对应的第二数字签名相同。
6.根据权利要求4或5所述的方法,其特征在于,
所述m个非空词条为所述每行日志记录的前m个非空词条。
7.根据权利要求4至6任一所述的方法,其特征在于,所述基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名,包括:
将所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定为所述每行日志记录的第一数字签名;
或者,对所述预处理后的每行日志记录的第一哈希码进行简化处理,得到所述预处理后的每行日志记录的第一简化哈希码,将所述预处理后的每行日志记录的第一简化哈希码,确定为所述每行日志记录的第一数字签名。
8.根据权利要求7所述的方法,其特征在于,所述简化处理包括取余处理或取模处理。
9.根据权利要求1至8任一所述的方法,其特征在于,所述分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板,包括:
对于每个所述第一日志记录组中的每行日志记录,基于所述日志记录与所述第一日志记录组的历史日志模板,生成备选日志模板;
当所述日志记录与生成的备选日志模板中任一备选日志模板匹配,将所述任一备选日志模板确定为所述第一日志记录组的新的日志模板;
当所述日志记录与所有所述备选日志模板均不匹配,将所有所述备选日志模板回退为对应的历史日志模板和所述日志记录,并将从所述日志记录提取的日志模板,添加为所述第一日志记录组的新的日志模板。
10.一种日志模板提取装置,其特征在于,所述装置包括:
预处理模块,用于将日志的多行日志记录中每行日志记录中的指定字符删除,得到预处理后的每行日志记录;
确定模块,用于基于预处理后的每行日志记录,确定至少一个第一日志记录组,不同所述第一日志记录组包括所述日志中的不同行日志记录;
处理模块,用于分别提取所述至少一个第一日志记录组中每个所述第一日志记录组中的日志模板,并基于提取的日志模板确定所述日志的日志模板。
11.根据权利要求10所述的装置,其特征在于,所述预处理模块,用于:
获取所述日志中每行日志记录的至少一个词条,将所述每行日志记录的每个词条中的所述指定字符删除,得到所述预处理后的每行日志记录;
或者,将所述多行日志记录中每行日志记录中的指定字符删除,得到简化后的每行日志记录,获取所述多行日志的简化后的每行日志记录的至少一个词条,得到所述预处理后的每行日志记录。
12.根据权利要求10或11所述的装置,其特征在于,所述指定字符为数字和/或标点符号。
13.根据权利要求10至12任一所述的装置,其特征在于,所述确定模块,包括:
拼接子模块,用于将所述预处理后的每行日志记录的第一指定位置的连续的m个非空词条拼接得到第一字符签名,m为正整数;
确定子模块,用于基于所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定所述每行日志记录的第一数字签名;
分组子模块,用于基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到所述至少一个第一日志记录组,每个所述第一日志记录组包括的所有日志记录所对应的第一数字签名相同。
14.根据权利要求13所述的装置,其特征在于,所述分组子模块,用于:
将所述预处理后的每行日志记录的第二指定位置的连续的n个非空词条拼接得到第二字符签名,且所述第一指定位置与所述第二指定位置不同,所述n为正整数;
基于所述每行日志记录的第一数字签名,对所述日志中的多行日志记录进行分组,得到至少一个第二日志记录组;每个所述第二日志记录组包括的所有日志记录所对应的第一数字签名相同;
基于所述每行日志记录的第二数字签名,对所述至少一个第二日志记录组中每个第二日志记录组进行分组,得到所述至少一个第一日志记录组;每个所述第一日志记录组包括的所有日志记录所对应的第二数字签名相同。
15.根据权利要求13或14所述的装置,其特征在于,
所述m个非空词条为所述每行日志记录的前m个非空词条。
16.根据权利要求13至15任一所述的装置,其特征在于,所述确定子模块,用于:
将所述预处理后的每行日志记录对应的第一字符签名的第一哈希码,确定为所述每行日志记录的第一数字签名;
或者,对所述预处理后的每行日志记录的第一哈希码进行简化处理,得到所述预处理后的每行日志记录的第一简化哈希码,将所述预处理后的每行日志记录的第一简化哈希码,确定为所述每行日志记录的第一数字签名。
17.根据权利要求16所述的装置,其特征在于,所述简化处理包括取余处理或取模处理。
18.根据权利要求10至17任一所述的装置,其特征在于,所述处理模块,用于:
对于每个所述第一日志记录组中的每行日志记录,基于所述日志记录与所述第一日志记录组的历史日志模板,生成备选日志模板;
当所述日志记录与生成的备选日志模板中任一备选日志模板匹配,将所述任一备选日志模板确定为所述第一日志记录组的新的日志模板;
当所述日志记录与所有所述备选日志模板均不匹配,将所有所述备选日志模板回退为对应的历史日志模板和所述日志记录,并将从所述日志记录提取的日志模板,添加为所述第一日志记录组的新的日志模板。
19.一种计算机设备,其特征在于,包括处理器和存储器;
在所述处理器执行所述存储器存储的计算机指令时,所述计算机设备执行权利要求1至9任一所述的模板提取方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机指令,所述计算机指令指示计算机设备执行权利要求1至9任一所述的模板提取方法。
CN201911401898.2A 2019-12-30 2019-12-30 日志模板提取方法及装置 Pending CN113128213A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911401898.2A CN113128213A (zh) 2019-12-30 2019-12-30 日志模板提取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911401898.2A CN113128213A (zh) 2019-12-30 2019-12-30 日志模板提取方法及装置

Publications (1)

Publication Number Publication Date
CN113128213A true CN113128213A (zh) 2021-07-16

Family

ID=76768535

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911401898.2A Pending CN113128213A (zh) 2019-12-30 2019-12-30 日志模板提取方法及装置

Country Status (1)

Country Link
CN (1) CN113128213A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115630626A (zh) * 2022-11-17 2023-01-20 国网湖北省电力有限公司信息通信公司 一种数据中心设备日志模板在线提取方法
CN116016245A (zh) * 2021-10-21 2023-04-25 中国移动通信有限公司研究院 一种网元测试方法及装置、处理设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116016245A (zh) * 2021-10-21 2023-04-25 中国移动通信有限公司研究院 一种网元测试方法及装置、处理设备
CN115630626A (zh) * 2022-11-17 2023-01-20 国网湖北省电力有限公司信息通信公司 一种数据中心设备日志模板在线提取方法
CN115630626B (zh) * 2022-11-17 2023-02-28 国网湖北省电力有限公司信息通信公司 一种数据中心设备日志模板在线提取方法

Similar Documents

Publication Publication Date Title
WO2021068547A1 (zh) 日志模板提取方法及装置
US11238069B2 (en) Transforming a data stream into structured data
CN107111625B (zh) 实现数据的高效分类和探索的方法和系统
US20180357214A1 (en) Log analysis system, log analysis method, and storage medium
US10740212B2 (en) Content-level anomaly detector for systems with limited memory
KR20070011432A (ko) 컴퓨터화된 시스템에서의 데이터 프로세싱
US11113317B2 (en) Generating parsing rules for log messages
CN113254255B (zh) 一种云平台日志的分析方法、系统、设备及介质
CN111950263B (zh) 一种日志解析方法、系统及电子设备
CN105630656A (zh) 基于日志模型的系统健壮性分析方法及装置
CN113128213A (zh) 日志模板提取方法及装置
CN112182025A (zh) 日志分析方法、装置、设备与计算机可读存储介质
CN111240942A (zh) 日志异常检测方法及装置
WO2016093839A1 (en) Structuring of semi-structured log messages
CN111966339B (zh) 埋点参数的录入方法、装置、计算机设备和存储介质
CN113760891A (zh) 一种数据表的生成方法、装置、设备和存储介质
CN117093556A (zh) 日志分类方法、装置、计算机设备及计算机可读存储介质
CN111930701A (zh) 日志结构化处理方法及装置
CN113535458B (zh) 异常误报的处理方法及装置、存储介质、终端
US11822578B2 (en) Matching machine generated data entries to pattern clusters
CN116822491A (zh) 日志解析方法及装置、设备、存储介质
CN114579580A (zh) 存储数据的方法、查询数据的方法和装置
CN114254081B (zh) 企业大数据搜索系统、方法及电子设备
CN117389908B (zh) 接口自动化测试用例的依赖关系分析方法、系统及介质
US20220058014A1 (en) Software recognition using tree-structured pattern matching rules for software asset management

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
TA01 Transfer of patent application right

Effective date of registration: 20220216

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

TA01 Transfer of patent application right
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination