适用场景
本文中所使用的OneClassSVM方法识别日志中的异常,所依赖的假设前提条件如下:
1、 异常信息会打印大量的日志,即一条或者一段时间内的日志量远超正常水平,例如log4j产生的日志,符合此特征。
2、 执行中断导致日志停止打印,产生的日志量远远小于正常水平,例如对程序、脚本执行过程记录的日志,一旦执行异常退出,日志终止打印。
3、 日志中没有明显的关键字或者其他标识,能够标识正常或者异常。
注:理论上来说,日志是规范的,可以通过关键字之类的信息来区分是否是异常的,实际中存在不规范的情况。
场景分析
上述所描述的场景中,异常情况是少数,正常情况是绝大多数,所以可以视为一种非均衡样本的分类问题,OneClassSVM算法适用于此场景,并且其一种功能就是异常值检测。
Splunk的MLTK机器学习工具包中包含了几十种算法,非深度学习,使用MTLK足够。
训练过程
1、 训练模型
首先是训练模型,参考http://docs.splunk.com/images/e/ee/MLTKCheatSheet.pdf
2、 模型训练结果
使用 | listmodels查看训练的模型
3、 使用模型
如下图所示,对于每一条日志,都会有一个isNormal新字段表示该记录是否是异常值,在本例中1.0为异常值,-1.0为正常。
实际最终效果如何取决于实际情况,如果正常情况和异常情况差距越大,理论上来说准确率越高。
结束!