基于机器学习的日志异常检测设计
2022-03-31徐洁
徐洁
(山西金融职业学院 山西省太原市 030008)
在数据时代,各种数据系统在运行的过程中会产生海量的日志,比如系统日志、应用日志、网络日志、设备日志等。对日志进行分析发现即使是同一个日志其也有不同的运行模式,所以运维人员在工作实践中很难掌握各类日志的格式,并对其做相应的解析原则开发,因此在一般情况下主要是进行核心日志的解析[1]。面对日志量大、格式繁多等现状,通过机器学习进行日志异常检测,这可以迅速的发现其中的故障并对故障进行定位,这对于传统运维方法改进和补充等有积极意义,对促进系统的职能、稳定、全面、安全运行等也有显著价值。
1 基于机器学习的日志日常检测设计
为了更加高效率的定位故障,进而实现对故障的处理,结合日志的特点基于机器学习对日志异常检测工作的开展进行设计,这能够为现阶段的工作实践提供参考。
1.1 传统日志处理方法
对目前各个行业的数据系统应用做分析可知各行各业使用的系统是比较多的,而且由于系统来自于不同的开发商,所以各个系统在开发的过程中,日志的定义是难以做到一致性和标准性的,这种情况导致的结果就是日志呈现出多种多样的状态。对传统的日志处理方式进行分析,其主要是利用关键字和解析规则两种方式实现对日志的监控和问题监测,不过这两种方法存在着明显的不足。
首先是基于关键字匹配对日志进行监控。基于关键字匹配存在日志中不一定有关键字异常,比如ORACLE RAC 在启动的过程中会有一些预期的Error 等字段,不过这种情况是正常的。简言之,在不同类型的日志针对过程中,很难标注出所有的关键字,而事实上甚至有些程序日志中根本不会存在类似的关键字,图1 是常规方法的日志处理流程。
图1:常规方法的日志处理流程
其次是基于配置解析规则的日志处理[2]。基于配置解析规则可以实现对日志的字段监控,如正则表达式的方法虽然比基于关键字的一日志监控有了一些改进,但是依然存在着两方面的显著缺陷:
(1)规则存在着复杂性。一些日志存在着大量的格式,解析工作是非常复杂的,往往需要花费大量的时间来进行调试。
(2)性能差。需要实时对来自多个系统的海量日志进行多个规则解析,性能表现比较差。
1.2 基于机器学习的日志智能异常检测
传统的日志处理方法存在着诸多缺陷,所以为了提高日志处理的实际效果,需要对传统方法进行改造。立足于日志系统的基本架构(图2)对系统日志的故障诊断或者是主动检测引入机器学习方法,这样可以实现日志模板的自动提取,而且可以通过分析从历史故障当中发现与之相关的模式,这样可以准确的检测出异常。就日志模板而言,支持增量式学习是一个重要且必备的能力[3]。在工作实践中,运维人员经常部署软件或者是硬件升级以引入新的特征,或者是解决以往版本的程序错误,这些更新工作可能会产生新的系统日志消息,而这些新的系统日志是难以映射到任何现有模板上的,所以需要从新的系统日志消息当中做新的模板提取,并且将其加入到模板集合当中。
图2:日志系统的基本架构
结合现阶段的具体实践需要并基于机器学习对日志智能异常检测进行设计,具体的设计思路如下:
(1)日志分词。分词的作用是进行完整日志分割,这样便可以得到若干词语构成序列。文本日志当中会有大量关键词存在,且这些关键词并不会在一般的文本中出现。就关键词的研究来看,其会提供一些与系统存在关系的内容,而且这些内容的特征是非常显著的,图3 是日志检测示意图[4]。
图3:基于深度模型的日志检测示意图
(2)提取模板。在海量日志的基础上进行模板的自动提取,并进行变量,同时利用自然语言处理技术可以对日志当中存在的共性进行分析,而且还可以在分析中发现常见模式,这可以保证日志模板提取的有效性。在日志提取模板工作结束之后进行日志文本结构化,这样可以将冗余的数据进行清理。在日志智能异常检测的过程中,使用到的关键技术之一便是提取日志模板以及变量。
(3)检测异常。结合获取的模板计数和变量对做日志的异常检测,根据之前提取的日志模板来做流动式日志处理以及数据分析,这样可以抽取出特定类型的变量分布情况,比如文件路径的长度、文件的传输速度等等。之后利用单指标异常检测方法和变量相关度分布度量可以实现日志当中数据的异常检测[5]。
(4)数据集成。在经过了异常检测之后需要将数据和数据展示平台进行整合,从而产生生产实际价值。其中,智能运维数据分析平台从数据采集源或者是第三方提供的数据库当中进行数据来源的获取,在经过分类提取、整合与入库之后,可以分别按照流式在线和批式两种方法进行消费。产生的分析结合和告警信息会分别通过数据接口和告警信息列队提供给前端和第三方平台。用户和第三方平台能够通过前端或者是接口到进行数据的获取、散发分析和告警推送流程配置。就整个过程而言,具体的运行机制为:数据队列,由采集平台主动写入数据或者是由订阅系统从第三方系统当中定时获取数据,并会通过队列的方式来为智能运维数据平台系统消费提供保障。数据库,数据库主要是备份获取的数据,并生成、存储智能分析模型元数据,同时存储分析结果实时数据。告警信息队列,流失计算产生的异常和告警信息均会通过该信息队列由第三方进行订阅[6]。RestAPI 接口,既可以用于采集平台主动推送数据,也可以对接北向接口,由应用系统或其他三方系统获取分析数据并进行调整,图4 是数据集成的具体图示。
图4:数据集成图示
2 基于机器学习的日志异常检测的核心算法技术
在日志智能异常检测工作的具体开展中,对检测的核心算法技术进行分析,并明确核心算法技术的应用价值和应用规律,这对于更好的发挥算法技术优势有显著意义。以下是在此次日志异常检测设计中使用到的核心算法技术。
2.1 日志智能异常检测的常见算法
通过系统日志预处理方法从历史系统日志当中进行模板提取,然后将日志的消息在模板上进行映射,模板提取准确率以及支持增量学习是处理海量日志过程中需要考虑的关键性要素。
对日志的异常识别算法进行分析,数据表现场景的异常识别主要使用的是LogClass 算法,无监督的异常识别使用的是DeepLog 算法,对这种算法的具体使用做分析,提前准备数据标签的行为可以省略[7]。对日志根因定位进行分析,为了保证定位的准确性,在实践中主要是利用FOCUS 算法,其能够基于系统日志做快速的分析,进而确定导致响应延时增加的条件。除了上述的算法之外,在日志智能异常检测的过程中还会利用到SyslogDigest 算法,这种算法针对的是网络设备的syslog,利用这种算法可以将网络事件按照优先级进行排序。对日志模板的生成方法进行分析,主要利用的是FT-tree 法,利用该方法生成日志模板之后能够对模板的类别等进行统计,还能够在异常检测中发挥作用,这样,分析人员的工作效率可以获得显著提升。图5 为某企业的添加搜索任务的日志模板提取示意图。
图5:某企业的日志模板提取示意图
对以上的几种算法进行深入调研,可以结合行业的特点或者是企业的具体特点来对具体的方法利用进行选择。比如某证券企业在日志异常检测的过程中,从企业自身的特点出发选择了FT-tree 作为日志模板提取和异常检测算法,同时还结合了KPI 异常检测法,两种方法的结合实现了日志的智能异常检测。
2.2 分词算法和FT-tree通用日志模板提取算法
对目前实践中使用的分词算法进行统计,其主要分为基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法三大类。在分词算法的具体分类中,基于词性标注过程的结合标准又可以进行划分,即为单纯分词算法、分词与标注结合算法。对海量的日志进行分析,其格式存在着变化特征,所以不可使用通标标准的方法对其进行有效分析,这种情况下,将单纯分词方法与FT-tree 进行结合,这样,模板以及特征变量的提取效果会显著好转。
就实践中的FT-tree 应用分析来看,其是一种具有拓展特性的前缀树结果,主要作用是表示日志消息模板。结合目前的应用实践做分析可知FT-tree 的使用准确率是比较突出的,而且在应用的过程中其能够支持增量学习[8]。立足于FT-tree 算法对日志智能异常检测模型进行构建,并强调模型基础上的日志数量完善以及更新,这样可以将日志模板进行转变,使其成为模板序列,这对于完成异常检测目的有积极意义。
对基于FT-tree 的日志模板提取算法进行分析,其流程主要分为三个部分,分别是分词、模板的提取和修正统计。分词部分主要是对通用文本分词和变量进行提取,这项工作的完成可以制作专门的编译器来进行,这样,只需要对日志进行一次遍历即可以提取指定的所有类型变量和词语[9]。在工作过程中,基于实际需要,可以预留接口其主要针对的是自定义特别大的时间戳进行运维人员定制提取,这部分采用正则表达式匹配的方式实现。两种方式结合整体提取效率能够达单核每秒处理上万条文本日志。
FT-tree 是实践中使用的核心模板提取算法,这种算法本质上是一种基于词频统计的词典树构造-检索算法。相对于绝大多数传统模板提取方法(例如常见的聚类方法),FTTree 可以以线性时间完成更高精度的提取,在训练样本数据量较大(千万级别)时优势更加明显。
2.3 KPI异常检测算法
日志模版和关键值完成提取后,采用KPI 异常检测算法进行分析和检测,根据时间序列的特征,计算资源的分配以及数据的时间来合理选用不同的模型组合来训练并生成对应的模型,其中所采用的技术和算法包括:变分自编码器、渐进梯度回归树、差分指数滑动平均、极值理论、周期性中值检测[10]。数据积累到一定程度即可开始在实际环境中在线检测,在线检测使用已训练好的模型对应的关键特征生成算法来生成新的时间点的特征,并用已训练好的模型对新的时间点的异常程度打分,从而来判断异常。
3 结束语
综上所述,在数据时代,数据信息的重要性表现越来越明显,所以在社会实践中需要关注数据的利用,同时要强调数据信息的准确性和有效性。各行各业在工作实践中会利用大量的系统,这些系统在运行的过程中会产生海量日志,而这些日志其实就是系统运行数据。通过日志的分析与检测发现其中存在的问题,重要是找到异常日志,并结合异常日志的分析确定系统运行的故障等问题,这对于文维护系统运行稳定等有积极的意义。传统的日志处理方法存在着诸多缺陷,不符合日志智能异常检测的具体需要,所以基于机器学习对日志智能异常检测进行研究,明确智能异常检测的具体思路,同时对检测工作中的关键性技术,主要是利用的算法等进行明确,这于实践有显著价值。