重磅:构建AIOps的MNIST

本文做者:AIOps智能运维git

干货概览github

咱们在《AIOps时代,你准备好了吗?》一文中提到,运维操做通常能够分为感知、决策、执行三部分,而在感知阶段咱们经过识别服务指标数据中不符合预期的模式来发现服务异常,即监控数据的异常检测。算法

不少时候,你们手中的异常检测是一条拍脑壳想出来的规则,或者根据经验大体估算的阈值。这样的异常检测经常存在较多误报、漏报、效果不佳的状况。而上线前基于标注数据的效果评估是提升效果最重要的手段。为了获取大量、准确的标注数据来评估算法效果,咱们进行了一系列探索。数据库

本文将主要介绍在监控数据异常标注实践中遇到的问题和解决方案,并给出一个当前由百度智能运维团队与清华大学Netman实验室合做研发的辅助标注工具原型https://github.com/baidu/Curve,欢迎你们一块儿探讨。网络

时序数据异常标注运维

在监测服务的收入、流量、可用性、性能等指标时,一般会对数据进行流式的采集和汇聚,每一个数据点反映的是某段时间内的服务状态,这些时间序列数据简称时序数据。机器学习

在异常检测方面你们或多或少都有过相似经历:针对一次故障设置了报警规则,其中的阈值根据此次故障设置。上线后不断发生误报,所以调低阈值。阈值调低后误报减小,但在一次新故障发生时发生漏报,又调高阈值。如此往复,在误报与漏报之间徘徊。这是由于以bad case(误报、漏报)驱动的阈值调整经常会以偏概全、先后矛盾,致使总体的准确率和召回率很低。解决问题的最佳办法是在上线前使用标注数据对报警规则进行系统地评估。工具

另外一方面,对于复杂场景的异常检测,大量准确的标注数据也是使用统计方法或机器学习方法建模的必要条件。性能

为了进行正常数据建模和算法效果评估,咱们须要获取大量准确的标注数据,一般时序数据能够从监控系统中方便地得到,标注则须要人工完成。在数据标注过程当中主要有两类问题:学习

准确性:标注人员一般对异常认识不清晰,随着标注进度的推动,判断标准很容易发生漂移。

标注效率:异常数据占比很小,标注时大量的时间耗费在检查正常数据上,效率较低。

通过一系列调研,咱们发现已有的时序数据标注工具较少,功能也比较简单,仅提供了趋势图展现、异常时段标注、简单参考线(天同比/周同比)等功能,对于解决标注过程当中的准确性和效率问题帮助有限。

这里,咱们给出了一种基于自动异常检测的辅助标注方法:在标注开始前,自动分析疑似异常区间,高亮提醒标注人员关注,减小检查正常数据耗费的精力;在标注过程当中,提供异常区间对比功能,协助标注人员认识异常,避免判断标准的漂移,减小标注数据先后矛盾的状况。

时序数据标注工具

咱们着手研发了一款时序数据异常标注工具,辅助标注人员更快更准确地进行时序数据标注,为正常数据建模和异常检测评估提供足量准确的标注数据集。

当前的标注工具以一个Web的形式呈现,提供数据上传、标注、下载功能,辅助标注的主要算法逻辑由Python实现,能够方便地借助相关科学计算模组进行修改。

可视化和标注功能

通常的时序数据标注工具都会提供一些基本的可视化和标注功能,包括经过拖动、快捷按钮等方式设置x轴和y轴的显示区间以控制曲线的缩放,经过拖动等方式标注异常数据等。除了这些基本的功能以外,咱们针对标注场景做了专门的优化。

Y轴区间自动计算

有时少数异常数据的值与正常值相比差异巨大,可能有数量级的差异。直接展现这些数据会致使整条曲线被压扁变平,掩盖曲线上其余的波动。这时用户每每须要先手工设置曲线的y轴区间才能开始正常标注。若是用户每次载入曲线都要设置一次y轴区间,无疑是很麻烦的。针对这种问题,咱们在工具中添加了离群点自动判断功能,排除离群点以后,咱们就能找到合适的y值区间,让用户看到合理的曲线形态。

默认Y轴取值范围

基于离群点检测的Y轴取值范围

大尺度数据采样

咱们标注时一般会先浏览数据来初步了解数据的分布,标注时也经常先寻找大体的异常区间再仔细标注。这种浏览的尺度比较大,因为屏幕分辨率远低于数据点数,不可避免地要进行采样或聚合,经常使用的均值方法会平滑周期内的尖峰和低谷,下降异常幅度,影响标注工做。针对这种问题,咱们在工具中提供了最大值、最小值采样方法,能够适应上溢、下溢异常场景,在标注时暴露出完整的异常幅度,解决采样带来的失真问题。

辅助标注功能

在其余时序数据异常标注工具中,一般提供了天同比、周同比参考线或恒定阈值线,这些参考线在必定程度上知足了标定人员参照历史数据的需求,可是面对单调上升指标(如用户数量)、预期内突增(如活动流量)等个性化场景提供的帮助比较有限。针对这个问题,咱们开放了参考线生成功能,能够根据场景自行编写插件添加参考线。除此以外,还在标注工具上尝试了初始异常识别和异常区间对比两个辅助标注功能。

初始异常识别

在标注之外的时间,咱们一般不会持续关注一个指标的变化过程,这样,在标注过程当中接收到的数据会远多于平时的观察,受到已标注数据潜移默化地影响,标注人员的判断标准会发生必定程度的偏移,影响标注准确性。针对这种问题,在数据初始化阶段咱们使用异常检测算法对数据进行检测,肯定疑似异常区间,用高亮的方式提示给标注人员,这种标准一致的提醒能够在必定程度上减轻标注人员受到的影响。

同时,因为使用了较宽松的阈值,轻微的异常也会被识别出来,这样,标注人员能够重点检查高亮区域,下降检查正常数据的消耗,提升标注速度。

异常区间对比

在不能肯定一段数据是否异常时,咱们一般会和已标注为异常的数据进行对比,这种对比因为异常数据占比较小变得很是麻烦,须要先在比较大的尺度上找到异常区间,而后再放缩到与待标注区间相同的比例尺才能进行对比。针对这种问题,咱们提供了异常区间跳转和异常概览两个功能,能够方便得跳转到上一个、下一个异常区间进行对比,也能够在标注结束后把全部异常区间放在一块儿进行对比。

正在路上…

除了上述已有功能,一大波更新正在路上,接下来还会有:

更快的加载速度,标注过程更加流畅:在原型实现中,包括数据库、网络交互在内的诸多工程细节都没有进行针对性优化,致使标注中会出现轻微卡顿状况,这些卡顿将在下一版完整修复。

在线的标注工具,打开即用:在前期试用中发现,对于标注人员,从源代码开始部署一个服务比较麻烦。为了让使用者更加方便,咱们会在收集足够意见反馈后整合出一个SaaS化的标注平台,让标注人员即开即用。

拉一大波标注数据出来祭天:在调研时发现,时序数据异常检测领域缺乏一个相似MNIST的标准数据集,虽然有部分高校给出了一些数据集(如石溪大学的http://odds.cs.stonybrook.edu/),可是这些数据集太小,难以用于统计方法和机器学习方法建模。为了让更多有想法可是接触不到数据的同窗有条件参与相关探索,咱们将公开部分标注数据,和你们一块儿建设一个公共的标准数据集。

INVITATIONS

上文中提到的各类基础功能优化和辅助功能均经过插件的形式实现,你们能够参照给出的样例方便地编写适合本身场景的插件。

考虑到标注数据的应用场景多种多样,仅凭一两个团队遇到的场景、总结的解决方案是有限的,因此咱们还邀请了阿里、滴滴等公司的同仁一块儿合做进行时序数据异常标注方面的探索。

在这里,也诚邀各位一块儿参与讨论(https://github.com/baidu/Curve/issues),对于有建设性意见或者代码、标注数据贡献的同窗,有精美礼品相送。在时序数据预测、异常标注、异常检测方面,不论是想法仍是吐槽,代码仍是数据,通通欢迎。

原文连接地址:https://developer.baidu.com/topic/show/290125

相关文章
相关标签/搜索