fluxrank论文简单总结
三个重要时间节点:失败开始时间:Tf、变化开始时间:Tc、缓和开始时间:Tm
一般Tc变化开始时间最早,然后才是失败开始时间(服务故障Tf),一个机器故障(Tc)在半小时内甚至更短引发服务故障(Tf),Tf为告警时间,Tf-30<Tc<Tf<Tm
基本流程:
-
通过求变化分数(文章中定义)来标准化各个KPIs(机器或者业务等)的异常程度:
1.1 首先找到异常开始时间,对区间[Tf-30, Tf]通过一阶差分,然后进行时间序列异常检测,比如3-sigma方法获取异常开始时间(Tc),得到两个时间区间:(1)正常时间段[Tc-w2,Tc],(2)异常时间段[Tc,Tm],论文中给出w2为60分钟。这里Tm是在Tc基础上后推六分钟,也是根据实际经验来的。
1.2 通过KDE核密度估计计算出概率分布,通过条件概率 P ( X ≥ x j ∣ x i ) P(X \geq {x_j} |{x_i}) P(X≥xj∣xi)来计算变换程度:(ps.这里求联合条件概率是是将异常点的各个时刻看成独立事件,所以转换为连乘了)
P o ( { x j } ∣ { x j } ) = ∏ j = 1 l P ( X ≥ x j ∣ x i ) P_o(\{x_j\}|\{x_j\})=\prod^{l}_{j=1}{P(X \geq {x_j} |{x_i})} Po({xj}∣{xj})=j=1∏lP(X≥xj∣xi)
P u ( { x j } ∣ { x j } ) = ∏ j = 1 l P ( X ≤ x j ∣ x i ) P_u(\{x_j\}|\{x_j\})=\prod^{l}_{j=1}{P(X \leq {x_j} |{x_i})} Pu({xj}∣{xj})=j=1∏lP(X≤xj∣xi)
o = − 1 l ∑ j = 1 l l o g P ( X ≥ x j ∣ x i ) o=-\frac{1}{l}\sum^{l}_{j=1}{logP(X \geq {x_j} |{x_i})} o=−l1j=1∑llogP(X≥xj∣xi)
u = − 1 l ∑ j = 1 l l o g P ( X ≤ x j ∣ x i ) u=-\frac{1}{l}\sum^{l}_{j=1}{logP(X \leq {x_j} |{x_i})} u=−l1j=1∑llogP(X≤xj∣xi)
通过正常时间段数据,用KDE核密度估计,计算出概率密度分布,然后再计算的累计概率密度衡量该值的出现可能性,这里给出上涨和下降的变化程度分数,其实只需要大的一个,计算的时候就会发现o和u是对累计概率密度Po和Pu做了一个log转换而已,而Po和Pu和为1,所以o和u知道一个可以求出另一个,而且大的才能衡量其异常程度,因为一个值要么偏小多,要么偏大多少,而o和u就代表其偏离最正常值的程度,找出最大的即可。
-
聚类算法
2.1 构造特征向量和选择距离函数:每台机器的KPIs,因此对上述求出的KPIs的变换程度(O,U)进行排列,假如有k个KPIs,那么特征向量就是(O1,U1…Ok,Uk),距离函数可以用相关性系数,如pearson系数,为什么选择这种距离函数,文章中也做过实验验证,对于时间序列来说,有些有滞后性,所有用相似度,比欧几里得等距离函数更贴切。
2.2采用DBSCAN密度聚类,原因是无法知道具体的类别,了解该算法的都知道,dbs参不需要给出类别数,而是根据给出的距离半径eps和min_samples决定最后的类别,调试这两个超参数也是十分棘手的工作,将表现相似的机器聚类到同一个类别下。
-
排序:将异常的类别排在前面
这里文章中采用了训练逻辑回归模型排名,文章中选择了一些规则(具体看论文)选出了根因机器,然后也构建特征向量,这是一种有监督的算法,标注的数据集好像没有开源,复现的时候,最后我就用第一步求出异常程度(o,u)进行了简单的排序,效果也还行。
文章的思路比较简单,但是做了大量工作,如第一步中对各个指标的核密度估计,对每一种指标,都归纳出了适合的核函数(高斯分户,泊松分布等),然后后面对实际案例也进行了,验证了其有效性。
函数(高斯分户,泊松分布等),然后后面对实际案例也进行了,验证了其有效性。