一种快速在线日志聚类的方法及设备
技术领域
本申请涉及计算机领域,尤其涉及一种快速在线日志聚类的方法及设备。
背景技术
随着互联网服务的高速发展,互联网企业越来越重视服务系统的运营维护,运营维护关系到企业的切身利益。由于每一条日志都记载着日期、时间、运行事件、事件发起方等相关信息的描述,因此在智能运维中排查问题主要参考日志数据,通过日志发现和定位问题是一种常见的运维方法。然而随着计算机服务器性能的提升和应用服务工程巨大化,企业应用服务每时每刻都在产生海量日志文件,日志往往数据量巨大,通过聚类的方式将日志按照内容相似度合并,可以帮助运维人员有效掌握日志的全貌,快速定位问题所在。
目前多数应用服务器出现问题时,往往采用人工排查日志的方式,对系统运行的日志进行分类。然而,随着企业应用日志数量的增加,人工排查日志、对日志进行分类的效率较低。同时,聚类作为机器学习领域的重点研究方向,已经有了大量的算法来支持文本聚类,不过现有的方法更适合离线和少量数据的聚类,很难用于日志聚类,因为日志是海量数据,传统聚类方法会需要消耗巨量的内存和算力,同时日志会快速的、持续不断的产生,需要实时的对新产生的日志进行亚秒级聚类,传统聚类方法也无法做到。目前针对相关技术中造成日志分类效率低的问题和随机选取聚类中心造成分类结果可用性低的问题,尚未提出有效的解决方案。
发明内容
本申请的一个目的是提供一种快速在线日志聚类的方法及设备,解决现有技术中在常规的硬件资源条件下,难以实现高速、实时的日志聚类的问题,以满足海量数据的日志运维需求,提高日志数据分析效率。
根据本申请的一个方面,提供了一种快速在线日志聚类的方法,该方法包括:
获取待分析设备的当前日志数据;
构建日志数据的变量识别规则库和分隔符识别规则库;
使用所述变量识别规则库对所述当前日志数据进行变量分词处理,得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;
基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。
进一步地,所述构建日志数据的变量识别规则库和分隔符识别规则库,包括:
根据日志数据的变量名、正则表达式和相应的前置短语构建变量识别规则库;
根据日志数据分隔符的正则表达式和相应的前置短语构建分隔符识别规则库。
进一步地,所述使用所述变量识别规则库对所述日志数据进行变量分词处理,包括:
使用所述变量识别规则库按照所述变量名和前置短语识别出所述日志数据中的变量;
基于所述正则表达式将所述变量替换为预设格式的键值对,得到变量识别后的日志数据;
基于片段缓存的渐进式快速分词法对所述变量识别后的日志数据进行分词。
进一步地,所述基于片段缓存的渐进式快速分词法对所述第一分词结果进行分词之前,包括:
构建一个空的哈希表用于片段分词缓存,其中,所述哈希表的键包括日志片段和变量名称,所述哈希表的值包括第一分词结果;
将所述第一分词结果按照键值对的方式存储在所述哈希表中,生成日志片段的成分单词列表。
进一步地,所述将所述第一分词结果按照键值对的方式存储在所述哈希表中,包括:
根据日志片段和变量名称从所述哈希表中查找匹配,若未匹配到,则使用所述变量识别规则库对所述日志数据进行变量分词处理,将分词得到的第一分词结果按照键值对的方式存储在所述哈希表中。
进一步地,所述使用所述变量识别规则库按照所述变量名和前置短语识别出所述日志数据中的变量,包括:
逐个扫描所述当前日志数据的日志片段内容,使用所述变量识别规则中的前置短语判断所述日志片段内容中是否包含所述变量名,若是,则识别出所述变量名对应的变量。
进一步地,所述基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类,包括:
计算所述目标切分日志数据对应的日志片段的成分单词列表之间的距离;
根据设定的日志数据的最大允许距离构建最大距离窗;
基于所述最大距离窗和所述成分单词列表之间的距离对所述目标切分日志数据进行快速聚类。
进一步地,所述计算所述目标切分日志数据对应的日志片段的成分单词列表之间的距离,包括:
根据所述目标切分日志数据对应的日志片段的成分单词列表之间不相同的成分单词个数的比例确定所述目标切分日志数据对应的日志片段的成分单词列表之间的距离。
进一步地,所述根据设定的日志数据的最大允许距离构建最大距离窗,包括:
根据设定的日志数据的最大允许距离以及所述待分析设备的日志数据的长度确定最大距离窗。
进一步地,所述基于所述最大距离窗和所述成分单词列表之间的距离对所述目标切分日志数据进行快速聚类,包括:
基于所述最大距离窗查找到目标切分日志数据的当前日志距离;
当所述当前日志距离小于所述成分单词列表之间的距离时,则将所述目标切分日志数据进行聚类到聚簇列表中;
当所述当前日志距离大于所述成分单词列表之间的距离时,则将所述目标切分日志数据统一放到所述聚簇列表表中最后一个元素中。
根据本申请又一个方面,还提供了一种快速在线日志聚类的设备,该设备包括:获取装置、构建装置、规范分词装置和聚类装置,
所述获取装置,用于获取待分析设备的当前日志数据;
所述构建装置,构建日志数据的变量识别规则库和分隔符识别规则库;
所述规范分词装置,使用所述变量识别规则库对所述当前日志数据进行变量分词处理。得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;
所述聚类装置,基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。
根据本申请另一个方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述一种快速在线日志聚类的方法。
根据本申请再一个方面,还提供了一种快速在线日志聚类的设备,该设备包括:
一个或多个处理器;以及
存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行前述所述方法的操作。
与现有技术相比,本申请通过获取待分析设备的当前日志数据;构建日志数据的变量识别规则库和分隔符识别规则库;使用所述变量识别规则库对所述当前日志数据进行变量分词处理,得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。解决现有技术中在常规的硬件资源条件下,难以实现高速、实时的日志聚类的问题,以满足海量数据的日志运维需求。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请的一个方面提供的一种的快速在线日志聚类的方法流程示意图;
图2示出根据本申请一实施例中一种快速在线聚类的概要流程图;
图3是根据本申请的一个方面提供的一种快速在线日志聚类的设备的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(例如中央处理器(Central Processing Unit,CPU))、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-Change RAM,PRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、数字多功能光盘(Digital Versatile Disk,DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
本实施例提供了一种快速在线日志聚类的方法,可用于在线日志快速聚类,图1示出根据本申请的一个方面提供的一种快速在线日志聚类的方法的流程图,该方法包括:步骤S11~步骤S14,其中,
步骤S11,获取待分析设备的当前日志数据;在此,通过文件读取、Syslog接收、SNMP Trap接收、File Beat等方式获取待分析设备的当前日志数据,当前日志数据包括在线的当前日志或告警数据,待分析设备包括网络设备(如服务器)或移动终端设备等具有系统并进行运行的设备,对该设备的在线日志数据进行收集。
步骤S12,构建日志数据的变量识别规则库和分隔符识别规则库;在此,所述日志数据的变量识别规则库是根据日志数据的变量名、正则表达式和相应的前置短语构建的,根据日志数据分隔符的正则表达式和相应的前置短语构建分隔符识别规则库;其中,正则表达式用于识别日志中的变量并把变量部分替换为{变量名:变量值}格式的键值对,用于抽取日志中不断变化的部分,同时,前置短语用于快速判断日志中的变量,提升变量识别速度。比如用于识别时间的规则如下:
[('TIME','\d{1,2}:\d{2}:\d{2}(.\d{3,9}Z?)?',{':':2}),{':':2}是前置短词,其表达的含义是目标串必须至少含有2个:号才可能包含TIME变量。
与变量识别规则库的格式相同,而分隔符识别规则库用于识别分隔符,比如:{'DELIM','\s+|。'},表示一个以上的连续空白或|或句号是分隔符,当日志中识别出这样的文本时会当成分隔符提取出来。
步骤S13,使用所述变量识别规则库对所述当前日志数据进行变量分词处理,得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;在此,所述变量分词处理,是将一句话依据特定的规则进行切分,便于查询和属性分配。日志数据的变量识别规则库是根据日志数据的变量名、正则表达式和相应的前置短语构建的,因此,使用该变量识别规则库可以识别出日志中的变量名、正则表达式一前置短语,进而按照识别出的类型进行切分日志,每识别出一个变量后根据变量的边界将当前日志片段切分,得到第一分词结果,比如[’主机192.168.1.1启动时间为192秒。’],按照变量识别规则库进行识别后,切分得到[’主机192.168.1.1启动时间为’,{NUM:192},’秒。’],继续按照变量识别切分,得到[’主机’,{IP:192.168.1.1},’启动时间为’,{NUM:192},’秒。’]。进而经过分隔符识别规则库再次切分,可以得到:['主机',{DEMLIM:},{IP:192.168.1.1},{DEMLIM:},'启动时间为',{DEMLIM:},{NUM:192},{DEMLIM:},'秒',{DEMLIM:。}],得到目标切分日志数据,其中,目标切分日志数据为最终切分得到的日志数据,该最终切分得到的日志数据中包括多个成分单词(token),进而将一个完整的日志进行切分成一个个的token并将其中的变量替换。
步骤S14,基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类;在此,所述基于成分单词的最大距离窗经过当前日志的成分单词的个数(len),用以下公式计算而得到的最大距离窗的区间为:[left=(1-max_dist)*len,right=(1+max_dist)*len+1)。切分后的数据用于计算所述目标切分日志数据对应的日志片段的成分单词列表之间的距离。在本申请中,通过构建日志数据的变量识别规则库和分割符识别规则库,对所述待分析设备的当前日志数据进行变量分词处理,从而基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类,满足用户需求。
在本申请一实施例中,在步骤S12中,构建日志数据的变量识别规则库和分隔符识别规则库;在此,变量识别规则库是多个“变量名、正则表达式和相应的前置短词”的列表,比如:[('TIME','\d{1,2}:\d{2}:\d{2}(.\d{3,9}Z?)?',{':':2}),('NUM','\d+',None)],这个规则库里有两个规则,分别是变量名TIME和NUM,按照变量规则库顺序,先前置短词TIME匹配日志数据,再用NUM匹配确定切分结果。其中,前置短词与变量有关,不同的变量用不同的前置短词,前置短词会选择变量最明显的特征来提取,比如:18:01:34形式的时间变量,时间变量的最大特征是有两个冒号,所以可以设置前置短词为两个冒号,在此也可以用6个数字,就是'\d':6,但是6个数字比较长,它的加速效果可能不如两个:号,前置短词的设置原则是依据特征的识别速度来确定设置规则的。同时,根据变量名与正则表达式之间以及正则表达式与相应的前置短语之间的分隔符构建分隔符识别规则库。
在本申请一实施例中,在步骤S13中,使用所述变量识别规则库对所述当前日志数据进行变量分词处理,得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词。在此,首先使用所述变量识别规则库按照所述变量名和前置短语识别出所述日志数据中的变量;进而基于所述正则表达式将所述变量替换为预设格式的键值对,得到变量识别后的日志数据;最后基于片段缓存的渐进式快速分词法对所述变量识别后的日志数据进行分词,得到所述第一分词结果;结合分隔符识别规则库对经过片段缓存的渐进式快速分词法切分后的所述分词结果进行再次切分。其中,逐个扫描所述当前日志数据的日志片段内容,使用所述变量识别规则中的前置短语判断所述日志片段内容中是否包含所述变量名,若是,则识别出所述变量名对应的变量。进而基于片段缓存的渐进式快速分词法对所述第一分词结果进行分词,在此之前,构建一个空的哈希表用于片段分词缓存,其中,所述哈希表的键包括日志片段和变量名称,所述哈希表的值包括第一分词结果;将所述第一分词结果按照键值对的方式存储在所述哈希表中,其中,根据日志片段和变量名称从所述哈希表中查找匹配,若未匹配到,则使用所述变量识别规则库对所述日志数据进行变量分词处理,将分词得到的第一分词结果按照键值对的方式存储在所述哈希表中,生成日志片段的成分单词列表。例如:['主机192.168.1.1启动时间为192秒。'],一次切分后变成:['主机192.168.1.1启动时间为',{NUM:192},'秒。'],二次切分后变成:['主机',{IP:192.168.1.1},'启动时间为',{NUM:192},'秒。'],得到第一分词结果;对每一个日志片段切分前首先根据日志片段+变量名称从片段分词的缓存中查找,若已有缓存的分词结果,则直接取出即可,若没有,则按照上述方法切分,随后存入片段分词缓存,从而可以有效利用已有的分词结果,相同的日志片段和变量不再需要重复多次分词,而基于日志片段而不是基于整个日志的缓存方式也可以避免因为日志中的变量导致的缓存失效;对于得到的第一切分结果经过分隔符识别规则库再次切分,可以得到:['主机',{DEMLIM:},{IP:192.168.1.1},{DEMLIM:},'启动时间为',{DEMLIM:},{NUM:192},{DEMLIM:},'秒',{DEMLIM:。}]。需要说明的是,在变量识别规则库中以及分隔符识别规则库中均包括了前置短语,在本申请实施例中识别变量过程,是从变量识别规则库取出规则,逐个扫描日志片段内容,扫描时先使用前置短语检查日志中是否可能包含变量,若可能则进一步使用正则表达式匹配并替换变量,若不可能,则直接跳过,其中,前置短语为简单的正则或字符串匹配。
在本申请的一实施例中,在步骤S14中,基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。首先计算所述目标切分日志数据对应的日志片段的成分单词列表之间的距离,比如有两条日志,分别是:
日志1:主机192.168.1.1启动时间为12秒;
日志2:主机192.168.1.2启动时间为1秒;
分词后变成:
tokens1:['主机','192.168.1.1','启动时间为','12','秒']
tokens2:['主机','192.168.1.2','启动时间为','1','秒']
那么tokens1中的192.168.1.1和tokens2中的192.168.1.2就是不同的成分单词,数字12和1也是不同的成分单词;在这里,根据所述目标切分日志数据对应的日志片段的成分单词列表之间不相同的成分单词个数的比例确定所述目标切分日志数据对应的日志片段的成分单词列表之间的距离,我们可以计算得到tokens1和token2之间的距离为0.2;假设最大允许距离为0.3,由于tokens1和token2之间的距离为0.2小于最大允许距离,即可把tokens1和token2归入相应的聚簇。进一步地,根据设定的日志数据的最大允许距离构建最大距离窗,基于最大距离窗公式我们可知:
[left=(1-max_dist)·len,right=(1+max_dist)·len+1)]
=[left=(1-0.3)·5,right=(1+0.3)·5+1)]
=[left=3.5,right=7.5]
进一步地,基于所述最大距离窗和所述成分单词列表之间的距离对所述目标切分日志数据进行快速聚类。根据以上计算可得,由于日志的长度需为整数,则成分单词的个数可以为4、5、6、7,距离比较时仅从上述取值区间比较,限定成分单词的取值范围,并不在所有日志内查找,同时最大距离窗外的聚簇一定不满足最大距离条件,从而加快了聚类速度,进一步地,区间的中间位置,也就是最接近len的索引号最有可能与当前日志距离接近,即查找方法采用从中间向两边查找的方式,相当于上述计算中成分单词个数为5和6,进一步加快了查找速度,满足实时聚类的需求。
在本申请一实施例中,如图2所示,该聚类概要流程图的方法包括:采集日志;进而变量提取和分词;进一步地,遍历最大距离窗内的每一类簇,判断与类簇代表日志的距离,当与类簇代表日志的距离小于等于最大允许距离时,添加到已有类簇;当与类簇代表日志的距离大于最大允许距离时,创建新类簇,结束聚类。在此,代表日志是一个聚簇里面的第一条日志,也就是新建聚簇时,被放入到此聚簇的第一条日志。
在本申请一实施例中,基于所述最大距离窗查找到目标切分日志数据的当前距离;可以得到:当所述当前日志距离小于所述成分单词列表之间的距离时,则将所述目标切分日志数据进行聚类到聚类列表;当所述当前日志距离大于所述成分单词列表之间的距离时,则将所述目标切分日志数据统一放到所述聚簇列表表中最后一个元素中。在此,聚簇列表是预先分配的,长度不需要很长,但是成分单词列表的长度可能很长,会超过聚簇列表的最大长度,所以将超过聚簇列表的最大长度的日志放到聚簇列表的最后一个元素存放,便于加快查询和聚类的速度。
此外,本申请实施例还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述一种快速在线日志聚类的方法。
与上文所述的方法相对应的,本申请还提供一种终端,其包括能够执行上述图1、图2或各个实施例所述的方法步骤的模块或单元,这些模块或单元可以通过硬件、软件或软硬结合的方式来实现,本申请并不限定。
根据本申请再一个方面,还提供了一种快速在线日志聚类的设备,其中,所述设备包括:
一个或多个处理器;以及
存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行前述一种快速在线日志聚类的方法的操作。
例如,计算机可读指令在被执行时使所述一个或多个处理器:
获取待分析设备的当前日志数据;
构建日志数据的变量识别规则库和分隔符识别规则库;
使用所述变量识别规则库对所述当前日志数据进行变量分词处理。得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;
基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。
图3示出本申请又一个方面提供的一种快速在线日志聚类的设备的结构示意图,所述设备包括:获取装置11、构建装置12、规范分词装置13及聚类装置14,其中,获取装置11用于获取待分析设备的当前日志数据;构建装置12用于构建日志数据的变量识别规则库和分隔符识别规则库;规范分词装置13用于使用所述变量识别规则库对所述当前日志数据进行变量分词处理。得到第一分词结果,并使用所述分隔符识别规则库对所述第一分词结果进行再次分词处理,得到目标切分日志数据,其中,每一条目标切分日志数据包含多个成分单词;聚类装置14用于基于成分单词的最大距离窗对所述目标切分日志数据进行快速聚类。
需要说明的是,获取装置11、构建装置12、规范分词装置13及聚类装置14执行的内容分别与上述步骤S11、S12、S13和S14中的内容相同或相应相同,为简明起见,在此不再赘述。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。