Logreduce 可以通过从大量日志数据中挑选出异常来节省调试时间。

持续集成(CI)作业会生成大量数据。当一个作业失败时,弄清楚出了什么问题可能是一个繁琐的过程,它涉及到调查日志以发现根本原因 —— 这通常只能在全部的作业输出的一小部分中找到。为了更容易地将最相关的数据与其余数据分开,可以使用先前成功运行的作业结果来训练 Logreduce 机器学习模型,以从失败的运行日志中提取异常。

此方法也可以应用于其他用例,例如,从 Journald 或其他系统级的常规日志文件中提取异常。

使用机器学习来降低噪音

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

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

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

这个 Jupyter 笔记本 演示了该稀疏矩阵向量的处理和图形。

Logreduce 介绍

Logreduce Python 软件透明地实现了这个过程。Logreduce 的最初目标是使用构建数据库来协助分析 Zuul CI 作业的失败问题,现在它已集成到 Software Factory 开发车间的作业日志处理中。

最简单的是,Logreduce 会比较文件或目录并删除相似的行。Logreduce 为每个源文件构建模型,并使用以下语法输出距离高于定义阈值的任何目标行:distance | filename:line-number: line-content。

$ logreducediff/var/log/audit/audit.log.1/var/log/audit/audit.log

INFO  logreduce.Classifier-Trainingtook21.982sat0.364MB/s(1.314kl/s)(8.000MB-28.884kilo-lines)

0.244|audit.log:19963:type=USER_AUTH acct="root"exe="/usr/bin/su"hostname=managesf.sftests.com

INFO  logreduce.Classifier-Testingtook18.297sat0.306MB/s(1.094kl/s)(5.607MB-20.015kilo-lines)

99.99%reduction(from20015lines to1

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

$ logreducedir-train audit.clf/var/log/audit/audit.log.*

INFO  logreduce.Classifier-Trainingtook80.883sat0.396MB/s(1.397kl/s)(32.001MB-112.977kilo-lines)

DEBUG logreduce.Classifier-audit.clf:written

$ logreducedir-run audit.clf/var/log/audit/audit.log

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

管理基线

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

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

异常分类服务

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

已审核的报告可以作为独立数据集存档,其中包含目标日志文件和记录在一个普通的 JSON 文件中的异常行的分数。

项目路线图

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

策划在日志文件中发现的许多带注释的异常,并生成一个公共域数据集以进行进一步研究。日志文件中的异常检测是一个具有挑战性的主题,并且有一个用于测试新模型的通用数据集将有助于识别新的解决方案。

重复使用带注释的异常模型来优化所报告的距离。例如,当用户通过将距离设置为零来将日志行标记为误报时,模型可能会降低未来报告中这些日志行的得分。

对存档异常取指纹特征以检测新报告何时包含已知的异常。因此,该服务可以通知用户该作业遇到已知问题,而不是报告异常的内容。解决问题后,该服务可以自动重新启动该作业。

支持更多基准发现接口,用于 SOS 报告、Jenkins 构建、Travis CI 等目标。

如果你有兴趣参与此项目,请通过 #log-classify Freenode IRC 频道与我们联系。欢迎反馈!

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

python数据去噪声_Logreduce:用Python和机器学习去除日志噪音相关推荐

  1. python代码去马赛克_十行python代码教你如何去除万恶的,如s一样的马赛克

    世界上有一种东西,叫作马赛克,不知道困扰了多少痴男怨女.小编新get到一个技能,忍不住拿出来秀一秀. 小编这几天的了解其实水印和马赛克的原理是一样的,都是覆盖.一般是去不了的,那么这个技术来了,请看~ ...

  2. python数据可视化代码_用Python代码实现5种最好的、简单的数据可视化!

    数据可视化是数据科学家工作的重要组成部分.在项目的早期阶段,您通常会进行探索性数据分析(EDA)以获得对数据的一些见解.创建可视化确实有助于使事情更清晰.更容易理解,尤其是对于更大.更高维度的数据集. ...

  3. python 数据透视表_使用Python数据透视表探索幸福数据

    python 数据透视表 One of the biggest challenges when facing a new data set is knowing where to start and ...

  4. 利用python数据可视化_想用Python做数据可视化?先迈过这个“坎”

    文丨Chris Moffitt 编译丨姜瑞琪 触脉咨询数据分析师 用过python的人都会面临一个问题,尤其是初学者:我应该选哪个来实现数据可视化? 面对众多的选项,要弄清楚什么时候使用哪个的问题没那 ...

  5. python数据整理 高一_关于Python爬虫的最全知识梳理,项目经理花了三天总结出来的经验...

    作爲零基础小白,大体上可分爲三个阶段去完成,第一阶段是入门,掌握必备基础知识,比如Python基础.网络央求的基本原理等,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,熟习主流的爬虫工具,第三 ...

  6. python 数据逐个验证_在python中验证数据的最佳方法是什么?

    我是Python的新手,我试图找到验证数据的最佳方法.在 我有一个"well"类型的对象,它具有其他对象的属性.也可以通过XML文件来获取数据.下面是一个例子.在class Wel ...

  7. python数据笔记分析_利用 Python 进行数据分析学习笔记(一)

    数据分析是产品经理的必备技能之一,今年有意在提升自己这方面的能力.为了系统地学习,花了 20 个小时左右的时间在 Coursera 上学完的<用 Python 玩转数据分析>. 课程简介 ...

  8. python 数据去重_科学网—python学习——根据条件提取数据,并去重 - 李立的博文...

    [Python字符串提取] 摘要:根据要求进行字符串的提取,并去重 导入分析所需的库import pandas as pd 构造数据集 as1 = pd.DataFrame({'a':[1,2,3,4 ...

  9. python数据论文_如何利用Python绘制学术论文图表

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷:1.当数据较多时,容易出现excel"翻白眼"的现象:2.需要使用 ...

最新文章

  1. LeetCode简单题之交替位二进制数
  2. Elastic Search学习笔记5——基本操作
  3. Pytorch机器学习/深度学习代码笔记
  4. 在SIP对讲机中RTP/RTCP的实现
  5. homebrew php70,OSX下安装PHP7教程详解
  6. theano 编程技巧
  7. ThreadStatic特性简介
  8. Hibernate【2】——封装工具、HibernateUtil类以及DAO层的BaseDAO类
  9. 传智播客 机器学习基础 学习笔记
  10. 深入理解Nginx~网络连接的设置
  11. Web基础配置篇(四): Mysql的配置及使用
  12. opencv火焰检测小项目
  13. sht20中写用户寄存器_哪位帮忙看看下,程序读取SHT20 的温度时就不行,无ACK反馈了...
  14. python中将字符变为大写_python3.4.3将汉字转换为大写拼音首字母
  15. OneZero第一次站立会议Sprint Planning Meeting(2016.3.21)
  16. 关于容斥定理、勾股数公式、排列组合置换公式的总结
  17. 有一种记录叫“时光轴”!
  18. 毕业设计-基于机器学习的建筑能耗预测
  19. CAD如何删除图层 显示未删除选定图层
  20. Red Wine Quality(红酒品质相关数据集)

热门文章

  1. 基于TensorRT优化的Machine Translation
  2. Androidx FloatingActionButton 中间图片颜色值修改
  3. Android - 下载别人的android demo 运行的时候加载很久问题处理
  4. Java 数值大小比较
  5. Binary XML file line #98: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lan
  6. 0x开头的颜色值和#开头的颜色值的区别以及转化
  7. 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
  8. DSP28335声音降噪(未完成)
  9. 不同级域名中的 Cookie 共享
  10. centos6一键安装vsftpd脚本