智能监控中的时间序列预测

智能监控中的时间序列预测

原创: SW 网易游戏运维平台


引言
在传统的监控中,我们有阈值告警、斜率告警、变化率告警等,每种告警方式都可以解决某些问题,但不可避免的在实践过程中会遇到种种问题。为了更简洁、更准确的进行告警,AIOPS 领域中的异常检测算法就如火如荼的发展了。我们在上一篇 运维里的人工智能 介绍了如何对成千上万的时间序列 KPI 做异常检测,但异常检测适用场景是异常已经发生,需要及时准确的进行告警。实际上,在一些业务场景里,我们需要提前知道何时会达到预警值而进行告警,如磁盘使用率未来多久会达到预警值,即如果超过阈值,则会需要触发告警来让人工处理以降低磁盘容量。
本文结合业界常用的时间序列预测算法和网易游戏实际业务中的实践,阐述如何进行时间序列预测。

时间序列预测算法概述
现在业界时间序列预测算法大致可以分为三类:

  1. 传统时间序列模型,如指数平滑、ARIMA 等。一般来说,这类模型适合做短期预测,长期预测效果往往不佳,同时需要数据保持一定的平稳性。
  2. 神经网络模型,如 GRU、LSTM 等。神经网络模型,需要足够多的数据,训练运行时间较长,实时计算的压力较大,准确度较高。
  3. 开源组件预测算法,如 facebook 开源的 Prophet、谷歌开源的 AdaNet 等。如今,各公司都开始向外输出预测能力服务,组件会集成很多的功能,像周期识别、变点识别等,相比普通的预测模型准确率也相应更高,但涉及到的参数也多。

预测实际是一个复杂的问题,对历史数据依赖很高,一个模型算法适用所有时序数据是基本不可能的,所以各类算法都各显神通在各种不同的场景中发挥其重大作用。时序预测在网易游戏

智能监控实践
在监控中,时序预测的应用场景很多,如磁盘使用率的预测、网络流量预测、游戏在线人数预测等。不同的场景下对预测的需求不一样,短期预测长期预测和预测效率,甚至预测准确率的要求都不一样(像趋势预测告警,及时提前告警就能满足需求,对具体的预测值要求不高)。为了满足不同人不同场景的预测需求,我们提供了多种预测模型来适配不同的场景。总体流程:


短期预测
对于短期预测来说,基本是预测未来 5min-30min,基本都要求实时预测,对计算性能有一定的要求,为此采用简单的统计模型比较合适。如对于游戏在线人数的预测,在线人数一般都比较稳定,采用统计时间序列模型比较合适。

Holt-Winters
Holt-winters 即三次指数平滑,指数平滑法都要更新上一时间步长的计算结果,并使用当前时间步长的数据中包含的新信息,它们通过“混合”新信息和旧信息来实现。Holt-Winters 季节性方法包括预测方程和三个平滑方程-----分别用于表征水平、趋势和季节性。此模型有两种不同的季节性组成部分。当季节变化在该时间序列中大致保持不变时,通常选择加法模型;而当季节变化与时间序列的水平成比例变化时,通常选择乘法模型。以乘法模型为例说明,分量形式为:


在实践中 Holt-Winters 的性能消耗不多,模型中的参数也可以通过实时拟合获取,即模型可以做到实时训练,适用于需要实时预测的场景。

ARIMA
ARIMA 模型(Autoregressive Integrated Moving Average Model)全称叫做自回归移动平均模型,也记作 ARIMA(p, d, q ),其中 p 为自回归模型阶数、d 为差分阶数、q 为移动平均模型阶数。所以,ARIMA 模型可以看作是有三部分组成,自回归模型 AR(p)、差分阶数 d、移动平均模型 MA(q)。AR(p) 自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测,MA(q) 移动平均模型关注的是自回归模型中的误差项的累加。当我们将差分和自回归模型以及移动平均模型结合起来的时候,我们可以得到一个非季节性 ARIMA 模型。计算公式如下:


需要注意的是,ARIMA 模型对 p、d、q 这几个参数的依赖很高,不同参数下的预测差异很大,比如说 p 值的取值在数据存在周期时非常重要。为了进行周期性的预测, p≥2 是必要条件之一,除此之外还应对系数加以额外限制。一般地,会采用 AIC/BIC 来定阶,但要注意不一定 AIC/BIC 最小的模型即为最佳模型。 总结
传统统计时间序列预测模型,简单易于理解,计算消耗小,可以实现实时计算。但是也有一些缺点,如预测会出现一定的滞后,预测精度不高等问题。在使用时,需要根据实际的场景,做充足的测试。

中长期预测
中长期预测一般对预测的精度要求不是太高,但是需要准确预测出趋势,并且误差不能太大才能及时进行告警。如预测未来多久磁盘使用率会达到预警值,提前进行告警。此时的预测需要准确预测出磁盘使用率的趋势,预测误差相差半小时一小时问题不大。此外不需要实时进行计算,定时计算即可,对性能要求没有那么高。

周期识别
在周期模型中,需要提前确定数据的周期,但是待预测的数据周期不固定,因此需要自动识别周期。周期的识别现在有几种靠谱的方式,如傅里叶级数、自相关系数等,我们主要是利用的自相关系数的思想进行计算,周期检测模型为:


趋势不变模型
趋势不变模型是指有些数据表现出无规律性,难以预测,但是在短期内会保持当前趋势,因此短期趋势模型针对该类型数据。模型利用短期历史数据进行训练,按当前趋势进行预测。由于业务会经常不定期进行干预,数据表现出无规律性,但是数据趋势明显,此时采用趋势不变模型效果较好。

STL周期模型
STL (Seasonal-Trend decomposition procedure based on Loess) 为时序分解中一种常见的算法,基于 LOESS 将某时刻的数据分解为趋势分量、周期分量和余项。STL 分为内循环与外循环,其中内循环来负责趋势、周期分量的计算;外层循环主要用于调节 robustness weight。

outer loop:
计算robustness weight;
inner loop:
Step 1 去趋势;
Step 2 周期子序列平滑;
Step 3 周期子序列的低通量过滤;
Step 4 去除平滑周期子序列趋势;
Step 5 去周期;
Step 6 趋势平滑;

STL 周期模型先对数据进行分解,分解出趋势部分、周期部分和剩余部分,由于自动检测的周期有时候会出现误差,因此 STL 分解的分解周期还包括事先定义好的检验周期 T2( 如天/周),将 STL 分解中效果最好的结果作为最终分解结果。趋势部分,采用 LR 模型进行预测,再与周期部分和残差部分预测进行叠加,得到最终预测结果。

Prophet
Prophet 是 Facebook 开源的一个时间序列预测的算法,来源于 bprophet 的算法库。Prophet 算法不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形,还能够几乎全自动地预测时间序列未来的走势。prophet 可以提供的功能概括为输入已知的时间序列的时间戳和相应的值和需要预测的时间序列的长度,输出未来的时间序列走势及输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。
Prophet 算法除了季节项,趋势项,剩余项之外,还加入了节假日效应,即表示为:


趋势项包括基于逻辑回归函数(logistic function)和基于分段线性函数(piecewise linear function)两种。此外,在现实的时间序列中,曲线的走势肯定不会一直保持不变,在某些特定的时候或者有着某种潜在的周期曲线会发生变化,因此需要进行变点识别。在 Prophet 里面变点的设置有两种方法,一种是通过人工指定的方式指定变点的位置;另外一种是通过算法来自动选择(主要是 Laplace 分布的思想)。预测结果大致如下:


LSTM
LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合用来处理时间序列数据,在时间序列的预测问题中表现尤为突出。不同于单维的时序预测模型,LSTM 在预测时候可以考虑多维的信息,因此比较适合与复杂场景下的时序预测。


LSTM 对时间序列数据的性质没有过多要求,适用范围较广并且可以学习到时间序列内部复杂的规律,而不只是机械的针对某些固定因素。但是在构建网络的过程复杂,需要对数据进行预处理,并有很多超参数需要设置,数据处理不当或者参数设置不合适,都难有好的效果。此外需要的数据量大,训练过程消耗硬件资源严重,训练时间较长。因此,LSTM 预测需要大量数据,训练时间较长,难于做到实时预测,适合定期预测,如磁盘使用率预测报警。

总结
在网易,需要监控的指标数不胜数,预测的需求也越来越强烈,目前已经在某些监控平台上线了预测功能,预测准确率也较为符合预期。

 


预测是个复杂的问题,不同场景、不同数据都可能需要不同的模型,每个模型都只管自己的一亩三分地。所以,在实际应用中,为了适配不同的应用场景,我们需要提供不同的预测模型。了熟于心各大预测算法的适用场景和优缺点,对症下药尤为重要。

结束语
AIOPS 的道路我们现在依旧还在探索中,有许多的不足,也有很多的难题需要攻克。也欢迎更多对智能监控感兴趣的小伙伴加入我们,一起努力。传送门 https://hr.163.com/job-detail.html?id=17604


往期精彩

使用 d3.js 绘制资源拓扑图


运维里的人工智能


CI 构建环境下的 docker build 最佳实践


Web 站点接口优化实践


浏览器中执行 C 语言?WebAssembly 实践

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值