首页> 中国专利> 基于序列化自编码器的无监督KPI异常检测方法

基于序列化自编码器的无监督KPI异常检测方法

摘要

本发明公开了一种基于序列化自编码器的无监督KPI异常检测方法,目的是提高KPI异常检测的准确性和鲁棒性。技术方案是构建基于序列化自编码器的无监督KPI异常检测系统;输入模块提取KPI值向量;数据预处理模块对KPI值向量进行预处理;离线训练模块对标准化后的KPI值向量进行切分,构建异常检测模型并对模型进行训练;自动阈值选择模块计算阈值;有效检测窗口设置模块获取有效窗口值;输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测,得到检测结果;显示模块显示检测结果。采用本发明可解决漏报率高、误报率高等问题,有效提高KPI异常检测的准确率。

著录项

  • 公开/公告号CN113204590A

    专利类型发明专利

  • 公开/公告日2021-08-03

    原文格式PDF

  • 申请/专利权人 中国人民解放军国防科技大学;

    申请/专利号CN202110597955.X

  • 申请日2021-05-31

  • 分类号G06F16/2458(20190101);G06K9/62(20060101);G06N3/04(20060101);G06N3/08(20060101);

  • 代理机构43257 湖南企企卫知识产权代理有限公司;

  • 代理人任合明

  • 地址 410073 湖南省长沙市开福区德雅路109号

  • 入库时间 2023-06-19 12:05:39

说明书

技术领域

本发明属于信息技术系统智能运维技术领域,具体涉及一种基于序列化自编码器(自编码器是一种特殊结构的深度神经网络,包括编码器和解码器两个对称的结构)的无监督KPI(Key Performance Indicator,关键性能指标)异常检测方法。

背景技术

近年来随着云计算业务的广泛部署、数据中心规模的不断扩大、网络和通信系统的不断发展,互联网企业、运营商、金融机构等内部的IT架构在数量和规模上不断扩展,IT系统的服务器、存储设备、网络设备等数量越来越多,系统结构也愈加复杂多样,而保障IT系统的稳定性、可用性和高效性的运维工作必不可少,且运维人员任务愈加繁重,时常处于“救火”状态。当前IT系统的运维人员面临极大的工作压力,传统的依靠人力的运维模式已难以适应大规模IT系统发展的需求。同时,相比于传统运维的方式,大数据时代的运维面临着集群规模更大、业务组件更多、监控可视化与智能化更为复杂等诸多难题。综上所述,从机器规模到数据规模的扩大,传统的运维方式和方法已经不能满足现今互联网产品快速迭代的需求,为了保障良好的用户体验和业务效果,亟需更高效、更智能化的系统运维技术。

人工智能是撬动IT系统智能化的支点。随着大数据时代的到来,在海量数据场景下,利用大数据和人工智能等技术赋能现代化IT运维管理是当前运维领域的研究热点。2016年Gartner正式提出了智能运维(Artificial Intelligence for IT Operations,AIOps)的概念,即利用人工智能技术赋能IT运维,旨在利用AI算法分析海量运维数据,自动、准确地发现和定位问题,提高运维效率。当大数据、人工智能等技术赋能传统行业、驱动变革时,运维结合AI技术则把IT行业中原来完全依靠人工经验、重复枯燥的工作,推向了自动化、智能化的运维,引领运维的下一步发展方向,极大减轻了运维和研发人员的负担。运维的技术体系伴随着IT系统的快速发展而愈加完善,从最开始的纯人工运维到脚本和开源工具的使用,再到平台建设,运维也紧跟时代的步伐,逐渐向智能化方向发展。在海量数据场景下,AIOps开始成为下一代运维技术发展的热点。

自动化、智能化的KPI(Key Performance Indicator,关键性能指标)异常检测工作是智能运维的首要和关键环节。KPI可以直观地反应系统的实时状态,因此,为保证系统的可用性、可靠性和稳定性,及时发现故障、解决故障,为用户提供更好的服务体验,运维系统收集和监测各类KPI。KPI可分为两种:一种是业务级KPI(Business-related KPI),比如页面访问量、APP连接错误数量等,此类KPI可以反应系统规模、质量等;另一种是机器级KPI(Machine-level KPI),包括CPU/内存使用率、网卡吞吐率等,此类KPI可以反应系统硬件(服务器、路由器等)的健康状态。

IT系统中的KPI异常检测工作是当前智能运维领域的研究热点,已有方法取得了一定的效果,但依然还有很多工作值得深入。现有KPI异常检测工作面临以下挑战:

1.大规模IT系统需要对海量KPI进行监控,运维人员亟需更加自动化、智能化的异常检测方法以迅速、准确地发现问题,进而进行故障的移除和定位;

2.实际环境中产生的KPI比较复杂,除故障导致的异常点外,还有缺失点、噪声点等,增加了对KPI建模的难度;

3.在KPI中,异常值的分布仅占整体数据的很小部分,这造成了KPI的正负样本不均衡。此外,对于海量KPI,人工标注成本过高。

无监督方法可以很好地处理KPI缺乏标签且正负样本不均衡的问题。目前,针对KPI的无监督异常检测方法在工业界主要使用Liu等人提出的iForest(Liu FT,Ting K M,Zhou Z H.Isolation forest[C]//2008Eighth IEEE International Conference onData Mining.IEEE,2008:413-422.译为:孤立森林算法)。该算法利用集成学习的方法构造“树”,通过计算各节点到根节点的距离进行异常点的判断,距离根节点越近,异常值越大,即是异常点的可能性也最大。iForest可以实现线性时间复杂度,但需要人工预先设置异常点比例。

现有的无监督KPI异常检测的研究点主要集中在深度生成模型的研究与应用上,其中的典型代表包括Xu等人提出的基于变分自编码器(Variational Autoencoder,VAE)的Donut算法(Xu H,Chen W,Zhao N,et al.Unsupervised Anomaly Detection viaVariational Auto-encoder for Seasonal KPIs in Web Applications[C]//Proceedings of the 2018World Wide Web Conference.2018:187-196.译为:基于变分自编码器适用于web应用的无监督异常检测)及其改进版Bagel算法(Li Z,Chen W,PeiD.Robust and Unsupervised KPI Anomaly Detection Based on ConditionalVariational Autoencoder[C]//2018IEEE 37th International Performance Computingand Communications Conference(IPCCC).IEEE,2018:1-9.译为:基于条件变分自编码器的鲁棒性无监督异常检测算法)。Bagel算法在Donut算法的基础上利用条件变分自编码器(Conditional Variational Autoencoder,CVAE)将时间信息作为条件,对原始数据进行重构。二者取得了一定的成果,但以上两种方法仅在周期型KPI数据上表现良好。

综上所述,现有无监督KPI异常检测方法主要存在以下问题:

1.KPI本质上是时间序列数据,时间信息是其本质属性,但现有方法将KPI数据当作非序列数据(non-sequential data)进行处理,导致检测准确率不理想;

2.需要人工设置异常检测的阈值,这与人工异常检测方法在本质上存在同样的问题:阈值设置过高则漏报率高,阈值设置过低则误报率高。

发明内容

本发明要解决的技术问题是提供一种基于序列化自编码器的无监督KPI异常检测方法。首先,该方法为KPI提供一种序列化的异常检测方法,通过对现有针对时间序列异常检测模型进行改进,将KPI作为序列数据进行训练和检测,可以实现较高的准确性和鲁棒性;其次,该方法在保证准确性的前提下,支持运维人员设置有效检测时间段,使运维人员可以更加灵活地按需设置有效检测时段,一定程度上减少系统告警数量,进而减缓告警风暴的发生;最后,该方法在数据预处理阶段利用线性插值(Linear Interpolation)方法对缺失点进行自动填充,在检测阶段之前利用极值理论(Extreme Value Theory,EVT)实现自动阈值选择功能,避免人工设置阈值带来的误报率/漏报率权衡的问题。

为解决上述技术问题,本发明的技术方案是:在利用自编码器重构数据的基础上,利用集成学习的方法,结合循环神经网络(Recurrent Neural Network,RNN)和残差网络(Residual Networks,ResNet)的思想,通过构造不同结构的序列化自编码器,对原始数据进行重构,在保留前序节点信息的同时保证自编码器结构的随机性,降低模型过拟合的风险,提高KPI异常检测的准确性和鲁棒性。在数据预处理阶段,由于缺失点是否恰当处理将直接影响模型的检测效果,本发明对原始KPI序列中的缺失点采用线性插值方法进行填充,线性插值填充可以避免缺失点直接补零或取中值等方法对数据整体分布的影响,且执行速度不影响系统整体性能。利用极值定理实现自动阈值的选择,可在检测阶段降低漏报率和误报率,提高检测结果的准确性。最后本发明允许在有效窗口内进行异常值的检测,进而在保证系统检测准确性的同时,有效降低告警数量。

本发明包括以下具体步骤:

第一步,构建基于序列化自编码器的无监督KPI异常检测系统(简称异常检测系统)。异常检测系统由历史KPI序列数据库、在线KPI序列数据库、输入模块、数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块、输出模块和显示模块组成。

历史KPI序列数据库与输入模块相连,该数据库存储历史KPI序列,用于训练模型。历史KPI序列的每一条由三元组(Time,Value,Label)表示,其中:Time=(t

在线KPI序列数据库与输入模块相连,该数据库用于存储在线KPI数据,由二元组(Time,Value)表示,其中Time向量和Value向量与历史KPI序列的含义相同。

输入模块与历史KPI序列数据库、在线KPI序列数据库和数据预处理模块相连,训练阶段输入模块从历史KPI序列数据库读取历史KPI序列,从中提取历史KPI值向量,将历史KPI值向量发送给数据预处理模块;检测阶段输入模块从在线KPI序列数据库读取在线KPI序列,从中提取在线KPI值向量,将在线KPI值向量发送给数据预处理模块。

数据预处理模块与输入模块、离线训练模块和在线检测模块相连,数据预处理模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),首先采用线性插值方法对KPI值向量中的缺失点进行填充,然后对填充后的KPI值向量进行标准化处理,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。数据预处理模块包含缺失点线性插值填充模块和KPI值向量标准化模块。

缺失点线性插值填充模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),处理KPI值向量中的缺失点,采用线性插值方法对KPI值向量中的缺失点进行填充,形成完整的KPI值向量,即填充后的KPI值向量,将填充后的KPI值向量发送给KPI值向量标准化模块。

KPI值向量标准化模块从缺失点线性插值填充模块接收填充后的KPI值向量,对填充后的KPI值向量进行标准化计算,获得标准化后的KPI值向量(包括标准化后的历史KPI值向量和标准化后的在线KPI值向量),并将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。

离线训练模块(即基于序列化自编码器的KPI异常检测模型训练模块)与数据预处理模块、自动阈值选择模块和在线检测模块相连。离线训练模块从数据预处理模块接收标准化后的历史KPI值向量,将标准化后的历史KPI值向量作为输入对异常检测模型进行训练,得到异常分值和训练好的模型,将异常分值发送到自动阈值选择模块,同时将训练好的模型发送给在线检测模块。

自动阈值选择模块与离线训练模块和在线检测模块相连,采用极值理论进行计算并得到阈值,将阈值发送给在线检测模块。

有效检测窗口设置模块与在线检测模块相连,有效检测窗口设置模块接收运维人员设置的有效检测窗口值,将有效检测窗口值发送给在线检测模块。

在线检测模块与数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块和输出模块相连。在线检测模块从数据预处理模块接收标准化后的在线KPI值向量,从离线训练模块接收训练好的模型,从自动阈值选择模块接收阈值,从有效检测窗口设置模块接收有效窗口值,根据这些输入对在线KPI序列进行异常检测并得到检测结果,将检测结果发送到输出模块。

输出模块与在线检测模块相连,从在线检测模块接收检测结果,将检测结果发送到显示模块。

显示模块与输出模块相连,动态显示检测结果,若有异常结果则发送告警信息,由运维人员进行处理。

第二步:输入模块访问历史KPI序列数据库,从读取到的历史KPI序列提取KPI值向量V,将V发送到数据预处理模块。

第三步:数据预处理模块采用缺失点线性插值填充和标准化处理方法对KPI值向量C进行预处理,方法是:

3.1缺失点线性插值填充模块采用线性插值方法对C中的缺失点按公式一进行填充,将填充后的KPI值向量V′发送给KPI值向量标准化模块。

V′=V.interpolate(method=′linear′) 公式一

interpolate()函数为pandas库(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.inter polate.html)提供的插值函数,参数method=′linear′表示使用线性方法进行插值计算。V′=(v′

3.2KPI值向量标准化模块对V′进行标准化操作,得到标准化后的KPI值向量V

其中:μ代表V′的均值,σ代表V′的方差,向量V

3.3KPI值向量标准化模块将V

第四步:离线训练模块对V

4.1离线训练模块从KPI值向量标准化模块接收V

4.2离线训练模块对V

4.3离线训练模块采用基于随机跨步连接的RNN(Random Step Connection RNN,RSCR)方法构建由N个不同结构的序列化自编码器组成的无监督KPI异常检测模型;再对序列化自编码器组成的无监督KPI异常检测模型进行离线训练,其中N个序列化自编码器均接收V

4.3.1构建基于序列化自编码器的无监督KPI异常检测模型,方法是:

4.3.1.1构建N个序列化编码器,方法是:

4.3.1.1.1令变量j=0;

4.3.1.1.2如果j=0,构建第一个编码器并得到第一个编码器的输出第一元组,方法是:利用tf.nn.dynamic_rnn函数(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/dynamic_rnn,tf.nn.dynamic_rnn函数是tensorflow封装的用来实现递归神经网络(RNN)的函数)构造一个隐藏层节点个数为h的LSTM(Long Short-Term Memory,长短时记忆网络),h=16,得到第一个编码器;第一个编码器以

4.3.1.1.3如果j=1,构建第二个编码器并得到第二个编码器的输出第二元组,方法是利用tf.nn.dynamic_rnn函数构造一个隐藏节点个数为h个的Basic LSTM

(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/rnn_cell/BasicLSTM Cell?hl=ko,遗忘偏置为1的LSTM,实现方法基于OED(Outlier EnsemblesDetection)方法:参见https://github.com/tungk/OED),h=16,得到第二个编码器;第二个编码器以

4.3.1.1.4如果1

4.3.1.1.5,构建第3到第N个编码器并得到第3到第N个编码器的输出,方法是:

4.3.1.1.5.1令变量q=3;

4.3.1.1.5.2如果q≤N,转4.3.1.1.5.3;否则转4.3.1.1.6;

4.3.1.1.5.3构建第q个编码器并以

其中M为随机数,M∈{0,1},0表示无连接,1表示有连接,tanh(·)为一种神经网络激活函数(https://www.tensorflow.org/api_docs/python/tf/math/tanh),sigmoid(·)为另一种神经网络激活函数(https://www.tensorflow.org/api_docs/python/tf/math/sigmoid)。

4.3.1.1.5.4令q=q+1,转4.3.1.1.5.2;

4.3.1.1.6令变量j=j+1,转4.3.1.1.2;

4.3.1.1.7输出N个元组{(E

转4.3.1.2;

4.3.1.2构建共享层,方法是:

4.3.1.2.1共享层从N个编码器接收N个元组,即{(E

4.3.1.2.2将权重矩阵W赋初值为0,矩阵大小为16×16;

4.3.1.2.3将N个编码器最后一个隐藏节点的状态形成向量

其中concatenate(Z

4.3.1.3构建N个解码器,将

4.3.1.3.1令变量k=0;

4.3.1.3.2如果k=0,构造第一个解码器:利用tf.contrib.seq2seq.BasicDecoder函数(https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/contrib/seq2seq/pyth on/ops/basic_decoder.py)构造一个隐藏节点个数为h′个的LSTM,此处h′=h×N,输出重构向量

4.3.1.3.3如果k=1,构建第二个解码器,利用tf.contrib.seq2seq.BasicDecoder函数构建一个隐藏节点个数为h′的LSTM,此处h′=h×N,输出重构向量

4.3.1.3.4如果1

4.3.1.3.5构造第3到第N个解码器,方法是:

4.3.1.3.5.1令变量g=3;

4.3.1.3.5.2如果g≤N,转4.3.1.3.5.3;否则转4.3.1.3.6;

4.3.1.3.5.3构建第g个解码器:利用tf.contrib.seq2seq.BasicDecoder函数构建隐藏节点个数为h′的RSCR-RNN,h′=h×N,输出重构向量

4.3.1.3.5.4令g=g+1,转4.3.1.3.5.2;

4.3.1.3.6令变量k=k+1,转4.3.1.3.2;

4.3.1.3.7输出N个重构向量

4.3.1.3.8定义损失函数和优化函数,方法为:

4.3.1.3.8.1定义损失函数loss:

其中:input

4.3.1.3.8.2采用Adam(https://www.tensorflow.org/swift/api_docs/Classes/Adam)作为模型训练的优化函数。

至此,基于序列化自编码器的KPI异常检测模型构建完毕,转4.3.2。

4.3.2对基于序列化自编码器的KPI异常检测模型进行离线训练,方法是:

4.3.2.1令变量p=1;

4.3.2.2将

4.3.2.3创建tensorflow的会话(session,简称sess)(创建会话方法:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/session.py);

4.3.2.2.1令变量iter=0,令迭代次数ITER=50;

4.3.2.2.2利用sess.run()方法(参见https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/session.py)采用输入数据

4.3.2.2.3如果iter

4.3.2.3计算异常分值,方法是:

4.3.2.3.1令变量b=0;

4.3.2.3.2根据

4.3.2.3.3如果b

4.3.2.3.4取Error

4.3.2.3.5如果p≤P,令变量p=p+1,转4.3.2.2;否则得到最终异常分值向量Score,

4.4离线训练模块将Score发送给自动阈值选择模块,将异常检测模型发送给在线检测模块。

第五步:自动阈值选择模块根据Score计算阈值,方法是:

5.1自动阈值选择模块从离线训练模块接收Score;

5.2自动阈值选择模块采用EVT方法(EVT方法见文献Siffer A,Fouque P A,Termier A,et al.Anomaly detection in streams with extreme value theory[C]//Proceedings of the 23rd ACM SIGKDD International Conference on KnowledgeDiscovery and Data Mining.2017:极值理论流数据异常检测中的应用,第4页算法1)分析Score分布,得到阈值Threshold。

5.3自动阈值选择模块将阈值Threshold发送给在线检测模块;

第六步:有效检测窗口设置模块接收运维人员设置的模块检测有效窗口值w,w为正整数且1≤w≤10,优选取值1、5或10,将w发送给在线检测模块。

第七步:输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测:

7.1输入模块读取在线KPI序列数据库,提取在线KPI值向量V

7.2数据预处理模块采用第三步所述的缺失点线性插值填充和标准化处理方法对V

7.3在线检测模块利用异常检测模型,利用第五步得到的阈值Threshold、第六步设置的有效窗口值w,对V

7.3.1在线检测模块将V

7.3.2在线检查模块分别计算N个序列化自编码器的重构误差,方法是:

7.3.2.1令x=1;

7.3.2.2计算并保存第x个自编码器的KPI值向量的重构误差向量

7.3.2.3令x=x+1,如果x≤N,转7.3.1.2,否则计算结束,输出N个自编码器的重构误差向量Error

7.3.3根据Error

7.3.3.1令a=1;

7.3.3.2读取并保存N个重构误差,方法是:

7.3.3.2.1令u=1;

7.3.3.2.2从Error

7.3.3.2.3令u=u+1,如果u≤N,转7.3.3.2.2,否则输出

7.3.3.2.4取

median()为numpy的中位数计算函数(https://numpy.org/doc/stable/reference/generated/numpy.median.html)。

7.3.3.3令a=a+1,如果a≤A,转7.3.2.2;否则输出异常检测模型的异常分值SCore

转7.3.4;

7.3.4将阈值Threshold与SCore

7.3.4.1令变量a=1;

7.3.4.2判断第a个KPI值是否异常,方法是:

如果

7.3.4.3令a=a+1,如果a≤A,转7.3.3.2;否则比较完毕,输出检测结果向量Y,Y=(y

7.3.5根据窗口值w,向在线检测模块输入检测结果向量Y,在线检测模块计算窗口内的异常值向量

7.3.5.1令d=1;

7.3.5.2计算

7.3.5.3若d≤m,令d=d+1,转7.3.5.2;若d>m,说明计算完毕,得到最终的检测结果Y

7.3.6将Y

第八步:输出模块从在线检测模块接收检测结果Y

第九步:显示模块显示检测结果Y

采用本发明可以达到以下技术效果:

1.本发明第一步设计了能够对不同分布特征的KPI序列进行准确检测的异常检测系统,第四步采用随机跨步连接方法构建了基于序列化自编码器的无监督KPI异常检测模型,将不同结构的序列化自编码器对历史KPI序列进行训练,能够有效提高KPI异常检测的准确率。

2.本发明第四步构建基于序列化自编码器的KPI异常检测模型,并对模型进行训练,通过计算重构误差进行异常值的判断,可解释性强,同时第五步提供了自动阈值选择功能,有效缓解了固定阈值方法带来的误报率或漏报率较高的问题。

3.本发明为运维人员提供了有效检测窗口值,运维人员通过有效检测窗口值对应的有效检测窗口可以根据需要灵活设置有效检测时间,从而降低系统告警数量,有效减缓告警风暴的产生。

附图说明

图1是本发明第一步构建的基于序列化自编码器的无监督KPI异常检测系统逻辑结构图。

图2是本发明总体流程图。

图3是本发明第四步离线训练模块对V

图4是本发明第七步:输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合对在线KPI序列进行检测的流程图。

具体实施方式:

图2是本发明总体流程图。如图2所示,本发明包括以下步骤:

第一步,构建基于序列化自编码器的无监督KPI异常检测系统(简称异常检测系统)。异常检测系统如图1所示,由历史KPI序列数据库、在线KPI序列数据库、输入模块、数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块、输出模块和显示模块组成。

历史KPI序列数据库与输入模块相连,该数据库存储历史KPI序列,用于训练模型。历史KPI序列的每一条由三元组(Time,Value,Label)表示,其中:Time=(t

在线KPI序列数据库与输入模块相连,该数据库用于存储在线KPI数据,由二元组(Time,Value)表示,其中Time向量和Value向量与历史KPI序列的含义相同。

输入模块与历史KPI序列数据库、在线KPI序列数据库和数据预处理模块相连,训练阶段输入模块从历史KPI序列数据库读取历史KPI序列,从中提取历史KPI值向量,将历史KPI值向量发送给数据预处理模块;检测阶段输入模块从在线KPI序列数据库读取在线KPI序列,从中提取在线KPI值向量,将在线KPI值向量发送给数据预处理模块。

数据预处理模块与输入模块、离线训练模块和在线检测模块相连,数据预处理模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),首先采用线性插值方法对KPI值向量中的缺失点进行填充,然后对填充后的KPI值向量进行标准化处理,将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。数据预处理模块包含缺失点线性插值填充模块和KPI值向量标准化模块。

缺失点线性插值填充模块从输入模块接收KPI值向量(包括历史KPI值向量和在线KPI值向量),处理KPI值向量中的缺失点,采用线性插值方法对KPI值向量中的缺失点进行填充,形成完整的KPI值向量,即填充后的KPI值向量,将填充后的KPI值向量发送给KPI值向量标准化模块。

KPI值向量标准化模块从缺失点线性插值填充模块接收填充后的KPI值向量,对填充后的KPI值向量进行标准化计算,获得标准化后的KPI值向量(包括标准化后的历史KPI值向量和标准化后的在线KPI值向量),并将标准化后的历史KPI值向量发送给离线训练模块,将标准化后的在线KPI值向量发送给在线检测模块。

离线训练模块(即基于序列化自编码器的KPI异常检测模型训练模块)与数据预处理模块、自动阈值选择模块和在线检测模块相连。离线训练模块从数据预处理模块接收标准化后的历史KPI值向量,将标准化后的历史KPI值向量作为输入对异常检测模型进行训练,得到异常分值和训练好的模型,将异常分值发送到自动阈值选择模块,同时将训练好的模型发送给在线检测模块。

自动阈值选择模块与离线训练模块和在线检测模块相连,采用极值理论进行计算并得到阈值,将阈值发送给在线检测模块。

有效检测窗口设置模块与在线检测模块相连,有效检测窗口设置模块接收运维人员设置的有效检测窗口值,将有效检测窗口值发送给在线检测模块。

在线检测模块与数据预处理模块、离线训练模块、自动阈值选择模块、有效检测窗口设置模块和输出模块相连。在线检测模块从数据预处理模块接收标准化后的在线KPI值向量,从离线训练模块接收训练好的模型,从自动阈值选择模块接收阈值,从有效检测窗口设置模块接收有效窗口值,根据这些输入对在线KPI序列进行异常检测并得到检测结果,将检测结果发送到输出模块。

输出模块与在线检测模块相连,从在线检测模块接收检测结果,将检测结果发送到显示模块。

显示模块与输出模块相连,动态显示检测结果,若有异常结果则发送告警信息,由运维人员进行处理。

第二步:输入模块访问历史KPI序列数据库,从读取到的历史KPI序列提取KPI值向量V,将V发送到数据预处理模块。

第三步:数据预处理模块采用缺失点线性插值填充和标准化处理方法对KPI值向量V进行预处理,方法是:

3.1缺失点线性插值填充模块采用线性插值方法对V中的缺失点按公式一进行填充,将填充后的KPI值向量V′发送给KPI值向量标准化模块。

V′=V.interpolate(method=′linear′) 公式一

interpolate()函数为pandas库(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.inter polate.html)提供的插值函数,参数method=′linear′表示使用线性方法进行插值计算。V′=(v′

3.2KPI值向量标准化模块对V′进行标准化操作,得到标准化后的KPI值向量V

其中:μ代表V′的均值,σ代表V′的方差,向量V

3.3KPI值向量标准化模块将V

第四步:如图3所示,离线训练模块对V

4.1离线训练模块从KPI值向量标准化模块接收V

4.2离线训练模块对V

4.3离线训练模块采用基于随机跨步连接的RNN方法构建由N个不同结构的序列化自编码器组成的无监督KPI异常检测模型;再对序列化自编码器组成的无监督KPI异常检测模型进行离线训练,其中N个序列化自编码器均接收V

4.3.1构建基于序列化自编码器的无监督KPI异常检测模型,方法是:

4.3.1.1构建N个序列化编码器,方法是:

4.3.1.1.1令变量j=0;

4.3.1.1.2如果j=0,构建第一个编码器并得到第一个编码器的输出第一元组,方法是:利用tf.nn.dynamic_rnn函数构造一个隐藏层节点个数为h的LSTM(Long Short-TermMemory,长短时记忆网络),h=16,得到第一个编码器;第一个编码器以

4.3.1.1.3如果j=1,构建第二个编码器并得到第二个编码器的输出第二元组,方法是利用tf.nn.dynamic_rnn函数构造一个隐藏节点个数为h个的Basic LSTM(https://www.tensorflow.org/api_docs/python/tf/compat/v1/nn/rnn_cell/BasicLSTM Cell?hl=ko,遗忘偏置为1的LSTM,实现方法基于OED方法:h=16,得到第二个编码器;第二个编码器以

4.3.1.1.4如果1

4.3.1.1.5,构建第3到第N个编码器并得到第3到第N个编码器的输出,方法是:

4.3.1.1.5.1令变量q=3;

4.3.1.1.5.2如果q≤N,转4.3.1.1.5.3;否则转4.3.1.1.6;

4.3.1.1.5.3构建第q个编码器并以

其中M为随机数,M∈{0,1},0表示无连接,1表示有连接,tanh(·)为一种神经网络激活函数,sigmoid(·)为另一种神经网络激活函数。

4.3.1.1.5.4令q=q+1,转4.3.1.1.5.2;

4.3.1.1.6令变量j=j+1,转4.3.1.1.2;

4.3.1.1.7输出N个元组{(E

转4.3.1.2;

4.3.1.2构建共享层,方法是:

4.3.1.2.1共享层从N个编码器接收N个元组,即{(E

4.3.1.2.2将权重矩阵W赋初值为0,矩阵大小为16×16;

4.3.1.2.3将N个编码器最后一个隐藏节点的状态形成向量

其中concatenate(Z

4.3.1.3构建N个解码器,将

4.3.1.3.1令变量k=0;

4.3.1.3.2如果k=0,构造第一个解码器:利用tf.contrib.seq2seq.BasicDecoder函数构造一个隐藏节点个数为h′个的LSTM,此处h′=h×N,输出重构向量

4.3.1.3.3如果k=1,构建第二个解码器,利用tf.contrib.seq2seq.BasicDecoder函数构建一个隐藏节点个数为h′的LSTM,此处h′=h×N,输出重构向量

4.3.1.3.4如果1

4.3.1.3.5构造第3到第N个解码器,方法是:

4.3.1.3.5.1令变量g=3;

4.3.1.3.5.2如果g≤N,转4.3.1.3.5.3;否则转4.3.1.3.6;

4.3.1.3.5.3构建第g个解码器:利用tf.contrib.seq2seq.BasicDecoder函数构建隐藏节点个数为h′的RSCR-RNN,h′=h×N,输出重构向量

4.3.1.3.5.4令g=g+1,转4.3.1.3.5.2;

4.3.1.3.6令变量k=k+1,转4.3.1.3.2;

4.3.1.3.7输出N个重构向量

4.3.1.3.8.1定义损失函数loss:

其中:input

4.3.1.3.8.2采用Adam作为模型训练的优化函数。

至此,基于序列化自编码器的KPI异常检测模型构建完毕,转4.3.2。

4.3.2对基于序列化自编码器的KPI异常检测模型进行离线训练,方法是:

4.3.2.1令变量p=1;

4.3.2.2将

4.3.2.3创建tensorflow的会话(session,简称sess);

4.3.2.2.1令变量iter=0,令迭代次数ITER=50;

4.3.2.2.2利用sess.run()方采用输入数据

4.3.2.2.3如果iter

4.3.2.3计算异常分值,方法是:

4.3.2.3.1令变量b=0;

4.3.2.3.2根据

4.3.2.3.3如果b

4.3.2.3.4取Error

4.3.2.3.5如果p≤P,令变量p=p+1,转4.3.2.2;否则得到最终异常分值向量Score,

4.4离线训练模块将Score发送给自动阈值选择模块,将异常检测模型发送给在线检测模块。

第五步:自动阈值选择模块根据Score计算阈值,方法是:

5.1自动阈值选择模块从离线训练模块接收Score;

5.2自动阈值选择模块采用EVT方法分析Score分布,得到阈值Threshold。

5.3自动阈值选择模块将阈值Threshold发送给在线检测模块;

第六步:有效检测窗口设置模块接收运维人员设置的模块检测有效窗口值w,w为正整数且1≤w≤10,优选取值1、5或10,将w发送给在线检测模块。

第七步:如图4所示,输入模块、数据预处理模块、自动阈值选择模块、有效检测窗口设置模块、在线检测模块相互配合,对在线KPI序列进行检测:

7.1输入模块读取在线KPI序列数据库,提取在线KPI值向量V

7.2数据预处理模块采用第三步所述的缺失点线性插值填充和标准化处理方法对V

7.3在线检测模块利用异常检测模型,利用第五步得到的阈值Threshold、第六步设置的有效窗口值w,对V

7.3.1在线检测模块将V

7.3.2在线检查模块分别计算N个序列化自编码器的重构误差,方法是:

7.3.2.1令x=1;

7.3.2.2计算并保存第x个自编码器的KPI值向量的重构误差向量

7.3.2.3令x=x+1,如果x≤N,转7.3.1.2,否则计算结束,输出N个自编码器的重构误差向量Error

7.3.3根据Error

7.3.3.1令a=1;

7.3.3.2读取并保存N个重构误差,方法是:

7.3.3.2.1令u=1;

7.3.3.2.2从Error

7.3.3.2.3令u=u+1,如果u≤N,转7.3.3.2.2,否则输出

7.3.3.2.4取

median()为numpy的中位数计算函数。

7.3.3.3令a=a+1,如果a≤A,转7.3.2.2;否则输出异常检测模型的异常分值Score

转7.3.4;

7.3.4将阈值Threshold与Score

7.3.4.1令变量a=1;

7.3.4.2判断第a个KPI值是否异常,方法是:

如果

7.3.4.3令a=a+1,如果a≤A,转7.3.3.2;否则比较完毕,输出检测结果向量Y,Y=(y

7.3.5根据窗口值w,向在线检测模块输入检测结果向量Y,在线检测模块计算窗口内的异常值向量

7.3.5.1令d=1;

7.3.5.2计算

7.3.5.3若d≤m,令d=d+1,转7.3.5.2;若d>m,说明计算完毕,得到最终的检测结果Y

7.3.6将Y

第八步:输出模块从在线检测模块接收检测结果Y

第九步:显示模块显示检测结果Y

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号