当前位置: 首页 > 科技观察

Logreduce:使用Python和机器学习去除日志噪音_0

时间:2023-03-13 23:26:20 科技观察

Logreduce可以通过从大量日志数据中挑选出异常来节省调试时间。持续集成(CI)作业会生成大量数据。当作业失败时,找出问题所在可能是一个乏味的过程,需要调查日志以发现根本原因——这通常只能在整个作业输出的一小部分中找到。为了更轻松地将最相关的数据与其余数据分开,可以使用先前成功运行的作业的结果来训练Logreduce机器学习模型,以从失败的运行日志中提取异常。这种方法也可以应用于其他用例,例如从Journald或其他系统范围的通用日志文件中提取异常。使用机器学习减少噪音典型的日志文件包含许多标称事件(“基线”)和一些与开发人员相关的异常事件。基线可能包含难以检测和删除的随机元素,例如时间戳或唯一标识符。要删除基线事件,我们可以使用k最近邻模式识别算法(k-NN)。日志事件必须转换为可用于k-NN回归的数值。使用通用特征提取工具HashingVectorizer,该过程可以应用于任何类型的日志。它散列每个单词并在稀疏矩阵中对每个事件进行编码。为了进一步减少搜索空间,此标记化过程会删除已知的随机词,例如日期或IP地址。训练模型后,k-NN搜索可以告诉我们每个新事件距离基线有多远。这个JupyterNotebook演示了这个稀疏矩阵向量的处理和绘图。Logreduce简介LogreducePython软件透明地实现了这个过程。Logreduce,最初是为了利用构建数据库辅助分析ZuulCI作业失败,现在已经集成到软件工厂开发工场的作业日志处理中。在最简单的情况下,Logreduce比较文件或目录并删除相似的行。Logreduce为每个源文件构建一个模型,并使用以下语法输出距离超过定义阈值的任何目标行:distance|filename:line-number:line-content。$logreducediff/var/log/audit/audit.log.1/var/log/audit/audit.logINFOlogreduce.Classifier-训练耗时21.982s,速度为0.364MB/s(1.314kl/s)(8.000MB-28.884kilo)-行)0.244|audit.log:19963:type=USER_AUTHacct="root"exe="/usr/bin/su"hostname=managesf.sftests.comINFOlogreduce.Classifier-测试耗时18.297s0.306MB/s(1.094kl/s)(5.607MB-20.015千行)减少99.99%(从20015行减少到1行更高级的Logreduce使用可以离线训练模型以供重用。基线的许多变体可用于拟合k-NN搜索树。$logreducedir-trainaudit.clf/var/log/audit/audit.log.*INFOlogreduce.Classifier-训练以0.396MB/s(1.397kl/s)(32.001MB-112.977kilo-lines)进行了80.883s调试logreduce.Classifier-audit.clf:written$logreducedir-runaudit.clf/var/log/audit/audit.logLogreduce还实现接口来发现Journald时间范围(日/周/月)和ZuulCI作业构建历史基线。它还可以生成HTML报告,在一个简单的界面中对跨多个文件发现的异常进行分组管理基线使用k-NN回归进行异常检测的关键是拥有一个已知的良好基线数据库,该模型使用数据库检测偏离太远的日志行。此方法依赖于包含所有名义事件的基线,因为在基线中未发现的任何内容都将被报告为异常。CI作业是k-NN回归的重要目标,因为作业的输出通常是确定性的,并且以前运行的结果可以自动用作基线。Logreduce有一个Zuul作业角色,可以用作失败的作业发布任务的一部分,以便发布简明的报告(而不是完整作业的日志)。只要可以提前建立基线,这个原则就可以应用于其他情况。例如,标称系统的SoS报告可用于查找有缺陷的部署中的问题。AnomalyTriageService下一个版本的Logreduce引入了一种服务器模式,将日志处理卸载到可以进一步分析报告的外部服务。它还支持导入现有报告和请求以分析Zuul构建。这些服务异步运行分析,并有一个Web界面来调整分数和消除误报。审计报告可以存档为单独的数据集,其中包含目标日志文件和记录在纯JSON文件中的异常行分数。ProjectRoadmapLogreduce已经可以有效使用,但还有很多机会可以改进该工具。未来的计划包括:整理在日志文件中发现的许多带注释的异常,并生成一个公共领域数据集以供进一步研究。日志文件中的异常检测是一个具有挑战性的话题,拥有用于测试新模型的通用数据集将有助于确定新的解决方案。带注释的异常模型被重新用于改进报告的距离。例如,当用户通过将距离设置为零将日志行标记为误报时,模型可能会在未来的报告中降低这些日志行的分数。指纹存档异常以检测新报告何时包含已知异常。因此,该服务可以通知用户作业遇到了已知问题,而不是报告异常情况。问题解决后服务可以自动重启作业。支持针对SOS报告、Jenkins构建、TravisCI等目标的更多基准发现接口。如果您有兴趣参与此项目,请通过#log-classifyFreenodeIRC频道联系。欢迎反馈!