如何实现单指标异常检测(算法规则是关键)

曾无好事来相访,赖尔高文一起予。这篇文章主要讲述如何实现单指标异常检测?算法规则是关键相关的知识,希望能为你提供帮助。
IT运维领域要保障服务正常运行,通常第一步是将运维的对象监控起来,这其中主要就是对运维对象的指标进行实时监控:通过设定的(算法)规则对指标进行实时检测,当某个指标值不符合设定的规则时,则判定为异常,然后发送相应的告警到告警平台。
告警平台收到告警后,会分配给对应的运维人员进行处理,运维人员根据告警信息来排查问题所在,最终定位故障的根本原因,并对故障进行修复。

从这个流程可以看出,整个过程是以告警为中心,所以告警的质量至关重要。那么,如何保证指标类告警的质量呢,这就需要使用准确有效的(算法)规则来对指标进行异常检测了。


一、指标异常检测常面临的问题1、规模庞大


随业务发展的大规模系统和设备导致需要监控的指标呈指数型增加。
?
2、指标类型多样化


不同的系统和业务,其指标的形态千变万化,没有单一不变的方法可以覆盖所有的指标情况。


因此,要提高指标异常检测的效率和准确性,降低告警的误报率及漏报率,我们要从以上两个问题点出发去解决单指标异常检测的问题。

二、什么是单指标异常检测?

在探讨问题的解决方案之前,这里先给单指标异常检测的相关概念做一个陈述:
?
时间序列:是一组按照时间发生先后顺序进行排列的数据点序列。时间序列的时间间隔为此时序数据的频率。
?
异常:在时间序列中,异常是指在一个或多个信号的模式发生意料之外的变化。


所以,单指标异常检测即对单个变量的时间序列数据进行异常发现的过程。在运维领域内,cpu、mem、disk等资源的使用量、网络流量等指标的异常检测都属于单指标异常检测。

▲ 图片来源谷歌,如有侵权请联系删除

三、如何实现单指标异常检测【如何实现单指标异常检测(算法规则是关键)】

通过上面的内容,我们对单指标异常检测有了大致的了解,下面来讲述如何实现它。
?
1、指标分类


首先我们来解决上面提到的问题二——指标类型多样化的问题。时序数据的形态各异(如下图),如何通过一种有效的分类方式将时序数据分类呢?

▲ 图片来源谷歌,如有侵权请联系删除


假设一条时间序列是由多种成分相加得来,那么它可以写为如下形式:


y(t)=S(t)+T(t)+R(t)


其中S(t)、T(t)、R(t)分别是周期成分(seasonal component)、趋势成分(trend-cycle component)、残差成分(remainder component)。如下图,将原始时序数据data通过STL分解为三种分量(trend、seasonal、remainder)之和。



此外,时间序列也可以写成相乘的形式(对于乘性模型,可以取对数(当然是有意义的前提下,将其转化为加性模型):


y(t)=S(t)×T(t)×R(t)

▲ 图片来源谷歌,如有侵权请联系删除


至此,我们的问题转变为:用什么方法判断曲线的类别(趋势型、季节型、波动型)?下面介绍常用的两种方式:


皮尔逊相关系数(PCCs)判别法



通过时序数据的分解算法将原始数据分解为3个分量,而后分别计算三个分量与原始数据的皮尔逊相关系数,取系数最大的分量作为曲线的类别(如最大系数差别较小,可划分此曲线同属2个类别)。(分解法包括:经典分解法、X11分解法、SEATS分解法、STL分解法等)


依据人工设定阈值的判别法

?
是否是波动型:计算时序数据的标准差,并和设定好的阈值(人工经验)来进行比较得出。
?
是否是趋势型:EWMA平滑处理时序数据,而后通过一元线性回归拟合曲线,通过对y=kx+b的k值与设定好的阈值比较得出曲线是否是趋势型。
?
是否是季节性:对于非波动型数据不做季节性判断;对于波动型数据,获取当天、上一天、上周的同一天数据,归一化处理后分别计算当天与另外两天的MSE,取其中较小值与设定好的阈值进行比较得出曲线是否是季节型。


2、对应检测模型构建



针对问题一——指标数据规模庞大的问题,这就使得无监督的算法相较于有监督算法、简单模型相较于复杂模型具有更大的优势:节省人力+普适性强+检测效率高。


下图列出了将指标数据进行曲线分类后,适用算法的情况(不考虑有监督算法)。



在实际使用过程中,一般会对每种类型的指标进行2种及以上的算法模型检测,并对结果进行投票决策,提高检测准确率。(注:考虑到延迟,同比环比算法都是相较于过去的某个时间范围而不是对应的时间点)


目前,我们的监控平台已内置多种指标异常检测算法,告别静态阈值检测,有效提高异常检测质量,极大的降低了过去静态阈值方法造成的告警漏报、错报率。



▲ 监控中心展示


发现故障是告警质量的决定性环节,指标异常检测作为运维故障发现-分析-处理流程的开始阶段,它的一分准确可以避免后续的十分、一百分的劳动。

▲ 实践流程图


好的指标异常检测方法一方面能够使得告警质量大大提升,另一方面能够减少运维人员对阈值设定的繁琐工作量,对于整体的运维质量起着至关重要的作用。


    推荐阅读