一种日志解析规则的生成方法与流程

文档序号:19929931发布日期:2020-02-14 21:53阅读:269来源:国知局
一种日志解析规则的生成方法与流程

本发明属于计算机及信息安全领域,尤其是涉及一种为日志分析产品生成解析规则的方法。



背景技术:

网络安全日志,包括操作系统产生的系统日志和网络安全设备产生的报警日志等,主要记录了系统和网络环境中发生的各种安全事件,为网络异常诊断和网络攻击威胁的发现提供重要的线索。在网络安全日志的分析中,日志解析是一个至关重要的步骤。

目前的日志分析产品在日志范式化上面临许多实际问题,对于人工方式录入正则:首先,繁多的日志种类和格式,无法通过统一的解析规则实现解析,而且每当有新的日志类型,就需要针对性的开发新解析方法,开发和维护成本都非常高。其次,虽然同种日志内容通常遵循一定的模式,但是这种模式往往是隐晦的,难以获取。再次,通常是根据需要提取内容设计对应的正则表达式,然后依据正则表达式来提取日志中特定的内容,但是编写正则表达式有一定的技术门槛,并且还需要不断的更新正则表达式,增加了运维人员的维护难度。对于无监督的机器自动化学习进行正则生成,适应性较差,更适用于格式化和结构化的日志,而且解析精度较低、资源消耗较高。另外,现有技术还存在这样一种情况:由于多数的日志都是英文字符和数字组成的,有的字符串是英文缩写,即便进行了结构化,还是无法进行直接阅读。



技术实现要素:

鉴于上述背景,提出一种方案,通过把原始日志文本中的静态部分从日志内容中分离出来,从而可以只对动态部分进行处理、生成正则表达式,并为动态部分添加描述,进而得到结构化的日志解析规则。

采用的具体技术方案是一种日志解析规则的生成方法,包括:

预取原始日志数据,通过分隔符将日志内容拆分为以字符串为单元的集合;

识别字符串为静态或动态,若为静态字符串则进行清除;

若为动态字符串,确定实际含义后,对每个动态字符串标识相应的中文描述;对每个动态字符串适配正则表达式;创建所述中文描述与正则表达式的映射结构;

将原始日志中的动态字符串替换为相应的正则表达式,得到结构化的日志正则表达式;

将所述映射结构与日志正则表达式保存为解析规则。

其中,上述的对日志内容进行拆分,包括:对预取的日志内容进行比对,确定分隔符并记录其位置;按照各分隔符的位置将日志内容拆分为独立字符串组成的集合。

优选的是,选定样本日志,其他日志与样本日志进行逐个元素的比对,当至少两条日志的同一位置上出现相同的符号时,该符号为公共符号,记录其位置;每个元素包括一个字符,且连续的字母和/或数字视为一个元素,所述符号为除字母与数字以外的起连接或定界功能的字符;

当只有一种公共符号时,该种公共符号即为分隔符;

当具有至少两种公共符号时,根据公共符号分割的元素之间的关联性大小,确定出分隔符;所述关联性判断,包括判断该公共符号是否与其他字符作为整体使用。

进一步的,若被分隔符拆分出的字符串在各日志中保持不变,则将该字符串识别为静态字符串;否则识别为动态字符串;并记录各静态与动态字符串在日志中的位置。

通过对比不同日志的同一位置的动态字符串内容的含义,确定该位置的动态字符串的中文描述。

优选的,预设正则库,根据各位置的动态字符串类型,从预设的正则库中选定相应的正则表达式;所述字符串类型包括全为符号,全为字母,全为数字,以及符号、和/或字母、和/或数字的组合。

上述的映射结构为,以动态字符串的中文描述为字段名、以相应的正则表达式为内容的数据表。

取原始日志数据,根据记录的动态字符串位置,将动态字符串替换为对应的正则表达式,静态字符串保持不变,得到该种日志正则表达式。

进一步优选的,将每个选定的正则表达式与相应的动态字符串进行匹配,若匹配成功则保存该正则表达式;若匹配失败则重新从正则库中选择正则表达式,直至与字符串匹配成功,以验证正则表达式对字符串内容匹配的准确性。

通过静态字符串所属的字符串类型,匹配相应的正则表达式,清除对应的内容。

利用上述生成方法得到的解析规则,对日志进行解析的过程,包括:根据预设的解析策略,将日志数据与所述解析规则的日志正则表达式进行匹配,当日志数据的动态字符串与正则表达式匹配成功后,获取该正则表达式对应的中文描述作为对解析结果的注释。

以上的技术方案,相较于现有技术,利用若干预取的原始日志,通过确定分隔符并利用分隔符将将日志内容拆分为独立的字符串,并区分静态字符串和动态字符串,针对其中的动态字符串,一方面生成对应的正则表达式,另一方面标识中文描述;将正则表达式替换原始日志中的动态字符串即得到该种日志正则表达式,而利用日志正则表达式对日志进行解析时,其解析结果中的动态字符串含义具有实际意义的中文描述,有利于管理人员的阅读和分析。前述的解析规则生成方法,具有较大的适应性,资源消耗少,而且其生成的解析规则的解析精度较高。

附图说明

图1为日志解析规则的生成方法实施例的流程示意图;

图2为图1中生成的解析规则进行日志解析的流程示意图。

具体实施方式

下面结合附图和实施例对技术方案进行详细说明。

如图1所示,一种日志解析规则的生成方法,包括:

首先,预取原始日志数据,通过分隔符将日志内容拆分为以字符串为单元的集合。

当使用既有的解析规则对日志解析,无法得到完整、准确的解析结果,则认为该日志为新的日志,需要进行解析规则的更新。因此,需要预取至少2条/行原始日志数据作为解析规则的生成基础,此处所述“条”可以是针对流传输的日志而言,而“行”可以是针对文件传输的日志而言,在此处两者没有本质的区别。

原始日志数据预取后,首先要进行工作就是确定该类日志的分隔符,即日志中用于划分不同字段内容的符号;

分隔符本身通常不具有具体的实际含义,只起分隔或定界的功能,两个相邻分隔符之间为具有实际含义的字段内容(比如字符串)。常见的分隔符有“,”、“.”、“-”、“/”以及空格等,例如日志“aaabbbccc”的分隔符就是空格符,而日志“ddd_ee_f”的分隔符为“_”。

分隔符的确定,包括:选定样本日志,其他日志与样本日志进行逐个元素的比对,当至少两条日志的同一位置上出现相同的符号时,该符号为公共符号,记录其位置;每个元素包括一个字符,且连续的字母和/或数字视为一个元素,所述符号为除字母与数字以外的起连接或定界功能的字符;

当只有一种公共符号时,该种公共符号即为分隔符;

当具有至少两种公共符号时,根据公共符号分割的元素之间的关联性大小,确定出分隔符;所述关联性包括元素组合后才能表达完整的含义。

其次,识别出所述集合中的字符串为静态或动态,若被分隔符拆分出的字符串在各日志中保持不变,则将该字符串识别为静态字符串;否则识别为动态字符串;并记录各静态与动态字符串在日志中的位置。

对于集合中的静态字符串,根据其静态字符串所属的字符串类型,匹配相应的正则表达式,进行筛选并清除;所述字符串类型包括全为符号,全为字母,全为数字,以及符号、和/或字母、和/或数字的组合,例如字符串“name”全为字母,字符串“8080”全为数字,字符串“user01”则为数字与字母的组合。

对于动态字符串,通过对比不同日志的同一位置的动态字符串内容的实际含义,确定该位置的动态字符串的中文描述;

预设正则库,根据各位置的动态字符串类型,从预设的正则库中选定相应的正则表达式;将每个选定的正则表达式与相应的动态字符串进行匹配,若匹配成功则保存该正则表达式;若匹配失败则重新从正则库中选择正则表达式,直至匹配成功,以验证正则表达式对字符串内容匹配的准确性;

创建所述中文描述与正则表达式的映射结构,映射结构为,以动态字符串的中文描述为字段名、以相应的正则表达式为内容的数据表;

取原始日志数据,根据记录的动态字符串位置,将动态字符串替换为对应的正则表达式,静态字符串保持不变,得到该种日志正则表达式。

最后,将所述映射结构与日志正则表达式保存为解析规则。

如图2所示,利用上述生成方法得到的解析规则,对日志进行解析的过程,包括:

获取待解析的日志数据,同样的日志可以是流传输或文件传输的。

根据配置的解析策略,执行解析规则,包括执行策略中配置的正则表达式,策略的配置可以是通过中文描述选定对应的正则表达式来实现解析规则。

具体的解析,是通过策略配置的解析规则中包括的正则表达式对日志数据进行匹配,匹配成功后,将对应的中文描述作为对解析结果的注释,实现更直观的阅读。

下面列举实施例进行详细说明。

以预取到的以下两条日志为例:

“2018-11-1211:20:33192.168.19.1loginadmin.”

“2018-11-1421:16:45192.168.19.1logoffuser1.”

步骤1,对日志内容进行对比,确定分隔符:

逐元素对上述两条日志进行对比,即对比第一个元素“2”与“2”,第二元素“0”与“0”,以此类推,其中连续的字母或数字,如“2018”、“192”、“login”、“user1”均视为一个元素;该两条日志的相同位置上,具有的相同符号包括“-”、空格、“:”、“.”四种(也就是说不仅要符号相同,而且要位于不同日志的同一位置上的符号,才有可能是分隔符)。

对于“.”,有两种,其中作为日志结尾的“.”,由于日志首尾的符号通常不具有分隔的功能,因此排除;日志中间的“.”为连续出现的三次,且其分割的元素全部是数字,这一组数字表示的是通常可知的ip地址,四个元素作为整体使用,该“.”起的是连接作用,即并没有作为字符串之间的分隔。

“-”为连续出现两次后不再出现,“:”为连续出现两次后不再出现,且其分割的元素全部是数字,都是作为整体使用,起到的都是连接作用,并没有作为字符串之间的分隔。

空格为均匀的出现三次(即相邻两个空格之间均存在具有实际含义的字符串),因此只有空格符号符合分隔符的特征要求,从而确定该种日志的分隔符为空格符,同时记录各个分隔符所处的位置,以便下一步对日志的分隔。

步骤2,利用分隔符将日志数据分拆为字符串:

例如将第一条日志拆分为字符串集合:

{2018-11-12

11:20:33

192.168.19.1

login

admin};

第二条日志拆分为字符串集合:

{2018-11-14

21:16:45

192.168.19.1

logoff

user1}。

步骤3,区分字符串为静态还是动态:

依次对比步骤二的两个集合中的字符串可知,发生变化的字符串为第一、二、四、五,识别为动态字符串;保持不变的字符串为第三字符串,识别为静态字符串。实际中,通过两条日志的对比并不能完全准确的确定字符串是静态还是动态,例如本实施例中的“192.168.19.1”,如果该字符串是设备的ip信息,则可能为静态的,但如果是用户的ip,则可能又是动态的;但经过日志数量的累积,准确性会逐步提高,最终达到完整且准确的识别。

步骤4,对于静态字符串,根据字符串类型进行清除,本实施例中,字符串“192.168.19.1”表示的是ip地址,其正则表达式可以是:

利用该正则表达式可以实现对该静态字符串的清除,例如可以将第一条日志处理为:

{2018-11-12

11:20:33

login

admin};

余下的均为动态字符串,对于动态字符串,进行两种处理,首先结合两条日志中动态字符串的含义,标识中文描述:

{2018-11-12日期

11:20:33时间

login操作

admin用户名};

其次是为动态字符串适配正则表达式,具体的是通过判断字符串的组成,确定字符串的类型,然后从预设的正则库内匹配出对应的正则表达式。本实施例中,各个动态字符串的类型分别为数字与符号组合(更准确的是一种日期表达格式)、数字与符号组合(更准确的是一种时间表达格式)、字母组合、字母与数字组合;而且如果日期和时间经常是同时相邻的出现在日志中,因此日期的正则表达式可以是:\d{4}(-|/|.)\d{1,2}\d{1,2};时间的正则表达式可以是:

操作(英文单词)的正则表达式可以是:\b[a-za-z]+\b;用户名的正则表达式可以是:[a-za-z0-9_\-\u4e00-\u9fa5]+;从而得到中文描述与正则表达式的映射结构,如下表:

步骤5,将动态字符串替换为正则表达式,即将原始日志中的动态字符串,用相对应的正则表达式进行替换,即得到如下日志正则表达式:

步骤6,将上述的中文描述映射结构与日志正则表达式保存为一条解析规则,对同种日志进行解析时,执行该规则,得到相应的结果中,各个动态字符串会自动显示中文描述,便于直接阅读:

例如对上述的第二条日志进行解析,其输出结果可以是以下形式:

日期2018-11-14/时间21:16:45/192.168.19.1/操作logoff/用户名user1.其中的符号“/”只是为了区分各个字段内容,不具有实际意义,也可以更换为其他符号。

对于其中的静态部分192.168.19.1,可以通过其来源确定其类型,例如如果经过足够多日志的验证后可以确定为用户的ip,则可以在其前面添加“用户ip”;当然,如果确定为设备ip,为了便于理解,也可以标识中文描述“设备ip”。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1