Page 321 - 《软件学报》2020年第10期
P. 321
王晓东 等:多节点系统异常日志流量模式检测方法 3297
事件日志数据的特殊属性,因此比 SLCT 更接近地反映 Apriori 算法.SLCT 和 Loghound 两种算法都将那些不匹
[8]
配任何频繁模式的日志分类为离群值.Makanju 等人 引入了 IPLoM 算法,这是一种用于挖掘事件日志簇的新
算法.与 SLCT 不同的是,IPLoM 是一种层次聚类算法,它以整个事件日志作为单个分区开始,并在 3 个步骤中迭
代分割分区.与 SLCT 类似,IPLoM 将事件日志行中的位置视为单词,因此对单词位置的移位敏感.由于其分层
性,IPLoM 不需要支持阈值,而是需要其他一些参数(如分区支持阈值和簇优度阈值),这些参数对分区的划分进
行了细粒度的控制.IPLoM 相对于 SLCT 的一个优点是能够使用通配符尾部(例如 Interface * *)来检测日志行模
式,其作者将 IPLoM 算法与 SLCT 和 LogHound 算法进行比较,并得出其效果优于上述两种聚类算法的结论.此
[9]
后,Vaarandi 和 Pihelgas 提出了 logcluster 算法,该算法对于文本事件日志进行数据聚类和日志行模式挖掘,并
修复现有聚类算法的一些缺点.而本文使用基于字符匹配的分类算法,针对于国家高性能计算环境的系统日志
进行分类,代码压缩率和后续特征创建都显示出了不错的效果.
(2) 日志后验分析
一些学者在分析日志寻找相关异常方面进行了研究,比如,Xu 等人 [10] 通过源代码匹配日志的格式找出相关
变量,通过词袋模型提取对应日志变量的特征,然后使用这些特征,通过主成分分析方法降维,根据主成分分析
的最大可分性检测异常的日志文件,最后使用决策树可视化该结果.Fronza 等人 [11] 使用随机索引为代表的操作
序列,根据其上下文为每个日志中的操作特征化,然后使用支持向量机关联序列到故障或无故障的类别上,以此
来预测系统故障.Weiss 等人 [12] 研究了从有标签特征的事件序列中预测稀少事件的问题,基于遗传算法的机器
学习系统,能够在预测稀有任务上达到比较好的结果.Yamanishi 和 Maruyama [13] 提出了一种新的动态系统日志
挖掘方法,以更高的置信度检测故障症状,并发现计算机设备间的连续报警模式.Yuan、Mai 和 Xiong [14] 提出了
一个名为 Sher-Log 的工具,它利用运行时日志提供的信息来分析源代码,以推断在失败的生产运行期间必须或
可能发生的事情.它不需要重新执行程序,也不需要知道日志的语义.它推断关于执行失败的控制和数据值信
息.Peng、Li 和 Ma [15] 应用文本挖掘技术将日志文件中的消息分类为常见情况,通过考虑日志消息的时间特性来
提高分类的准确性,并利用可视化工具来评估和验证用于系统管理的有趣的时间模式.Wang [16] 也使用机器学习
方法对日志进行后验分析,但是主要突出的是日志线上的可视化展示.本文使用文献[10]中描述的异常检测方
法,但是输入的日志类别对应于基于字符匹配生成的分类结果,同时,研究对象为日志类型的有序排列,在得到
未知的异常日志流量模式上更有优势.
(3) 日志类型序列度量的研究
日志类型序列的分类问题,实际上可以归类为字符匹配模式.在字符匹配中,为了判别两个序列的相似度,
Hamming [17] 在对两个字符串之间进行比较时使用了最直接的一对一匹配法,以两个序列匹配的字符数目作为
两个序列之间的相似度衡量指标.Damerau 和 Levenshtein [18] 使用两个序列之间的最小操作数(包括序列的插
入、删除、替换或两个相邻字符之间的转换)作为两个序列之间的相似度衡量指标.在序列对比方面,
Needleman [19] 和 Smith [20] 分别对序列进行全局对比和局部对比,用以得到最符合两个序列的全局序列和局部序
列.本文在选择日志序列特征时考虑到了字符串序列的特点.根据 Seker [21] 在字符串匹配算法中对人名字符度
量上选择的方法,即前 K 个频繁出现次数的字母项和其对应数量作为识别序列的关键要素.将不同类型的日志
抽象为不同的字符,根据其特点实现自适应 K 值的挑选,在日志类型序列的比较上更为适合.
2 背 景
2.1 系统环境日志前期分类研究
日志预处理需要完成的主要任务是如何将日志内容压缩并分类,这样做既可以减少数据量,又有利于后续
使用相关机器学习算法进行分析.我们在前期工作中,使用了一种基于字符匹配的方法对系统日志的分类问题
进行研究,主要方法是根据字符匹配原则对系统日志进行分类 [22] .日志模式匹配的核心思想是字符一一对应,
即:将整体匹配的字符数与总字符数进行比值,并将得到的数值与设定的阈值进行对比,如果结果超过设定的阈
值,则将这两行日志定义为一类 [22] .