详情
咨询意义与场景
2.1. 智能化指标异常检测技术适用场景目前互联网公司内部的关键性指标大可分为机器指标以及业务指标。为了监控服务是否稳定,大部分的机器指标反映了服务器的cpu,内存,磁盘,网络IO等基本情况。而业务直指标通常为服务响应次数,服务响应时间,上报事件成功次数等反映服务稳定性的指标。另一方面则是包含了其他的统计内容,例如留存,广告投放,以及其他在业务层面上关心的内容。
大部分反映服务稳定性的指标都具有一定规律,是有波形形状。针对这一类稳定的时序序列,可以通过使用机器学习的方式进行建模,利用训练的模型,可以预测出该时序序列的形状,而一般预测序列是不具有异常变化的,通过将预测序列和原序列进行对比,可以获知异常的变化。此外,还可以通过传统的时序分析的统计学方法进行预测,可以省去机器学习所需要的训练时间。而针对一些不具有规律性的统计指标,需要针对特殊的场景定制化相应的统计方法,结合人的主观想法,综合判断这类统计指标是否出现异常,目前这类不具有规律性,稳定性的指标, 也是智能化异常检测的难点所在。
另外,还需要根据指标的统计粒度来决定是否适用,且适用于哪种方法。一般来讲,机器学习判断异常的方法适用于统计粒度细的,能够保证数据点充足,使训练的模型准确性更高。而统计粒度较粗的指标,更适合使用传统的统计学方法。针对不同的粒度选用合适的方法,也是智能化指标异常检测的关键所在。
通常,负责同一个服务的服务器有许多,运维所统计的机器指标往往有大多数都是同一指标对应多台机器。为了节省监控成本,应采取聚类的办法,将相类似的指标聚合在一起,统一监控。
2.2 基于无监督学习的指标异常检测
机器学习实际上是将一些数据输入进神经网络,通过不停的训练,结果反馈,调节神经网络中的参数,使其成为一个可用的模型。该模型将新的数据作为输入,针对不同的问题,通过模型得到想要的结果。而通常我们无法预先将大量的时序序列进行标注,这是一件很费资源的事,所以在异常检测方面,采取无监督学习是一种可行的办法。无监督学习就是使用不带有标签的数据进行训练,并不需要预先知道这个指标的时间序列中哪些点为异常,哪些不是。
Autoruler目前使用的算法是基于VAE的无监督学习模型。灌入的数据点都是一维向量,将此向量分出训练集和测试集用于训练模型。对于一个有n个点的时间序列,不是以单独一个点作为一个数据点,而是选取一段窗长m,这个窗是滑动的,从头一点一点滑动,形成一个有n条数据的数据集合,每条数据都包含m个点。因为只有每个数据具有特征,无监督学习才有意义。对于时间序列,前后每个点之间的关系,就是其特征,故单一的一个点并不具有特征,所以采用滑动窗口这个做法对数据采样。训练好模型后,通过灌入新的数据就可以预测新的数据点,一个窗长的数据对应预测一个点。由于根据原有序列的特征进行学习,异常段并不算是曲线的规律和形状特征,模型所产生的输出更接近于无异常发生的时间序列,通过对比原时间序列和预测序列,就可以对异常的发生进行判断。
而如果能够对训练数据做好标注,将异常点打上标签,那么可以进行有监督学习,这样训练出来的模型准确度更高,在学习特征的过程中,会把标注出异常的数据直接摒弃,减少了干扰。Autoruler也支持灌入带标签的数据,这对于算法的准确度提升是可观的。
2.3 基于时序分析的指标异常检测
针对一些统计的粒度比较粗的指标,由于数据点过少,机器学习的方法用来做异常检测效果不佳,此时传统的针对时序分析的统计学方法是很好用的。同样是利用一些时序分析模型,将一段时间的时间序列作为输入,可以输出一段预测序列,同样通过比较预测序列与原序列的差异可以判断是否出现异常。而用时序分析的方法,不会像机器学习一样过于复杂,但也不是很简单的一个过程。Autoruler目前所采用的算法主要有ARIMA模型和Facebook的开源算法Prophet。两者的核心思路是一致的,都是通过过去一段有规律的时间序列,预测接下来的走势。只是在建立模型的过程中有一些不同。
ARIMA是一个常用的时序分析模型,又称差分整合移动平均自回归模型。先根据时间序列的散点图,自相关函数和偏自相关函数识别平稳性。若不平稳则先进性平稳处理,这一步主要是将一些指数增长的指标变为平稳增长。然后根据特征建立相应模型,在建立模型后需要进行参数估计和假设检验。都通过之后,该模型就为可用,可以进行时序的预测。得到预测曲线之后就可以利用一些判断方法,可以得出异常情况。
而Prophet算法是个强大的时序分析库,针对原有的各种时序分析方法和模型,加以整合并使得效果更佳。在使用时,也去掉了许多繁琐的过程,只需要将数据导入,之后就会得到一个适用的模型,通过该模型就可以做预测以及异常检测。同样还有其他功能,通过标注,可以添加季节性变化,以及排除节假日影响。有些统计指标会有季节性的变化,通过适应这个变化,能够使预测更准确。另一方面有些统计指标在节假日所体现的特征是和平日不一样的,而这种特征并不是一个周期性特征,所以需要通过数据标注的手段,区别节假日的特征。针对一些异常以及序列的不稳定性,prophet都有能力进行调节。
此外对于一些无规律的统计指标,目前还没有较好的办法进行解决,需要针对特殊场景,进行特定分析,这一点上并不利于大量无规律指标的监控,因此要采取特征提取,聚类分析的办法,把大量指标划分为几个特殊场景,再逐个解决,这么做完成指标监控。
....