流量,是系统的黄金指标之一,它直观反映系统的运行状态。健康的系统流量通常平稳波动变化,当流量突然上涨或者下降时可能预示系统中存在故障。例如系统的外部网络链路出现故障时,外部用户的访问流量无法到达我们的系统,流量会出现突降异常。当系统模块出现问题无法响应用户的请求时,此时的流量同样会出现突降异常。除了导致流量突降类的故障,当系统被爬虫爬取或者攻击时,流量会出现突升异常。所以流量的突升、突降常常表示系统中发生了某种故障或者异常行为。因此,流量异常检测对发现系统故障、维护系统的稳定性十分重要,它也成为了 AIOps 智能运维中的一个典型场景问题。
今天我们将从流量异常检测难点入手,分析常见流量检测方法存在的问题,然后重点介绍百度云智能运维产品(Noah)所使用的一类智能异常检测算法,基于鲁棒回归与泊松分布的流量异常检测算法。文章最后也附上了百度云 Noah 智能异常检测算法试用申请地址,欢迎大家试用。
流量异常检测的难点
流量异常检测主要有以下三个难点:
1.流量的大小会随着用户行为发生变化。对于大部分百度云上的业务,白天的访问流量较高,深夜的访问流量较低。这使得流量水位值存在上下文相关性,白天水位高,夜晚水位低,不断波动变化。这就需要算法能够区分流量的正常波动变化与异常波动变化,准确的检测异常流量。
2.对于所有百度云上用户而言,运维工程师关心系统本身的故障,需要及时检测到流量的突降异常,而安全工程师关心攻击、抓取和爬虫,更多地关心流量是否存在突升异常。这就要求算法有能力区分当前流量的异常类型,精准地给出流量的预测值。
3.流量也会受到业务逻辑调整的影响,流量水位会出现上涨或者下跌后不恢复的现象。需要算法能够及时适应这种变化,否则就会导致持续的误报。
流量异常检测模型
我们从上述难点出发,将流量异常检测分为预测与检测两个阶段。预测阶段需要克服异常流量的影响,对流量进行精准预测,检测阶段需要计算真实值与预测值之间的差异,当差异显著大于通常情况时,即可判定当前实际流量出现了异常。
常见预测算法的问题
比较简单的预测算法是移动平均算法。
另外,在下降过程中,移动平均算法会认为数据一直存在下跌,下降过程中又容易造成误报。
移动平均算法简单地将窗口内数据的均值作为下一个点的预测值,没有考虑到窗口内的数据趋势,导致预测的趋势总是滞后于实际趋势,预测的结果不准确。
实验发现,线性回归方法容易受到异常点的影响。上图中蓝色曲线为某一个窗口内的数据,窗口内后半部分出现了突升异常。理想的拟合结果应该不受突增异常影响,如图中粉色直线所示。而线性回归的拟合结果受到了异常点的影响,预测水位偏高,如图中红色直线所示。当曲线中的异常值较多时,线性回归的预测结果会出现如下图棕色线所示的不符合预期的波动。由于线性回归的损失函数是二次函数,所以异常点带来的影响被放大,导致拟合的结果偏离理想结果。
鲁棒回归算法
由于线性回归的二次损失函数放大了异常点的影响,因此我们考虑了将二次函数缩小为一次函数,减弱异常点影响。将损失函数改成如下:
但不可导,没有确定的解析解,可以使用
Interatively reweighted least squares
(https:// en.wikipedia. org/wiki/Iteratively_reweighted_least_squares)
优化方法得到相对的最优解。这样在预测过程中就可以弱化突增、突降等异常点的影响,得到比较理想的预测结果。
如下图所示,图中蓝色曲线为原始流量曲线,红色曲线为鲁棒回归算法的预测结果,黑色曲线为移动平均算法的预测结果。可以看到原始流量存在较多的突增异常,移动平均算法受异常点的影响预测效果较差,异常流量位置的预测值偏离理想值。从箭头所指向的局部拟合效果图中可以看到,鲁棒回归算法没有受到这些异常点的影响,在流量的突升、突降位置都能够给出理想的预测值。
常见检测算法的问题
泊松分布检测算法
由于基于残差与相对残差的检测方法都不能够设置统一的检测阈值,所以我们考虑从概率的角度来设置恒定的检测阈值。系统大部分时间都处于正常状态,正常流量出现的概率远远大于异常流量,可以通过流量出现的概率大小来检测异常流量。
突降异常的检测结果如下图所示,第一幅图中蓝色曲线为原始流量数据,橘色曲线为鲁棒回归算法预测结果,红色点为检测出的突降异常,第二幅图中蓝色线是根据真实流量与预测流量计算出的 z 统计量值,红色直线为设置的检测阈值。从图中可以看到,在 z 统计量上设置恒定阈值即可检测异常流量。
目前,本文的算法已经在百度云 Noah 智能运维系列产品之霍莉(Horae)异常检测平台上开放试用,Horae 覆盖时序数据异常检测实验运行的整个生命周期,包含数据标注、算法实验、离线评估、后验评估等过程。
总结展望
本文介绍了 AIOps 智能运维领域中的一个典型场景——智能流量异常检测。在分析其背景和难点,并对比介绍了一些常见的流量预测、检测方法之后,我们为大家重点介绍了百度云智能运维产品(Noah)中的一种智能异常检测算法——基于鲁棒回归与泊松分布的时序流量异常检测算法。一方面,基于鲁棒回归的预测算法,可以不受异常点的影响,精准地预测流量水位值;另一方面,基于泊松分布的检测算法,可以从概率的角度对流量建模,能够使用简单的恒定阈值来精准地检测流量异常。
当然,每类智能异常检测算法都有其场景特征和局限性:
(1) 该算法对相对平缓的异常趋势变化不敏感,因为我们每次是对局部窗口的数据进行鲁棒回归来预测窗口最后一个点流量值,没有使用足够的历史数据来判断当前的平缓趋势变化是否正常。
(2) 如果异常持续时间超过鲁棒回归窗口长度,可能会出现误报。例如,检测突降异常时,当突增的持续时间超过拟合窗口时,鲁棒回归算法会跟随上这种突增变化,这样就容易在突增恢复正常时造成突降的误报。
当然,为了解决上述问题,我们在霍莉(Horae)异常检测平台中,还实现了智能同比检测等算法,在后续的文章中会详细介绍,敬请期待!
作者介绍:
牧之,百度云高级研发工程师,负责百度云 Noah 智能异常检测算法相关工作,在自动异常检测、智能故障诊断等方向有广泛的实践经验。
本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。
原文链接:
https://mp.weixin.qq.com/s/vSblkaim9Fq_N7rO5TsIAA
评论