清华腾讯AIOps新作: 通过半监督学习为新KPI曲线快速部署异常检测
Posted 智能运维前沿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清华腾讯AIOps新作: 通过半监督学习为新KPI曲线快速部署异常检测相关的知识,希望对你有一定的参考价值。
导 读
KPI(Key Performance Indicator)是监测互联网服务的运维人员通常会使用一些关键性能指标。及时发现KPI 中呈现出的异常,有助于保证应用服务的稳定,高效。在某些场景下,海量的KPI曲线会频繁地并且持续地出现,如何及时有效地对这些新曲线进行监控,成了困扰运维人员多年的难题。本文介绍的是NetMan实验室与腾讯游戏运维联合发表在IPCCC2018的一篇文章《Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams》。文章通过聚类+半监督学习的方法,在离线测试中,取得了很好的效果,为海量新KPI的异常检测提供了新的思路。
作者|步佳昊
KPI是监测互联网服务的一些关键性能指标,比如cpu利用率,延迟,在线用户数,交易量等等。当KPI曲线呈现出异常时(如突增、突降、抖动),往往意味着与其相关的应用发生了一些潜在的故障,需要运维人员及时的发现并纠错。
某公司的PV数据以及部分异常
在有些场景下,新的KPI曲线会频繁并且大量的出现,如果不能及时的为新的曲线提供高精度的检测模型,运维人员就会“疲于奔命”,服务的稳定性也无法得到保证。
以下是2个实际中常见的场景:
在大型的游戏公司中,游戏更新换代非常的频繁。以腾讯游戏为例,每个季度平均会有10款新游戏的上线,伴随着大量的KPI曲线需要被监控。
随着DevOps的流行,软件服务的变更也变得越来越频繁,这会导致原有的KPI曲线的形状发生改变。这可以看作是产生了新的KPI曲线,先前的异常检测检测算法和监控参数也会因此而失效,需要重新确定。
软件服务变更的例子
尽管上述的问题在实际的场景中非常的普遍,却仍然没有合适的异常检测算法来解决该问题。常见的异常检测算法可以大体上分为三类:传统的统计学的方法,有监督以及无监督的机器学习模型。
传统的统计学的方法(比如Holt-Winters[1]等),复杂众多,很难为每根曲线选择最合适的模型。除此以外,很多模型的参数也难以调整,需要运维人员手动调参,耗费人力。
有监督的方法[2]需要为每根曲线标注异常,同样不适合于实际的应用场景。
为了解决标注的问题,无监督的方法应运而生,它们的大体思想是,学习到曲线的正常pattern,和正常不符合的就判定为异常。常见的包括[3],[4]。不幸的是,[3]的精度不是很高,[4]很难在数据量不充分的情况下捕捉到曲线的正常pattern。
基于上面的论证,文章进行了下一步的思考,有两点启发了作者。
1. 尽管KPI曲线的数量众多,但是曲线的形状大体上只有少数的几类。这本质是由于,曲线的形状是由业务的类型(比如交易量,游戏在线人数,搜索)以及曲线的类型(CPU使用率,成功率)所决定的,而非集群的规模。除非是上线一个全新的业务,否则新的曲线的形状大概率会和旧曲线的形状相似。这启示作者,可以对曲线做聚类,属于同一类别的曲线,其特征空间也大致相似。
两条曲线十分相近,经过去噪后,形状基本一致
2. 属于同一类别的曲线形状相似,但是并不完全一致,在模型层面上需要有所区分。作者开始思考,是否可以用机器学习中的半监督算法来解决这个问题,既可以使用原有的label标注,提高准确率,又能够为每根新上线的曲线分配不同的模型。
基于上面的思考,作者提出了ADS的架构,其核心思想是,对历史上的曲线根据其形状进行聚类,并选择每个类的类别中心进行异常标注。新曲线出现后,首先根据其形状,把它分配到合适的类别中,再利用新曲线的数据以及历史上的已有异常标注的类别中心数据训练半监督模型,为新曲线做异常检测。
ADS系统有效的解决了以往的算法无法解决的三个难点:
1. 无需人工调参和选择阈值
2. 只需要标注少量的曲线的异常即可(为每种形状的曲线标注一根)
3. 在保证精度的前提下无需大量的训练数据(2周的新数据即可)
下图是ADS的详细架构:
ADS主要由两条线构成,分别是聚类以及半监督算法。
聚类算法主要使用的是NetMan实验室发表在IWQoS 18的文章ROCKA[5]。以往的曲线聚类算法,很容易受到噪声的影响,无法处理实际中的复杂曲线,而ROCKA为此做了很多的优化,能应对复杂的现实数据。除此以外,ROCKA使用基于互相关的SBD距离度量曲线的相似性,有效的降低了时间复杂度,使得其可以被应用到大规模的线上系统,这是文章作者选择ROCKA的原因。
对于半监督算法,作者使用的是CPLE(Contrastive pessimistic likelihood estimation)[5]。CPLE是针对有监督模型的算法架构,可以有效的利用未标注数据进行更加精确的训练。
下图是CPLE的架构。
对于已有标注的曲线,可以先训练一版模型,来为未标注的曲线做预测。之后使用新曲线以及预测的概率值,和原有的曲线一起,重新调整模型的优化方向。该迭代过程循环往复,直到未标注的曲线的预测值不再发生变化,或者到达指定的迭代次数。
CPLE有如下的几个优点,这也是作者选择它的原因。
CPLE本身是个框架,其底层的模型可以根据业务随意选择,非常的灵活。
CPLE的空间复杂度很低,不太占用内存,适用于大规模数据,相对的,某些图半监督算法的空间复杂度是O(n^2)。
CPLE本身会更加的鲁棒。其他的半监督算法往往都需要很强的假设,比如某些生成模型需要预先对数据分布的有判断,或者TSVM等,需要低密度假设,如果不满足假设,那么这些算法的效果就会很差。而CPLE从数学上证明了,使用未标注数据+已标注数据得到的结果,不会比仅仅使用已标注数据来的差。高鲁棒性可以适应工业界的需求。
CPLE支持增量学习。CPLE本身是迭代式的,随着新的曲线的数据的增多,我们可以继续迭代的训练模型,来达到更高的精度。
在论文中,作者使用随机森林来作为底层模型,并使用了CPLE的框架进行反复的重训练。
为了有效的评估算法效果,模拟线上测试,我们把曲线分成了两类,假设它们是“果史曲线”和“新上线的曲线”。其中历史曲线共有70根,聚类算法根据形状把它们分为了5类,每类选择了聚类中心(由ROCKA算法自动给出,可以看做是一类的代表)进行异常标注。
而新上线的曲线共计有81根,详细的数据统计见下图:
可以看到根据物理含义,曲线可以分为3类,分别是延迟,在线游戏人数,成功率(物理含义并不等同于实际曲线形状)。曲线的长度共计是1个月,文章使用每根曲线的前18天进行半监督训练(和历史数据一起),并使用后12天的曲线做评估。异常检测本身是个二分类问题,考虑到类别不平衡,使用fscore来衡量算法的准确性。
除了ADS自身以外,文章还对比了Opprentice,iForest,Donut三种算法,下图展示了81根曲线的fscore的CDF图,越靠近右下代表着算法效果越好:
我们可以清晰的看到,iForest没有达到精度的要求,Donut本身所需要的数据量过大(论文中的实验往往需要几个月的数据,无法满足实际的业务需求)。而Opprentice和ADS的效果相差无几,但Opprentice本身是有监督的模型,需要为81根曲线都进行标注,而ADS只标注了5根。大量的减少了人力。在实际中,曲线的数量还会更多,ADS的优越性会更加的明显。
本文是第一次把半监督学习运用到了异常检测的领域中,所以作者同样分析了一下半监督学习起到的作用,设置了另一组对比试验:聚类之后,仅仅使用已标注异常的类别中心训练有监督模型,并把此模型应用到同类别的其他曲线上(ROCKA + Opprentice)。通过实验发现,在某些曲线上,ROCKA + Opprentice的性能比ADS跌了很多。下图是一个实际的例子。
使用ROCKA + Opprentice对曲线α做异常检测的结果和α的类别中心,其中红点是算法产生的误报
我们可以清晰的看到,ROCKA + Opprentice的算法在α上产生了很多误报。这其实是由于ROCKA本身是根据曲线形状聚类,需要对曲线进行去噪,因此上图中的两根噪声程度不一样的曲线被分到了同一类别。但是,异常检测本身对噪声非常的敏感,在波动剧烈的中心上训练出来的模型,无法被直接运用到α,半监督算法就是为了应对这种情况而被使用的。
文章针对的应用场景是新的KPI曲线频繁并且大量的出现。以往的统计方法,有监督和无监督等异常检测算法都没能有效的解决这个问题。通过实际的观察和工程师的启发,作者提出了聚类+半监督的异常检测方案,有效的解决了这个问题,使用腾讯真实的数据模拟线上环境,达到了不错的效果,为异常检测提供了新的思路。
论文题目:Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams
【1】H. Yan, A. Flavel, Z. Ge, A. Gerber, D. Massey, C. Papadopoulos,H. Shah, and J. Yates, “Argus: End-to-end service anomaly detection and localization from an isp’s point of view,” in INFOCOM, 2012 Proceedings IEEE. IEEE, 2012, pp. 2756–2760.
【2】D. Liu, Y. Zhao, H. Xu, Y. Sun, D. Pei, J. Luo, X. Jing, and M. Feng,“Opprentice: towards practical and automatic anomaly detection through machine learning,” in Proceedings of the 2015 ACM Conference on Internet Measurement Conference. ACM, 2015, pp. 211–224
【3】Z. Ding and M. Fei, “An anomaly detection approach based on isolation forest algorithm for streaming data using sliding window,” IFAC Proceedings Volumes, vol. 46, no. 20, pp. 12–17, 2013.
【4】H. Xu, W. Chen, N. Zhao, Z. Li, J. Bu, Z. Li, Y. Liu, Y. Zhao, D. Pei, Y. Feng et al., “Unsupervised anomaly detection via variational autoencoder for seasonal kpis in web applications,” in Proceedings of the 2018 World Wide Web Conference on World Wide Web. International World Wide Web Conferences Steering Committee, 2018, pp. 187–196.
【5】Z. Li, Y. Zhao, R. Liu, and D. Pei, “Robust and rapid clustering of kpis for large-scale anomaly detection,” Quality of Service (IWQoS),pp. 1–10, 2018.
【6】M. Loog, “Contrastive pessimistic likelihood estimation for semisupervised classification,” IEEE transactions on pattern analysis and machine intelligence, vol. 38, no. 3, pp. 462–475, 2016.
以上是关于清华腾讯AIOps新作: 通过半监督学习为新KPI曲线快速部署异常检测的主要内容,如果未能解决你的问题,请参考以下文章