Logreduce 可以通过从大量日志数据中挑选出异常来节省调试时间。用音 持续集成(CI)作业会生成大量数据。和机当一个作业失败时,器学弄清楚出了什么问题可能是习去一个繁琐的过程,它涉及到调查日志以发现根本原因 —— 这通常只能在全部的除日作业输出的一小部分中找到。为了更容易地将最相关的志噪数据与其余数据分开,可以使用先前成功运行的用音作业结果来训练 Logreduce 机器学习模型,以从失败的和机运行日志中提取异常。 此方法也可以应用于其他用例,器学例如,习去从 Journald 或其他系统级的除日常规日志文件中提取异常。 典型的志噪日志文件包含许多标称事件(“基线”)以及与开发人员相关的一些例外事件。基线可能包含随机元素,用音例如难以检测和删除的和机时间戳或唯一标识符。要删除基线事件,器学我们可以使用 k-最近邻模式识别算法(k-NN)。 日志事件必须转换为可用于 k-NN 回归的数值。使用通用特征提取工具 HashingVectorizer 可以将该过程应用于任何类型的日志。它散列每个单词并在稀疏矩阵中对每个事件进行编码。为了进一步减少搜索空间,这个标记化过程删除了已知的云服务器随机单词,例如日期或 IP 地址。 训练模型后,k-NN 搜索可以告诉我们每个新事件与基线的距离。 这个 Jupyter 笔记本 演示了该稀疏矩阵向量的处理和图形。 Logreduce Python 软件透明地实现了这个过程。Logreduce 的最初目标是使用构建数据库来协助分析 Zuul CI 作业的失败问题,现在它已集成到 Software Factory 开发车间的作业日志处理中。 最简单的是,Logreduce 会比较文件或目录并删除相似的行。Logreduce 为每个源文件构建模型,并使用以下语法输出距离高于定义阈值的任何目标行:distance | filename:line-number: line-content。 更高级的 Logreduce 用法可以离线训练模型以便重复使用。可以使用基线的许多变体来拟合 k-NN 搜索树。 Logreduce 还实现了接口,以发现 Journald 时间范围(天/周/月)和 Zuul CI 作业构建历史的基线。它还可以生成 HTML 报告,该报告在一个简单的界面中将在多个文件中发现的异常进行分组。服务器租用 使用 k-NN 回归进行异常检测的关键是拥有一个已知良好基线的数据库,该模型使用数据库来检测偏离太远的日志行。此方法依赖于包含所有标称事件的基线,因为基线中未找到的任何内容都将报告为异常。 CI 作业是 k-NN 回归的重要目标,因为作业的输出通常是确定性的,之前的运行结果可以自动用作基线。 Logreduce 具有 Zuul 作业角色,可以将其用作失败的作业发布任务的一部分,以便发布简明报告(而不是完整作业的日志)。只要可以提前构建基线,该原则就可以应用于其他情况。例如,标称系统的 SoS 报告 可用于查找缺陷部署中的问题。 下一版本的高防服务器 Logreduce 引入了一种服务器模式,可以将日志处理卸载到外部服务,在外部服务中可以进一步分析该报告。它还支持导入现有报告和请求以分析 Zuul 构建。这些服务以异步方式运行分析,并具有 Web 界面以调整分数并消除误报。 已审核的报告可以作为独立数据集存档,其中包含目标日志文件和记录在一个普通的 JSON 文件中的异常行的分数。 Logreduce 已经能有效使用,但是有很多机会来改进该工具。未来的计划包括: 如果你有兴趣参与此项目,请通过 #log-classify Freenode IRC 频道与我们联系。欢迎反馈!使用机器学习来降低噪音
Logreduce 介绍
管理基线
异常分类服务
项目路线图