Page 323 - 《软件学报》2020年第10期
P. 323

王晓东  等:多节点系统异常日志流量模式检测方法                                                         3299


         3.1   预处理模块
             异常流量模式检测方法进行预处理的目的是将日志类型记录在本地的日志类型仓库中,以便后期分析.日
         志类型提取的具体方法         [23] 是读取一行日志,并与日志仓库中的日志类型逐一进行比较.设该条日志 l 包含 n 个单
         词,日志仓库中取出的待比较日志类型 l′包含 m 个单词,则定义 l 与 l′的相似度为
                                             (, )l′ =
                                            Sl     | LCS ( , ) | 2l l′ ×  ,
                                                       +
                                                      nm
         其中,|LCS(l,l′)|表示 l 与 l′的最长公共子序列的单词数量.计算出 S(l,l′)后,即可将该值和预定义阈值 t(0<t<1)进行
         比较:如果结果小于该阈值,则将该类型加入到日志类型仓库中;否则,读取下一条日志进行比较.其处理流程如
         图 2 所示.

                                      新的一条日志           日志匹配算法

                                              是
                                                        是否匹配
                                                        已有类型?

                                                             否

                                                     加入类型数据仓库

                                     Fig.2    Flow chart of preprocessing module
                                           图 2   预处理模块流程图

             需要指出的是:预处理模块分析的对象是所有待分析的系统日志,并根据这些日志进行模式匹配,得到不同
         的日志类型,然后根据这些日志类型建立日志仓库.其目的是化简日志类型的维度,本身并没有过滤掉任何待分
         析的日志.在后续进行实际流量分析时,可以将每个时间片内出现的日志与日志仓库中的日志类型进行对比,抽
         象出不同类型的日志在对应时间片内出现次数的一个向量,以利于使用相关机器学习算法进行分析.
         3.2   异常处理模块

             日志的异常处理输入需要用到上一小节得到的日志类型.我们首先根据日志仓库中不同日志的类型生成
         日志类别文件,然后基于该日志类别文件,将需要具体分析的日志文件进行特征创建,得到日志时间片向量,之
         后根据待分析日志的格式特点将日志文件的每一行数据按照数据表的格式存储,得到结构化的日志数据,最后
         将上述得到的 3 个文件加载,并使用无监督异常检测方法进行分析,即可得到对应具有异常流量特征的时间片.
         具体实现方法如下.
             (1)  特征创建
             我们首先在内存中加载待分析日志,然后根据日志的时间计算出时间戳,在得到时间戳后,即可根据时间戳
         的大小将日志按时间顺序进行排序,并根据实际情况把日志按照给定的时间片进行拆分,每一个时间片可以作
         为一个样本的输入向量.该向量的每一个维度代表一种类型的日志,而其对应的数值等于该类型在当前时间片
         段内出现的次数.例如:如果取时间片为 5 分钟,并且假设在 t 1 时间片内得到的日志可见表 2.
                                          Table 2   Log in t 1  time slice
                                         表 2   t 1 时间片内得到的日志
                       日期时间         时间戳      节点名             日志内容              所属类型
                      Jun 25 08:01:04  15120064000  Node1   Connection closed by 〈IP〉   T 1
                      Jun 25 08:01:08  15120068000  Node2   Accepted publickey for usr1 from 〈IP〉  T 0
                      Jun 25 08:01:08  15120068000  Node1   Received disconnect from 〈IP〉   T 3
                      Jun 25 08:01:20  15120080000  Node3   Received disconnect from 〈IP〉   T 3
                      Jun 25 08:02:01  15120121000  Node2   session opened for user usr1 by (uid=0)  T 2
                      Jun 25 08:02:28  15120148000  Node1   Connection closed by 〈IP〉   T 1
                      Jun 25 08:02:30  15120150000  Node2   Connection closed by 〈IP〉   T 1
                      Jun 25 08:02:31  15120151000  Node3   Connection closed by 〈IP〉   T 1
   318   319   320   321   322   323   324   325   326   327   328