使用Python和机器学习实现安静的日志噪音

持续集成(CI)作业可以生成大量数据。 当工作失败时,找出问题所在可能是一个繁琐的过程,其中涉及调查日志以发现根本原因,而根本原因通常只占总工作输出的一小部分。 为了更轻松地从其余数据中分离最相关的数据,使用先前成功的作业运行对Logreduce机器学习模型进行了训练,以从失败的运行日志中提取异常。

该原理也可以应用于其他用例,例如,从日记或其他系统范围内的常规日志文件中提取异常。

使用机器学习降低噪音

典型的日志文件包含许多名义事件(“基线”)以及与开发人员相关的一些例外。 基线可能包含随机元素,例如时间戳或难以识别和删除的唯一标识符。 要删除基线事件,我们可以使用k近邻模式识别算法k -NN)。

training/testing workflow diagram

日志事件必须转换为用于k -NN回归的数值。 使用通用特征提取工具HashingVectorizer可使该过程应用于任何类型的日志。 它对每个单词进行哈希处理,并以稀疏矩阵对每个事件进行编码。 为了进一步减少搜索空间,令牌化会删除已知的随机单词,例如日期或IP地址。

Feature extraction diagram

训练模型后, k -NN搜索将告诉我们每个新事件与基线的距离。

k-NNN diagram

Jupyter笔记本演示了该过程并绘制了稀疏矩阵矢量的图。

Jupyter notebook

Logreduce简介

Logreduce Python软件透明地实现了此过程。 Logreduce的最初目标是使用构建数据库来协助Zuul CI作业失败分析,现在它已集成到Software Factory development forge的作业日志流程中。

简单地说,Logreduce比较文件或目录并删除相似的行。 Logreduce建立为每个源文件的模型,并输出任何目标的线,其距离为上述通过使用以下语法定义的阈值的: 距离| 文件名:行号:行内容


   
   
$ logreduce diff / var / log / audit / audit.log.1 / var / log / audit / audit.log
INFO  logreduce.Classifier - Training took 21.982s at 0.364MB / s ( 1.314kl / s ) ( 8.000 MB - 28.884 kilo-lines )
0.244 | audit.log: 19963 :        type =USER_AUTH acct = "root" exe = "/usr/bin/su" hostname =managesf.sftests.com
INFO  logreduce.Classifier - Testing took 18.297s at 0.306MB / s ( 1.094kl / s ) ( 5.607 MB - 20.015 kilo-lines )
99.99 % reduction ( from 20015 lines to 1

更高级的Logreduce使用可以离线训练模型以供重用。 基线的许多变体可用于拟合k -NN搜索树。


   
   
$ logreduce dir-train audit.clf / var / log / audit / audit.log. *
INFO  logreduce.Classifier - Training took 80.883s at 0.396MB / s ( 1.397kl / s ) ( 32.001 MB - 112.977 kilo-lines )
DEBUG logreduce.Classifier - audit.clf: written
$ logreduce dir-run audit.clf / var / log / audit / audit.log

Logreduce还实现了接口,以发现日志记录的时间范围(天/周/月)和Zuul CI作业建立历史记录的基线。 它还可以生成HTML报告,以简单的界面将在多个文件中发现的异常分组。

Logreduce HTML output

管理基准

使用k -NN回归进行异常检测的关键是拥有一个已知良好基线的数据库,该模型可用于检测偏离太大的线。 此方法依赖于包含所有名义事件的基线,因为在基线中未找到的任何内容都将报告为异常。

CI作业是k -NN回归的理想目标,因为作业输出通常是确定性的,并且以前的运行可以自动用作基准。 Logreduce具有Zuul作业角色,可以将其用作失败的作业发布任务的一部分,以便发布简明的报告(而不是完整作业的日志)。 只要可以预先构建基线,该原理就可以应用于其他情况。 例如,标称系统的SoS报告可用于查找有缺陷的部署中的问题。

Baselines management

异常分类服务

Logreduce的下一个版本引入了服务器模式,将日志处理卸载到外部服务,在该服务中可以进一步分析报告。 它还支持导入现有报告和请求以分析Zuul构建。 这些服务以异步方式运行分析,并具有Web界面以调整分数并消除误报。

Logreduce classification interface

可以将审阅的报告与目标日志文件一起存档为独立的数据集,并将异常行的分数记录在平面JSON文件中。

项目路线图

Logreduce已经得到有效使用,但是仍有很多改进工具的机会。 未来的计划包括:

  • 处理日志文件中发现的许多带注释的异常,并生成一个公共领域的数据集以进行进一步的研究。 日志文件中的异常检测是一个具有挑战性的主题,拥有通用的数据集来测试新模型将有助于识别新的解决方案。
  • 对模型重新使用带注释的异常,以优化报告的距离。 例如,当用户通过将其距离设置为零将线标记为误报时,该模型可能会减少将来报告中这些线的得分。
  • 对存档的异常进行指纹识别,以检测新报告何时包含已知异常。 因此,该服务可以报告用户该作业遇到了已知问题,而不是报告异常的内容。 解决此问题后,该服务可以自动重新启动作业。
  • 支持针对目标的更多基线发现接口,例如SOS报告,Jenkins构建,Travis CI等。

如果您有兴趣参与该项目,请通过#log-classify Freenode IRC频道与我们联系。 反馈总是很感激!


Tristan Cacqueray将于11月13日至15日在柏林举行的OpenStack峰会上展示使用机器学习降低日志噪音

翻译自: https://opensource.com/article/18/9/quiet-log-noise-python-and-machine-learning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值