设计用于日志文件分析的AI


12

我正在开发一种AI工具,以查找已知设备的错误并查找新的故障模式。这个日志文件是基于时间的,并且具有已知消息(信息和错误)。我正在使用JavaScript库Event drop以一种柔软的方式显示数据,但是我的实际工作和怀疑是如何训练AI来找到已知的模式并找到新的可能模式。我有一些要求:

1-工具应a。不依赖于额外的环境安装或b。越少越好(完美的方案是在独立模式下完全在浏览器上运行该工具);

2-可能使模式分析器碎片化,一种模块化,每个错误一个模块;

推荐使用哪种算法(神经网络,遗传算法等)?存在使用JavaScript工作的东西吗?如果不是,那么制作此AI的最佳语言是什么?


1
我怀疑基于规则的东西比机器学习更适合于此
antlersoft

@antlersoft对于已知的问题,我同意,但是我也想搜索模式以与缺陷建立关联。
朱利诺·奥利维拉

推荐的?让我们想想...使用正则表达式?对于使用经典算法无法解决的问题,建议使用神经网络。几乎所有的神经网络都获取预处理数据。如果您“预处理”日志,那么您也可以获得解决方案。
betontalpfa

Answers:


9

条目之间的相关性

第一条建议是确保在日志文件中显示适当的警告和信息条目,以及在解决方案的机器学习组件中出现的错误。如果信息消息,警告和错误之间可能存在关联,则所有日志条目都是潜在有用的输入数据。有时相关性很强,因此对于最大程度地提高学习率至关重要。

系统管理员通常将其视为一系列警告,然后是由警告中指示的条件引起的错误。与系统或子系统严重故障时创建的错误条目相比,警告中的信息更能指示故障的根本原因。

如果正在为可互操作的一台设备或一系列机器构建系统运行状况仪表板,那么在此问题中似乎就是这种情况,出现问题的根本原因和某些预警功能是显示的关键信息。

此外,并非所有不良的系统健康状况都以失败告终。

在呈现给学习机制之前,唯一应通过过滤消除的日志条目肯定是不相关且不相关的。当日志文件是来自多个系统的日志的聚合时,可能就是这种情况。在这种情况下,应从与可能与所分析现象不相关的条目中分离出要分析的独立系统的条目。

重要的是要注意,一次只能将一项分析限制在一个条目之内,这极大地限制了仪表板的用途。系统的运行状况不等于最新日志条目的运行状况指示。它甚至不是最近N个条目的健康指示的线性和。

系统健康状况与许多条目具有非常非线性和非常时间相关的关系。模式可能会在几天之内逐渐出现在许多类型的系统上。如果需要一个非常有用的仪表板,则必须对系统中的基础(或基础)神经网络进行培训,以识别健康,即将发生的危险和风险状况的这些非线性指示。为了显示即将发生的故障或质量控制问题的可能性,相当长的日志条目的整个时间窗口必须进入此神经网络。

已知模式与未知模式之间的区别

注意,已知模式的识别在一个重要方面与新模式的识别不同。已经确定了已知错误的条目语法的特质,从而大大减轻了在处理这些条目的输入归一化阶段的学习负担。必须首先发现新错误类型的语法特质。

已知类型的条目也可以与未知条目分开,从而可以将已知条目类型用作训练数据,以帮助学习新的句法模式。目的是将语法标准化的信息呈现给语义分析。

特定于日志文件的标准化的第一阶段

如果时间戳记在条目中始终位于同一位置,则可以将其转换为相对毫秒数,并可以在进行任何其他操作之前先删除0x0a字符之前的任何0x0d字符,作为标准化的第一步。堆栈跟踪也可以折叠成跟踪级别的制表符分隔的数组,以便日志条目和日志行之间一一对应。

由错误和非错误类型的条目的已知和未知条目产生的语法归一化信息然后可以呈现给无监督的网络,以对语义结构的类别进行简单的标识。我们不想对数字或文本变量(例如用户名或零件序列号)进行分类。

如果适当地标记了语法标准化信息以指示高度可变的符号(例如计数,容量,度量和时间戳),则可以使用特征提取以保持语义结构和变量之间区别的方式来学习表达模式。保持这种区别可以跟踪系统指标中更连续(较少离散)的趋势。每个条目可以具有零个或多个这样的变量,无论是先验已知的还是最近通过特征提取获得的。

可以根据时间或特定种类的实例数绘制趋势图。此类图形可帮助识别机械疲劳,过负荷情况或逐步升级到故障点的其他风险。当趋势表明即将发生这种情况时,可以训练更多的神经网络以产生警告指标。

懒记录

如果软件架构师和技术人员停止将重要系统信息的存储格式留给软件开发人员各种方便的想法,那么所有这些日志分析将毫无意义。日志文件通常是一团糟,提取有关其中模式的统计信息是软件质量控制中最常见的挑战之一。由于没有一种流行的日志记录框架鼓励严谨性,因此严谨性将普遍应用于日志记录的可能性很小。这很可能是为什么这个问题经常被人们关注的原因。

此特定问题的要求部分

在此问题提出的特定情况下,要求#1表示希望在浏览器中运行分析,这是可能的,但不建议这样做。尽管ECMA是一种很棒的脚本语言,并且ECMA内置了可以帮助学习解析器的正则表达式机制(它符合要求#1的另一部分,不需要额外的安装),但未编译的语言几乎没有像Java一样高效。甚至Java也不如C高效,这是因为垃圾收集和低效率(通过将字节码到机器码的映射委托给运行时而导致的低效率)引起。

机器学习的许多实验都使用Python,这是另一种出色的语言,但是我在Python中所做的大部分工作随后都移植到了计算效率高的C ++中,在许多情况下,速度提高了近1,000倍。甚至C ++方法查找也是一个瓶颈,因此,端口使用ECMA样式的继承很少,但速度更快。在传统的典型内核代码中,C结构和函数指针的使用消除了vtable的开销。

模块化处理程序的第二个要求是合理的,它暗示着一个触发的规则环境,很多人可能会认为这与NN体系结构不兼容,但事实并非如此。一旦确定了模式类别,就已经在上面的过程中嵌入了已知/未知区别,这意味着在其他输入数据中首先寻找最常见的类别。然而,这种模块化方法存在挑战。

由于系统运行状况通常由趋势指示,而不是单个条目(如上所述),并且由于系统运行状况不是单个条目的运行状况值的线性和,因此处理条目的模块化方法不应仅通过管道传递到显示中分析。实际上,这是神经网络将在健康监控中提供最大功能收益的地方。模块的输出必须输入一个神经网络,可以对其进行训练以识别健康,即将发生的危险和风险状况的这些非线性指示。

此外,故障前行为的时间方面意味着,相当长的日志条目的整个时间窗口必须进入该网络。这进一步暗示了ECMA或Python不适合作为解决方案的计算密集型部分的选择。(请注意,Python的趋势是实现我对C ++的用途:使用面向对象的设计,封装和易于遵循的设计模式来编写监督代码,并使用非常高效的类似于内核的代码来进行实际学习和其他计算密集型或数据密集型功能。)

挑选算法

不建议在体系结构的初始阶段选择算法(如问题末尾所暗示的那样)。首先设计流程。确定学习组件,所需组件的类型,它们在训练后的目标状态,可以使用增强的位置以及如何生成健康/错误信号以增强/纠正所需的网络行为。这些确定不仅基于期望的显示内容,而且还基于期望的吞吐量,计算资源要求和最小有效学习率。只有在至少所有这些内容都经过大致定义之后,才能有意义地选择系统的算法,语言和容量规划。

生产中的类似工作

作为社交网络自动化的一部分,简单的自适应解析在实验室中正在运行,但仅适用于有限的符号集和顺序模式。它确实可以扩展而无需重新配置为任意大的基本语言单元,前缀,结尾和后缀,仅受我们的硬件容量和吞吐量限制。正则表达式库的存在有助于简化设计。我们使用各向异性形式的DCNN馈入的PCRE版本8系列库,从具有可配置窗口大小和移动增量大小的输入文本中移动的窗口中提取特征。应用于第一遍中收集的输入文本统计信息的启发式方法会产生一组假设的PCRE,这些PCRE分为两层。

进行了优化,以在混乱的文本搜索中将较高的概率权重应用于最佳PCRE。它使用与训练中NN反向传播相同的梯度下降收敛策略。这是一种幼稚的方法,它不会做出诸如回溯,文件或错误之类的假设。它将同等地适应阿拉伯文和西班牙文。

输出是内存中的任意有向图,类似于面向对象数据库的转储。

قنبلة -> dangereux -> 4anlyss
bomba -> dangereux
ambiguïté -> 4anlyss -> préemption -> قنبلة

尽管针对增强版本的折返算法已经过时,并且健康信号已经可用,但其他工作抢占了进一步的机会,进一步发展了自适应解析器,或者着手下一步将工作用于自然语言:将有向图与持久有向图匹配代表思想的过滤器,可以模仿语言理解的思想记忆方面。

最后评论

该系统具有类似于日志分析问题的组件和流程体系结构,并证明了上面列出的概念。当然,在进行日志记录的系统的开发人员之间进行日志记录的方式越混乱,人工或人工代理对条目进行歧义化的难度就越大。长期以来,某些系统日志记录的质量控制很差,以至于日志几乎没有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.