vlambda博客
学习文章列表

微软故障分诊AIOps案例


点击蓝字 关注我们






导 读

异常事件分诊在维护云服务的服务水平中至关重要,错误的分诊能增加10倍的诊断异常时间。由于现在的数据中心的应用和依赖复杂度都非常高,正确的分诊异常事件是一个很大的挑战,本推文将介绍微软在智能运维领域的前沿工作Scout,Scout利用机器学习,将有监督模型和无监督模型结合起来,解决了异常事件的分诊问题。该工作是由微软与哈佛大学,宾夕法尼亚大学和普林斯顿大学共同完成,文章《Scouts: Improving the Diagnosis Process Through Domain-customized Incident Routing》于2020年发表在计算机网络领域顶级会议SIGCOMM。目前Scout作为一个异常事件分诊的提示器已经部署到了生产环境。



微软故障分诊AIOps案例
介绍



对于云服务提供商而言,异常事件分诊是一件非常复杂以至于很难自动的将异常事件直接分配给某个团队的工程师去做,这也是维护可用性和服务水平的关键瓶颈。错误的事件分诊,可能会让诊断根因的时间增加10倍,研究人员通过对以往数据的分析,发现了一个有趣的事实,就是多个团队一起来解决问题反而比单个团队更慢,如图1所示,横坐标是标准化过后的时间,纵坐标是累积分布概率(Cumulative Probability Distribution, CDF),可以看到,单个团队全程比多个团队快,甚至快很多。以0.01个标准化后的时间来看,单个团队在这个时间内,可以解决近60%的任务,而多个团队在相同时间内仅能解决20%。

微软故障分诊AIOps案例

图1


随着数据量越来越大,依赖越来越复杂。单纯的依赖人力和规则来进行异常事件分诊越来越不够效率,因此,研究出自动化的异常事件分诊技术就显得越来越有必要。


微软故障分诊AIOps案例
挑战



近几年,机器学习技术非常火热,也在很多领域做出了效果,异常事件分诊本质上是一个多分类问题,从理论上来说是可以使用机器学习来做的,但是会遇到很多挑战,比如:
1. 故障事件,系统组件,监控数据一直在变:生产环境非常复杂,可能会出现从来没见过的case(即不在训练集里,可用来训练的数据也很少),又或者系统组件、监控的数据发生变化(即原来由组件A、B、C构成的系统变成了由组件A、B、D来构成),可能会需要重新训练整个模型。
2. 维度爆炸:一个庞大的事件分诊器需要包含所有团队的监控数据,这会特征向量的维度非常非常高,对于罕见的异常事件,难以获得与特征维度相匹配的训练集数据。
3. 监控数据不全或者不规范。
4. 对数据的理解能力有限:因为数据来源于所有团队,研究人员很难对所有数据的特征都有一个全面的理解。


微软故障分诊AIOps案例
架构设计



研究人员经过研究后认为,相比于一个大一统的模型,针对于每个团队训练的一组预测器,效果更好,也就是Scout。对于一个给定的团队来说,Scout可以做到低开销,低延迟和高准确率。因此,在异常事件分诊这个场景,需要一组Scout来预测,这个事件该派发给哪个团队。
Scout的整体架构设计如图2所示:

微软故障分诊AIOps案例

图2


数据处理器根据配置文件和事件,提取特征,将监控数据处理成特定格式的数据供计算引擎计算,然后预测。模型选择器会根据不同的事件选择不同的模型来作为分类器。


微软故障分诊AIOps案例
模型与特征构建



前面提到过,出现频率非常低的事件,很难获得足量的与之对应的训练数据来训练,但一般来说,有监督模型比无监督模型分类效果更好,因此,研究人员决定对频繁发生的异常事件,使用有监督模型,罕见的事件,使用无监督模型。有监督模型,Scout选择的是随机森林作为有监督模型,CPD(Modified Change Point Detection)的改进版作为无监督模型。


微软故障分诊AIOps案例
随机森林



随机森林是一个很常见的机器学习模型,在此不做赘述。下面介绍一下随机森林模型的特征构建。
先构建每个组件的特征,对于告警/事件类数据,统计其在过去T时间内的数量,对于时间序列类的数据,统计其在过去T时间内的统计特征,如均值,方差,最大最小值,K分位点的值等。构建完每个组件的特征过后,再根据不同组件数据采集的特点,合并这些特征,形成最后的特征集用于预测。


微软故障分诊AIOps案例
CPD+



CPD模型是基于以下的假设:当一个团队需要为某个异常事件负责时,这些组件的数据通常会发生偏移,从一个分布变到另一个分布。研究团队基于CPD算法,做了一些改进:虽然没有足够的数据来学习哪个团队该为这个事件负责,但是由足够的数据来学习变化的点(change-point)跟失败(failure)之间的关系,因此,研究人员用了一个新的随机森林来学习某些change-point会不会导致一个failure。

微软故障分诊AIOps案例
Pipeline



当一个异常事件发生,Scout首先会基于配置文件提取相关联的系统组件,如果不能提取出明确的组件,则转交传统的系统来分诊。提取到相关组件后,通过模型选择器选择是RF还是CPD+,然后提取特征,进行预测。


微软故障分诊AIOps案例
实验评估



研究人员用了微软Azure上9个月的数据来做实验,结果如图3所示

微软故障分诊AIOps案例

图3


Precision(精确率):表示Scout输出的可靠度,precision为90%就表示Scout在90%的时间里都是正确的。
Recall(召回率):表示Scout找出的异常占所有异常的比例,90%的recall,表示Scout能找出90%发生的异常。
F1-score:precision和recall 的调和均值,用于评价整体准确度(Accuracy)。


结论



Scout是一个低开销,低延迟和高准确度的异常事件分诊器,研究人员通过有监督模型和无监督模型相结合的方式来构建预测器,做在Azure上使用9个月的数据作为评估,最终达到了最高97%的precision和recall来进行异常事件分诊。

论文题目:Scouts: Improving the Diagnosis Process Through Domain-customized Incident Routing


 


智能运维前沿

介绍世界范围内智能运维的前沿进展

推动智能运维算法在实践中落地和普世化

长按二维码,关注我们