APP下载

基于无监督学习算法的系统异常检测算法平台实现

2021-10-25张国军刘子莘吕品陈明霍超

科技信息·学术版 2021年19期
关键词:日志向量建模

张国军 刘子莘 吕品 陈明 霍超

摘要:一方面,随着服务器数量和业务量的增加,系统的运行情况变的越来越复杂,不易被发现的潜在风险越来越多,传统的通过设置某些指标的阈值对系统进行异常检测的方式已慢慢显示出弊端。另一方面,服务器每天会产生大量的系统日志和各项指标,如何更好的分析和利用这些日志和指标成为了一个值得思考的问题。基于以上两个问题,通过无监督学习算法对系统日志和各项指标进行分析,再将结果直观的展示给系统管理员提醒管理员系统存在的潜在风险,是一件很有意义的事情。

本文阐述了基于无监督学习算法搭建异常检测算法平台进行系统异常检测的设计与实现流程。介绍了项目组所使用的相关技术以及实现过程中使用到的解决方案。相关技术包括ELK平台、pyod算法库、词向量模型BERT。在设计阶段,对算法建模及异常检测和日志数据传输流程和架构进行了设计。在实现阶段,使用pyod算法库对FeatureBagging和IForest算法分别进行了建模和使用,通过检测结果进行对比最终选定与场景契合度较高的算法。

一、相关技术

ELK平台:ELK平台由Elasticsearch(开源分布式搜索引擎)、Logstash(日志收集、过滤工具)、Kibana(日志图形化工具)、kafka(大吞吐日志消息中间件)、beat(生产端日志发送工具)组成。用于日志收集、分析、展示。

异常检测算法庫pyod:pyod提供了约20种异常检测算法,可以找到与“主要数据分布”不同的异常值。

词向量模型BERT:BERT是一种基于transformer的双向编码语言模型,用于将文本转化为向量,是目前NLP的主流模型。

FeatureBagging算法:此算法属于集成方法的一种,基本思想与bagging相似。集成的主要步骤为选择基检测器和分类标准化、组合方法。

IForest(孤独森林)算法:此算法属于非参数和无监督的算法,是机器学习中专门针对异常检测设计的算法之一,算法特点为时间效率高、能有效处理高维数据和海量数据。

二、系统异常检测算法平台设计

基于无监督学习算法的系统异常检测平台主要是通过将日志及系统指标收集起来,通过算法进行建模,再对新产生的数据进行分析。基于此目的,在本阶段对日志及系统指标收集流程和算法建模及异常检测流程分别进行了设计。

1.日志及系统指标收集流程

通过ELK日志平台获取系统日志及指标数据。ELK平台的架构为第一步用beat从服务器实时获取数据,其中filebeat用于收集日志数据,metricbeat用于收集指标类数据。第二步层采用Kafka对日志收集进行缓冲,并按日志内容进行主题分类,以便后续的分类管理与检索。第三步Logstash对日志数据进行过滤解析,包括时间的校对、日志字段的分词、字段类型的转换和导出索引的设定。第四步Logstash将日志发送到ElasticSearch(ES),在ES中建立索引数据,进行索引模板和生命周期的管理。最终使用Kibana组件对日志数据进行可视化展现。由于kibana中展示的数据是为了让人进行阅读和使用,故这些数据的机器可读性较差。为了提高机器的可读性,在ELK的第三步搭建专属的logstash通道对kafka中的数据进行处理,使其成为机器易读的数据格式,并在数据处理后将其发送到异常检测算法平台。日志数据传输流程图,如图1所示。

2.算法建模及异常检测流程

在本部分使用pyod库搭建异常检测算法平台。当一定量的系统日志及指标输入到本平台后对其进行数据降维、文本特征向量处理等数据预处理方法后进行算法建模,训练出异常检测模型,后续通过异常检测模型判断后续输入的数据是否为异常值。由于日志分析是多维向量,故在算法选择时初步选定了FeatureBagging和IForest两个多维向量检测算法。日志数据传输流程图,如图2所示。

三、系统异常检测算法实现

在本部分以TongGTP的异常检测为案例阐述实现过程。TongGTP(以下简称gtp)是一个文件传输中间件,可以实现不同系统间的文件传输功能,在数据交换平台和批量场景中使用广泛,由于每个时间点发送的数据量没有特定规律,所以基于阈值的异常检测方法失效。gtp的数据指标分为四类gtp_send_succ、gtp_send_fail、gtp_recv_succ、gtp_recv_fail。beat每小时会在生产端采集一次数据并发送、存储在Elasticsearch,之后异常检测平台从Elasticsearch获取数据。gtp异常检测场景要通过四类指标的值分析出哪个时间点的gtp发送或接收存在问题。例如,通常每天9:00的gtp_send_succ为0,但某一天9:00的gtp_send_succ为1,则应该判断出gtp可能有问题,并告知管理员此风险。具体实现步骤介绍如下,

1.数据获取。由于gtp_send_succ、gtp_send_fail、gtp_recv_succ、gtp_recv_fail四个指标无法直接获得并且gtp的默认日志中也没有,所以先将这些指标写入日志文件gtp_filebeat.log再通过filebeat进行采集,创建gtplog主题汇入ELK平台,经过logstash格式化,Elasticsearch持久化后,送入异常检测算法平台。

2.数据预处理。该场景涉及到的向量包括timestamp、numtype、gtpnum。其中,timestamp的格式为Month day,year @ hour:minute:second,此格式数据机器无法识别,通过strptime将其转化为1970年到当前的秒数。numtype为简单文本,通过数据字典将其转化为[0,1,2,3]的特征向量。

3.数据建模。分别使用FeatureBagging和IForest算法对数据进行训练,得到模型。

4.异常检测。将测试数据输入不同的模型得到异常检测结果。FeatureBagging的检测结果如图3所示。IForest的检测结果如图4所示。根据结果显示,FeatureBagging的结果较集中,存在突出的异常点且异常值较大,IForest的结果较分散,异常值均比较低。将FeatureBagging的异常点信息提取出来并联系系统管理员对当时的情况进行分析,发现此点确实为异常点。根据分析,确定FeatureBagging算法较适用于gtp异常检测场景。

5.结果分析。通过对异常检测结果的分析对于gtp异常检测场景最终选定了FeatureBagging算法来训练其模型。通过该异常检测算法平台可以检测到无法触发阈值告警的gtp异常点。

猜你喜欢

日志向量建模
向量的分解
物理建模在教与学实践中的应用
高效管理日志文件用命令行就可以
在经历中发现在探究中建模
思维建模在连续型随机变量中的应用
读扶贫日志
求距求值方程建模
雅皮的心情日志
雅皮的心情日志
向量垂直在解析几何中的应用