07月19, 2018

LVS流量异常检测

背景

公司中存在大量的vip流量数据,vip流量异常将会导致一些严重的问题,运维人员也可以通过对vip流量数据异常的检测判断当前LVS是否正常,以及时解决问题。

流量数据实际是一组时间序列,因此流量异常检测就是时间序列异常点的检测问题。本文通过计算环比,同比,振幅等值以及运用iForest算法实现了时间序列异常点的检测问题。

方法研究:

本文通过计算时间序列的环比,EWMA,同比,振幅,以及检测点的孤立森林的分数,再与各个指标的阈值进行比较判断检测点是否为异常点。各个指标的阈值是利用对17000余个vip流量数据进行统计,通过数据的前5%的值作为初始阈值。下面将分别详细介绍:

环比:

通过计算检测点与过去几个时刻点数据差的绝对值,得到环比列表,再与环比阈值比较,多数超过阈值则说明检测点是异常点,否则检测点为正常点。若检测点异常而且检测点高于上一时刻点,则为突增情况,否则为突降情况。对17000余个vip流量数据进行统计,并获取每个vip的环比列表最大值,取前5%的值作为初始阈值。

EWMA:

EWMA是以指数式递减加权的移动平均。各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值。加权的程度以常数α决定,α数值介乎0至1,本文中α的取值为1/21。具体的EWMA公式如下:

alt

利用上述公式能够计算变换后的序列的均值和方差,如果检测点在3sigma以外,那么该点是异常点,否则为正常点。如果检测点是异常点,而且检测点高于上一时刻点,则为突增情况,否则为突降情况。

同比:

同比的判断与环比类似,也是通过计算获取一个同比列表,但是异常点的判断方式略有不同。同比的判断是:如果检测点比上一时刻点数值大,而且检测点值大于同比中的最大值与同比上限阈值的乘积要大,那么检测点是突增异常点;如果检测点比上一时刻点数值小,而且检测点小于同比中的最小值与同比下限阈值的乘积,那么检测点是突降异常点;若检测点不满足上述两种情况,那么检测点是正常点。获取vip数据的同比上/下限的前5%作为初始阈值。

振幅:

通过计算过去几天检测时刻与上一时刻的增幅的比例得到振幅列表。振幅指标的判断与同比类似,也需要上/下限两个阈值辅助判定,这里就不详细展开了,获取vip数据的振幅上/下限的前5%作为初始阈值。

iForest算法:

iForest算法是周志华老师于2010年设计的一种异常点检测算法,该方法同过利用数据构建iTree,进而构建iForest,是一种无监督的检测方法,具有很好的效果,具体算法可参见:http://www.cnblogs.com/fengfenggirl/p/iForest.html

这里我们给出该算法的简单介绍:

iForest是由iTree构建而成的,因此我们首先介绍iTree。iTree是一种随机二叉树,每个节点要么有两个子节点,要么该节点为叶子节点。对于给定的数据集D,数据集中的所有的特征都是连续变量,iTree的构造如下:

(1) 在数据集D中随机选择一个特征A;

(2) 随机选择特征A的一个可能取值value;

(3) 根据特征A以及值value将数据集D分为两个子集,将特征A的值小于value的样本归入左子节点,余下部分归入右子节点;

(4)递归构造左右子树直至满足以下的终止条件:

a. 传入的数据集只有一条记录或者多条相同记录

b. 树的高度达到了限定高度

iTree建立好了以后,就可以对数据进行预测了,预测的过程是将测试记录在iTree上面走一遍。iTree能有效的检测异常点是基于异常点都很稀有这一假设,异常点应该在iTree中很快被划分到叶子节点,因此可以利用检测点被分入的叶子节点到根的路径长度h(x)判断检测点x是否为异常点。在判断时希望将所有的叶子节点到根的路径长度都限制在0,1之间,因此需要进行归一化操作,具体的归一化公式如下:

alt

alt

在构建好了iTree后就可以构建iForest,iForest中的每棵树在构造时并不是将所有的数据都用上,而是随机采样,抽取一部分构造iTree,尽量保证每棵树都不相同。事实上,如果iTree在构造时运用很多的数据点反而不能得到很好的效果,主要因为数据点会有重叠,因此效果不够显著。而且因为由iTree变成iForest因此S(x,n)的计算公式也要改变,将h(x)变为E(h(x))是检测点x在每棵树上的平均高度。iForest算法在python中有现成的包可以调用,具体如下:

alt

alt

利用iForest算法进行判断时,如果检测点的孤立森林分数为正数,那么检测点为正常点,否则为异常点。如果检测点为异常点,而且检测点的值比其他正常点平均值高出一定的阈值则为突增异常点;反之检测点的值比其他正常点平均值低一定的阈值则为突降异常点;利用vip数据计算iForest阈值的前5%作为初始阈值。

总结:

时序数据的异常点检测在很多的领域都有很重要的作用,本文通过计算同比,环比,EWMA,振幅以及运用iForest算法进行检测,本文所选择的方法实现简便,也能取得很好的效果。其实还有很多其他的方法可以帮助检测,例如LSTM,One Class SVM等等。因此这个领域还有待更加深入的研究。

本文链接:https://www.opsdev.cn/post/flowcheck.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。