背景
Aliware
为什么配出”高质量“告警很难?
Aliware
传统的告警规则是静态阈值告警,工程师们会对每个指标设定一个固定的阈值来定义指标的“正常水位”,当指标的实际值超出阈值时,对应的工程师就会收到告警。比如当应用的RT超出1s,就算是异常。但是合适的静态阈值,是很难定义的。因为:
现实生活中,SRE(运维工程师)需要对很多应用、很多接口配置告警。即使是同一个指标,不同应用,不同接口的“正常水位”都是是不一样的。下图是同一家公司,不同应用的错误率指标。
下图是同一应用,不同接口的平均响应时间指标:
SRE需要为每一个应用、每一个接口的每一个指标来设定“正常水位”。 这对于有几百个应用、几十条关键指标的公司来说,仅靠人力来不断地设定和维护指标的“正常水位”需要花费大量的时间。
比如某工作网站的访问量,在10:00-18:00时段内,访问量低于1000是异常的;但是在夜间,比如22:00-6:00,访问量超过1000可能是收到了攻击。在这种场景下,指标的“正常水位”会随着时间变化而不断变化。如果我们硬配置一个阈值,比如低于1000就告警,那整个晚上都会受到告警的打扰。
有的SRE可能会表示,那我晚上自动吧告警关掉就好了,但是现实生活中,这种起伏不定的指标,很难有像“1000”这么规整的阈值,现实生活中的调用量指标是下面的样子,就是会有一些令人意想不到的“大毛刺”。
业界是怎么协助用户配置出”高质量“告警的?
Aliware
如何有效地帮助客户配制出“高质量”的告警规则,是每一个APM(应用性能监控)厂商关注的问题。为了解决这个问题,主流的APM厂商都提供了智能告警服务。主要思路就是用统计学算法或者机器学习算法,提取指标的特征,下面介绍业界如何解决上面提到的问题:
为了解决阈值难配的问题,一些APM厂商给出了静态阈值推荐的功能。一般地,他们用算法为各个接口、各个应用,根据对于指标的历史数据学习指标特征,结合指标历史平均水位以及波动情况给出一个建议阈值。
对于波动型指标,一些厂商推出了动态阈值(也称区间检测)功能。在这个场景下,指标的实际值不再和单一的静态阈值比较,而是和一个时间序列做对比。具体地,算法会根据指标历史数据学习其波动特征,并对未来一段时间指标正常变化范围进行预测。比如每天00:00对未来一天的指标“正常水位”的上下边界进行预测,等采集到实际值时,比如10:00时,将实际值与之前的预测值进行比较,实际值超过了边界就被判定为异常。下面是一个动态阈值功能的示意图,绿线是指标的实际值,蓝色阴影是算法计算出来的,指标在正常情况下的上下边界。
一些APM厂商给出了阈值和指标过去一段时间实际值的对比图。但是,SRE们往往没有时间对每个应用、每条指标、每个接口都浏览一遍来设置合理的阈值。
另外,对于动态阈值的功能,很少有厂商给出对比图。SRE没有足够的信息来对告警阈值进行调整,只能不断地受到告警打扰再调节阈值。这样,有了几次误告警之后,SRE们就会把这些“华而不实”的AI功能关掉。
ARMS 是怎么帮用户实现半分钟配出”高质量“告警的?
Aliware
为了解决这些问题,为了给用户提供“透明的”、“易用的”、“所见即所得”的智能化告警体验,ARMS对应用性能监控告警功能进行了全面升级。 下面我们介绍ARMS如何解决“高质量”告警难配的问题。
实际上,对每一条指标配置一个合适的阈值其实都不算难,难的地方在于每个应用、每个接口、每种指标类型适合的阈值都不一样。SRE要遍历所有的指标,为他们设置合适的阈值,这是需要耗费大量时间的地方。
对于配静态阈值这种重复的工作,ARMS决定交给代码来做。用户只需要选择要配告警的应用、接口和指标类型。
由于静态阈值告警难以满足如RT、QPS等波动型指标的监控功能,我们推荐动态阈值,也叫区间检测功能。这里我们会自动根据指标7天历史数据,预测指标未来上下边界。用户可以根据上下边界配置告警,当指标实际值超出上边界或下边界,触发告警。
ARMS主要使用了Meta(Facebook)公司2018年公布的Prophet算法[1]。算法会先根据指标历史7天数据,用时间序列分解算法,将指标分解成季节项、趋势项和残差项。举个例子[2],对于下面图 1 中的时间序列,Prophet算法会将它分解成有规律的趋势项(图2)季节项(图3)和没有规律的残差项。
图 1
图 2
图 3
既然趋势项和季节项是有规律的,我们就可以对未来一段时间指标的值进行预测。但是还有残差项的存在,所以如果我们对指标的变化趋势预测得到的是一个区间,可以看图 1 中蓝色阴影部分。Prophet是一个无领域的,时序预测通用算法。我们对该算法做了一些实验之后,发现把它应用到APM领域,还需要大量的改造。
1. 为了方便用户根据自己的实际数据对阈值进行调整,我们给出了指标实际值和阈值的对比图
2.提供了告警数预测功能
3. 无论是静态阈值还是推荐阈值,ARMS都支持用户手动调节推荐阈值
总结
Aliware
运维工程师D表示:"用ARMS确实比给告警数配告警靠谱哈",运维工程师A、B、C:“赶紧上阿里云开通ARMS吧,我再也不想半夜被告警电话吵醒了”。
Taylor S J, Letham B. Forecasting at scale[J]. The American Statistician, 2018, 72(1): 37-45.