作者 | 李旭光 中国农业银行研发中心
责编 | 晋兆雨
出品 | CSDN云计算
头图 | 付费下载于视觉中国
背景介绍
日志是有关系统运行状态的描述,例如Linux的系统日志,数据库系统的日志以及分布式系统的日志等。日志是运维人员查看系统运行状态,寻找系统故障的重要数据。另一方面,日志属于非结构化数据,兼具有大数据量的特点,对于传统的运维人员往往只能基于关键词匹配来处理日志,并不能全面的获取日志包含的信息。所以日志处理需要更强大的算法来解决人工无法解决的问题,需要我们践行AIops理念,运用机器学习来解决日志处理中的难点。本文将介绍有关日志的预处理过程以及几种日志异常检测算法。
日志的预处理
日志数据千差万别,对于绝大部分算法日志数据无法直接用于算法训练,需要通过日志解析、特征提取将日志转换为特征矩阵,特征矩阵作为算法的输入。
日志数据虽不易区分,但总体上可分为可变部分和不变部分,日志解析就是就是将日志的可变部分与不变部分进行区分,并将原始日志转换为日志事件。
完成日志解析,下一步就是要提取日志事件的特征,对于日志特征提取方式一般采用先将日志事件加窗,然后对每个窗口的事件进行计数,这样我们就可以生成最终算法可用的特征矩阵。类似于下面格式的数据:
1,0,2,3,1,4
5,2,4,1,3,0,0,1
3,1,4,5,7,1,4,0
2,1,4,5,5,1
4,2,1,5,3,1,1
异常检测算法
日志异常检测算法主要根据有监督与无监督分为两大类。我们将分别介绍这二类算法。
3.1 有监督算法
a.逻辑回归
逻辑回归是简单的二分类模型,具有较强的解释性,被广泛的应用于分类任务。逻辑回归模型计算输入为正例的概率,概率高的判为正例。通过结合多个逻辑回归模型可以将二分类任务扩展为多分类任务。逻辑回归的图形如下:
图a 逻辑回归模型
逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。
b.决策树
决策树是一个树状结构,符合人一般的判断的过程,根据事项的重要次序依次判断决策。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。决策树图形如下:
图b 决策树模型
特征矩阵每一列作为一个属性,事件次数作为属性值,特征矩阵和标示列作为决策树模型的输入,决策树可以根据多种指标进行属性分类的次序判断。得到的决策树模型即可用来日志异常的判断。
c.SVM
支持向量机是一类监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面。
图c 支持向量机模型
支持向量机就是找到一个将样本分开的一个超平面,平面的二侧分别对应各自的类别。
以上三种都为监督算法,监督算法需要对数据进行标注,标注需要进行大量的人力劳动,往往在实际的使用中具有局限,不太容易广泛的应用于日志检测,因此无监督的学习方法具有一定的优势,接下来继续介绍二种无监督的算法。
3.2 无监督算法
a. 聚类
聚类试图将数据集中的样本划分为若干个不相交的子集,每个子集对应于一个潜在的子集。聚类的结果应尽量簇内尽量相似,簇间相似性低。聚类有二类指标,一是外部指标,另一种是内部指标。我们可以根据实际问题,合理选择具体的指标来进行训练任务。当选取好了指标,我们就可以根据指标计算对应的“距离”,完成对应的分类任务。
b. PCA
主成分分析是一种常用的降维方法。通过PCA对高维的数据进行降维,将高维的数据投影到低维的k个分量,变换后的低维分量可以保留高维数据的特征。通过PCA获得二个子空间,即正常空间和异常空间,正常空间又PCA计算后得到的k维构成,异常空间由舍弃的的维度构成。对于新的特征向量,计算此向量到异常空间的距离,距离过长即判断异常。
其他
以上方式都是基于将日志转换为事件计数再通过机器学习进行检测,事件计数一方面需要对日志进行大量的预处理工作,另一方面事件计数也只是包含了事件见关联的信息,对于其他异常不能进行检测。接下来我们将介绍二种不基于事件计数方式处理的日志异常检测算法。
a.Word2Vec和SOM算法
Word2Vec是一个可以将词语转换为词向量的工具,即将文本进行向量化同时很好的保持文本之间的语义。Word2Vec基于词进行向量转换,提供了更细粒度的日志分析基础,提供不同的日志预处理方式。
将文本进行了向量化就可以进行下一步的检测算法的应用。自组织网络(SOM)是一种无监督的学习方法,是一种基于神经网络的聚类算法。SOM是一种单层的神经网络,仅包含输入层和输出层。SOM网络接收外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。其特点与人脑的自组织特性类似。SOM的目标是用低维(通常是二维或三维)目标空间的点来表示高维空间中的所有点,尽可能地保持点间的距离和邻近关系(拓扑关系)。
图d 自组织网络模型
b. LSTM
长短期记忆是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
图e LSTM网络模型
DeepLog是一种基于LSTM网络的日志异常检测算法,DeepLog发表于2017年。DeepLog同样不是基于事件计数的日志异常检测,DeepLog训练的过程基于不包含异常的日志数据进行训练。DeepLog首先识别日志的不变部分作为key,和可变部分作为参数,DeepLog会对不变部分和可变部分都进行学习,作为后续异常检测的基础。同时DeepLog还会通过日志对系统的实际工作流进行学习,同样作为后续日志异常检测的参考。DeepLog日志检测就是通过模式检测、参数检测以及工作流检测三种方式,相比于以上的几种算法要更加强大,适应的范围要更广泛。
总结
本文总结了七种用于日志异常检测的方式,大体上可以分为二类,一类是基于预处理后得到的日志事件计数进行检测的方式,另一类是以日志原本状态的直接处理的方式。这七种方式既有监督学习也有无监督学习算法,既有经典的机器学习算法也有深度网络,希望介绍的这七种算法能帮助你解决遇到的问题,启发新的日志检测方式。
作者介绍
李旭光 中国农业银行研发中心
为更高效运维的研发人员,及时响应一线运维需求,积极探索AI应用于运维,不懈追求运维研发的更高境界。
更多阅读推荐
你可能也会掉进这个简单的 String 的坑
亿级大表分库分表实战总结(万字干货,实战复盘)
赠书 | 华为数据底座的整体架构与建设策略
Python画出心目中的自己
超200家上市企业布局!从千余条备案信息看区块链产业