持续集成(CI)作业可以产生大量的数据。当作业失败时,找出了什么问题可能是一个繁琐的过程,需要对日志进行调查以发现根本原因-这通常是在作业总输出的一小部分中发现的。为了更容易地将最相关的数据从其他数据中分离出来,日志还原机器学习模型使用以前成功的作业运行来训练,以从失败的运行日志中提取异常。
此原则也可应用于其他用例,例如,从期刊或其他系统范围的常规日志文件。
利用机器学习降低噪声
一个典型的日志文件包含许多名义事件(“基线”)以及一些与开发人员相关的异常。基线可能包含难以检测和删除的随机元素,如时间戳或唯一标识符。要删除基线事件,我们可以使用k最近邻模式识别算法 (k-NN)。
的日志事件必须转换为数值。k-NN回归。使用通用特征提取工具HashingVectorizer允许将该进程应用于任何类型的日志。它对每个单词进行散列,并在稀疏矩阵中对每个事件进行编码。为了进一步减少搜索空间,令牌化将删除已知的随机单词,例如日期或IP地址。
一旦模型被训练,k-NN搜索告诉我们每个新事件与基线之间的距离。
Jupyter notebook演示了稀疏矩阵向量的过程,并绘制了稀疏矩阵向量图。
介绍LOGPREIN
LogReallyPython软件透明地实现了这个过程。的最初目标是协助祖尔CI使用构建数据库进行作业失败分析,现在将其集成到软件厂发展锻造的工作日志过程。
最简单的是,LogReduce比较文件或目录,并删除类似的行。Log冷水为每个源文件构建一个模型,并使用以下语法输出距离超过定义阈值的任何目标行:距离文件名:行号:行内容.
$ logreduce varlogauditaudit.log.1 varlogauditaudit.logINFO logreduce.Classifier - Training took 21.982s at 0.364MBs 1.314kls 8.000 MB - 28.884 kilo-lines0.244 audit.log:19963: =USER_AUTH ="root" ="/usr/bin/su" hostname=managesf.sftests.comINFO logreduce.Classifier - Testing took 18.297s at 0.306MBs 1.094kls 5.607 MB - 20.015 kilo-lines99.99 reduction from 20015 lines to
更高级的LogReduce使用可以将模型离线训练成可重用的模型。基线的许多变体可以用来适应k-NN搜索树
$ logreduce dir-train audit.clf varlogauditaudit.log.INFO logreduce.Classifier - Training took 80.883s at 0.396MBs 1.397kls 32.001 MB - 112.977 kilo-linesDEBUG logreduce.Classifier - audit.clf: written$ logreduce dir-run audit.clf varlogauditaudit.log
新闻热点
疑难解答