AIOps在美团的探索与实践——故障发现篇

1、背景

AIOps,最初的定义是Algorithm IT Operations,是利用运维算法来实现运维的自动化,最终走向无人化运维。随着技术成熟,逐步肯定为Artificial Intelligence for IT Operations——智能运维,将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),经过机器学习的方式来进一步解决自动化运维没法解决的问题。html

早期的运维工做大部分是由运维人员手工完成的,手工运维在互联网业务快速扩张、人力成本高企的时代,难以维系。因而,自动化运维应运而生,它主要经过可被自动触发、预约义规则的脚本,来执行常见、重复性的运维工做,从而减小人力成本,提升运维的效率。总的来讲,自动化运维能够认为是一种基于行业领域知识和运维场景领域知识的专家系统。随着整个互联网业务急剧膨胀,以及服务类型的复杂多样,“基于人为指定规则”的专家系统逐渐变得力不从心,自动化运维的不足,日益凸显,当前美团在业务监控和运维层面也面临着一样的困境。git

DevOps的出现,部分解决了上述问题,它强调从价值交付的全局视角,但DevOps更强调横向融合及打通,AIOps则是DevOps在运维(技术运营)侧的高阶实现,二者并不冲突。AIOps不依赖于人为指定规则,主张由机器学习算法自动地从海量运维数据(包括事件自己以及运维人员的人工处理日志)中不断地学习,不断提炼并总结规则。AIOps在自动化运维的基础上,增长了一个基于机器学习的大脑,指挥监测系统采集大脑决策所需的数据,作出分析、决策,并指挥自动化脚本去执行大脑的决策,从而达到运维系统的总体目标。综上看,自动化运维水平是AIOps的重要基石,而AIOps将基于自动化运维,将AI和运维很好地结合起来,这个过程须要三方面的知识:github

  1. 行业、业务领域知识,跟业务特色相关的知识经验积累,熟悉生产实践中的难题。
  2. 运维领域知识,如指标监控、异常检测、故障发现、故障止损、成本优化、容量规划和性能调优等。
  3. 算法、机器学习知识,把实际问题转化为算法问题,经常使用算法包括如聚类、决策树、卷积神经网络等。

美团技术团队在行业、业务领域知识和运维领域的知识等方面有着长期的积累,已经沉淀出很多工具和产品,实现了自动化运维,同时在AIOps方面也有一些初步的成果。咱们但愿经过在AIOps上持续投入、迭代和钻研,将以前积累的行业、业务和运维领域的知识应用到AIOps中,从而能让AIOps为业务研发、产品和运营团队赋能,提升整个公司的生产效率。算法

2、技术路线规划

2.1 AIOps能力建设

AIOps的建设能够先由无到局部单点探索,在单点探索上获得初步的成果,再对单点能力进行完善,造成解决某个局部问题的运维AI学件,再由多个具备AI能力的单运维能力点组合成一个智能运维流程。行业通用的演进路线以下:数据库

  1. 开始尝试应用AI能力,还无较为成熟的单点应用。
  2. 具有单场景的AI运维能力,能够初步造成供内部使用的学件。
  3. 有由多个单场景AI运维模块串联起来的流程化AI运维能力,能够对外提供可靠的运维AI学件。
  4. 主要运维场景均已实现流程化免干预AI运维能力,能够对外提供供可靠的AIOps服务。
  5. 有核心中枢AI,能够在成本、质量、效率间从容调整,达到业务不一样生命周期对三个方面不一样的指标要求,可实现多目标下的最优或按需最优。

所谓学件,亦称AI运维组件[1](南京大学周志华老师原创),相似程序中的API或公共库,但API及公共库不含具体业务数据,只是某种算法,而AI运维组件(或称学件),则是在相似API的基础上,兼具对某个运维场景智能化解决的“记忆”能力,将处理这个场景的智能规则保存在了这个组件中,学件(Learnware)= 模型(Model)+规约(Specification)。AIOps具体的能力框架以下图1所示:数组

图1 AIOps能力框架图

2.2 关联团队建设

AIOps团队内部人员根据职能可分为三类团队,分别为SRE团队、开发工程师(稳定性保障方向)团队和算法工程师团队,他们在AIOps相关工做中分别扮演不一样的角色,三者缺一不可。SRE能从业务的技术运营中,提炼出智能化的需求点,在开发实施前可以考虑好需求方案,产品上线后能对产品数据进行持续的运营。开发工程师负责进行平台相关功能和模块的开发,以下降用户的使用门槛,提高用户的使用效率,根据企业AIOps程度和能力的不一样,运维自动化平台开发和运维数据平台开发的权重不一样,在工程落地上可以考虑好健壮性、鲁棒性、扩展性等,合理拆分任务,保障成果落地。算法工程师则针对来自于SRE的需求进行理解和梳理,对业界方案、相关论文、算法进行调研和尝试,完成最终算法落地方案的输出工做,并不断迭代优化。各团队之间的关系图以下图2所示:微信

图2 AIOps关联团队关系图

2.3 演进路线

当前,咱们在质量保障方面的诉求最迫切,服务运维部先从故障管理领域探索AIOps实践。在故障管理体系中,从故障开始到结束主要有四大核心能力,即故障发现、告警触达、故障定位、故障恢复。故障发现包含了指标预测、异常检测和故障预测等方面,主要目标是能及时、准确地发现故障;告警触达包含了告警事件的收敛、聚合和抑制,主要目标是降噪聚合,减小干扰;故障定位包含了数据收集、根因分析、关联分析、智能分析等,主要目标是能及时、精准地定位故障根因;故障恢复部分包含了流量切换、预案、降级等,主要目标是及时恢复故障,减小业务损失,具体关系以下图3所示:网络

图3 故障管理体系核心能力关系图

其中在故障管理智能化的过程当中,故障发现做为故障管理中最开始的一环,在当前海量指标场景下,自动发现故障和自动异常检测的需求甚为迫切,能极大地简化研发策略配置成本,提升告警的准确率,减小告警风暴和误告,从而提升研发的效率。除此以外,时序数据异常检测实际上是基础能力,在后续告警触达、故障定位和故障恢复环节中,存在大量指标须要进行异常检测。因此将故障发现做为当前重点探索目标,解决当前海量数据场景下人工配置和运营告警策略、告警风暴和准确率不高的核心痛点。整个AIOps体系的探索和演进路线以下图4所示。每一个环节均有独立的产品演进,故障发现-Horae(美团服务运维部与交易系统平台部共建项目)、告警触达-告警中心、故障定位-雷达、故障恢复-雷达预案。架构

图4 AIOps在故障管理方面的演进路线

3、AIOps之故障发现

3.1 故障发现

从美团现有的监控体系能够发现,绝大多数监控数据均为时序数据(Time Series),时序数据的监控在公司故障发现过程当中扮演着不可忽视的角色。不管是基础监控CAT[2]、MT-Falcon[3]、Metrics(App端监控),仍是业务监控Digger(外卖业务监控)、Radar(故障发现与定位平台)等,均基于时序数据进行异常监控,来判断当前业务是否在正常运行。然而从海量的时序数据指标中能够发现,指标种类繁多、关系复杂(以下图5所示)。在指标自己的特色上,有周期性、规律突刺、总体抬升和降低、低峰期等特色,在影响因素上,有节假日、临时活动、天气、疫情等因素。原有监控系统的固定阈值类监控策略想要覆盖上述种种场景,变得愈来愈困难,而且指标数量众多,在策略配置和优化运营上,人力成本将成倍增加。若在海量指标监控上,能根据指标自动适配合适的策略,不须要人为参与,将极大的减小SRE和研发同窗在策略配置和运营上的时间成本,也可以让SRE和研发人员把更多精力用在业务研发上,从而产生更多的业务价值,更好地服务于业务和用户。框架

图5 时序数据种类多样性

3.2 时序数据自动分类

在时序数据异常检测中,对于不一样类型的时序数据,一般须要设置不一样的告警规则。好比对于CPU Load曲线,每每波动剧烈,若是设置固定阈值,瞬时的高涨会常常产生误告,SRE和研发人员须要不断调整阈值和检测窗口来减小误告,当前,经过Radar(美团内部系统)监控系统提供的动态阈值策略,而后参考历史数据能够在必定程度上避免这一状况。若是系统可以提早预判该时序数据类型,给出合理的策略配置建议,就能够提高告警配置体验,甚至作到自动化配置。并且在异常检测中,时序数据分类一般也是智能化的第一步,只有实现智能化分类,才能自动适配相应的策略。

目前,时间序列分类主要有两种方法,无监督的聚类和基于监督学习的分类。Yading[4]是一种大规模的时序聚类方法,它采用PAA降维和基于密度聚类的方法实现快速聚类,有别于K-Means和K-Shape[5]采用互相关统计方法,它基于互相关的特性提出了一个新颖的计算簇心的方法,且在计算距离时尽可能保留了时间序列的形状。对KPI进行聚类,也分为两种方法,一种是必须提早指定类别数目(如K-Means、K-Shape等)的方法,另外一种是无需指定类别数目(如DBSCAN等),无需指定类别数目的聚类方法,类别划分的结果受模型参数和样本影响。至于监督学习的分类方法,经典的算法主要包括Logistics、SVM等。

3.2.1 分类器选择

根据当前监控系统中时序数据特色,以及业内的实践,咱们将全部指标抽象成三种类别:周期型、平稳型和无规律波动型[6]。咱们主要经历了三个阶段的探索,单分类器分类、多弱分类器集成决策分类和卷积神经网络分类。

  1. 单分类器分类:本文训练了SVM、DBSCAN、One-Class-SVM(S3VM)三种分类器,平均分类准确率达到80%左右,但无规律波动型指标的分类准确率只有50%左右,不知足使用要求。
  2. 多弱分类器集成决策分类:参考集成学习相关原理,经过对SVM、DBSCAN、S3VM三种分类器集成投票,提升分类准确率,最终分类准确率提升7个百分点,达到87%。
  3. 卷积神经网络分类:参考对Human Activity Recognition(HAR)进行分类的实践[7],咱们用CNN(卷积神经网络)实现了一个分类器,该分类器在时序数据分类上表现优秀,准确率能达到95%以上。CNN在训练中会逐层学习时序数据的特征,不须要成本昂贵的特征工程,大大减小了特征设计的工做量。

3.2.2 分类流程

咱们选择CNN分类器进行时序数据分类,分类过程以下图6所示,主要步骤以下:

图6 时序数据分类处理流程

  1. 缺失值填充:时序数据存在少许数据丢失或者部分时段无数据等现象,所以在分类前先对数据先进行缺失值填充。
  2. 标准化:本文采用方差标准化对时序数据进行处理。
  3. 降维处理:按分钟粒度的话,一天有1440个点,为了减小计算量,咱们进行降维处理到144个点。PCA、PAA、SAX等一系列方法是经常使用的降维方法,此类方法在下降数据维度的同时还能最大程度地保持数据的特征。经过比较,PAA在降到一样的维度(144维)时,还能保留更多的时序数据细节,具体对好比下图7所示。
  4. 模型训练:使用标注的样本数据,在CNN分类器中进行训练,最终输出分类模型。

图7 PAA、SAX降维方法对比

3.3 周期型指标异常检测

3.3.1 异常检测方法

基于上述时序数据分类工做,本文可以相对准确地将时序数据分为周期型、平稳型和无规律波动型三类。在这三种类型中,周期型最为常见,占比30%以上,而且包含了大多数业务指标,业务请求量、订单数等核心指标均为周期型,因此本文优先选择周期型指标进行自动异常检测的探索。对于大量的时序数据,经过规则进行判断已经不能知足,须要通用的解决方案,能对全部周期型指标进行异常检测,而非一个指标一套彻底独立的策略,机器学习方法是首选。

论文Opprentice[8]和腾讯开源的Metis[9]采用监督学习的方式进行异常检测,其作法以下:首先,进行样本标注获得样本数据集,而后进行特征提取获得特征数据集,使用特征数据集在指定的学习系统上进行训练,获得异常分类模型,最后把模型用于实时检测。监督学习总体思路[10]以下图8所示,其中
(x1,y1),(x2,y2),...,(xn,yn)是训练数据集,学习系统由训练数据学习一个分类器P(Y∣X)或Y=f(X),分类系统经过学习到的分类器对新的输入实例xn+1进行分类,预测其输出的类别yn+1。

图8 监督学习在分类问题中的应用

3.3.2 异常注入

通常而言,在样本数据集中,正负样本比例若是极度不均衡(好比1:5,或者更悬殊),那么分类器分类时就会倾向于高比例的那一类样本(假如负样本占较大比例,则会表现为负样本Recall太高,正样本Recall低,而总体的Accuracy依然会有比较好的表现),在一个极度不均衡的样本集中,因为机器学习会对每一个数据进行学习,那么多数数据样本带有的信息量就比少数样本信息量大,会对分类器学习过程当中形成干扰,致使分类不许确。

在实际生产环境中,时序数据异常点是很是少见的,99%以上的数据都是正常的。若是使用真实生产环境的数据进行样本标注,将会致使正负样本比例严重失衡,致使精召率没法知足要求。为了解决基于监督学习的异常检测异常点过少的问题,本文设计一种针对周期型指标的自动异常注入算法,保证异常注入足够随机且包含各类异常场景。

时序数据的异常分为两种基本类型,异常上涨和异常下跌,以下图9(图中数据使用Curve[11]标注),一般异常会持续一段时间,而后逐步恢复,恢复过程或快或慢,影响异常两侧的值,称之为涟漪效应(Ripple Effect),相似石头落入水中,波纹扩散的情形。受到该场景的启发,异常注入思路及步骤以下:

图9 异常case中异常数据分布

  1. 给定一段时序值S,肯定注入的异常个数N,将时序数据划分为N块。
  2. 在其中的一个区域X中,随机选定一个点Xi做为异常种子点。
  3. 设定异常点数目范围,基于此范围产生随机出异常点数n,异常点随机分布在异常种子两侧,左侧和右侧的数目随机产生。
  4. 对于具体的异常点,根据其所在位置,选择该点邻域范围数据做为参考数据集m,须要邻域在设定的范围内随机产生。
  5. 产生一个随机数,若为奇数,则为上涨,不然下跌。基于参考数据集m,根据3Sigma原理,生成超出±3σ的数据做为异常值。
  6. 设定一个影响范围,在设定范围内随机产生影响的范围大小,左右两侧的影响范围也随机分配,同时随机产生异常衰减的方式,包括简单移动平均、加权移动平均、指数加权移动平均三种方式。
  7. 上述过程只涉及突增突降场景,而对于同时存在升降的场景,经过分别生成上涨和下跌的上述两个异常,而后叠加在一块儿便可。

经过上面的异常注入步骤,能比较好地模拟出周期型指标在生产环境中的各类异常场景,上述过程当中各个步骤的数据都是随机产生,因此产生的异常案例各不相同,从而能为咱们生产出足够多的异常样本。为了保证样本集的高准确性,咱们对于注入异常后的指标数据还会进行标注,以去除部分注入的非异常数据。具体异常数据生成效果如图10所示,其中蓝色线为原始数据,红色线为注入的异常,能够看出注入异常与线上环境发生故障时类似,注入的异常随机性较大。

图10 异常注入效果图

3.3.3 特征工程

针对周期型指标,经标注产生样本数据集后,须要设计特征提取器进行特征提取,Opprentice中设计的几种特征提取器如图11所示:

图11 论文Opprentice特征提取器

上述特征主要是一些简单的检测器,包括如固定阈值、差分、移动平均、SVD分解等。Metis将其分为三种特征,一是统计特征,包括方差、均值、偏度等统计学特征;二是拟合特征,包括如移动平均、指数加权移动平均等特征;三是分类特征,包含一些自相关性、互相关性等特征。参考上述说起的特征提取方法,本文设计了一套特征工程,区别于上述特征提取方法,本文对提取的结果用孤立森林进行了一层特征抽象,使得模型的泛化能力更强,所选择的特征及说明以下图12所示:

图12 特征选择及说明

3.3.4 模型训练及实时检测

参考监督学习在分类问题中的应用思路,对周期型指标自动异常检测方案具体设计如图下13所示,主要分为离线模型训练和实时检测两大部分,模型训练主要根据样本数据集训练生成分类模型,实时检测利用分类模型进行实时异常检测。具体过程说明以下:

  1. 离线模型训练:基于标注的样本数据集,使用设计的特征提取器进行特征提取,生成特征数据集,经过Xgboost进行训练,获得分类模型,并存储。
  2. 实时检测:线上实时检测时,时序数据先通过预检测(下降进入特征提取环节几率,减小计算压力),而后根据设计的特征工程进行特征提取,再加载离线训练好的模型,进行异常分类。
  3. 数据反馈:若是断定为异常,将发出告警。进一步地,用户可根据实际状况对告警进行反馈,反馈结果将加入样本数据集中,用于定时更新检测模型。

图13 模型检测和实时检测流说明

3.3.5 特殊场景优化

经过上述实践,本文获得一套可完整运行的周期型指标异常检测系统,在该系统应用到生产环境的过程当中,也遇到很多问题,好比低峰期(小数值)波动幅度较大,节假日和周末趋势和工做日趋势彻底不一样,数据存在总体大幅抬升或降低,部分规律波动时间轴上存在偏移,这些状况都有可能产生误告。本文也针对这些场景,分别提出对应的优化策略,从而减小周期型指标在这些场景下的误告,提升异常检测的精召率。

1)低峰期场景:低峰期主要表现是小数值高波动,低峰期的波动比较广泛,可是常规检测时,只获取当前点先后7min的邻域内的数据,可能没法获取到自己已经出现过屡次的较大波动,致使误判为异常。因此对于低峰期,须要扩大比较窗口,容纳到更多的正常的较大波动场景,从而减小被误判。以下图14所示,红色是当日数据,灰色是上周同日数据,若是判断窗口为w1,w1内蓝色点有可能被认为是异常点,而时间窗口范围扩大到w2后,大幅波动的蓝色点和绿色点都会被捕获到,出现相似大幅波动时再也不被断定为异常,至于低峰期范围能够经过历史数据计算进行识别。

图14 低峰期时不一样时段的类似大幅波动

2)节假日场景:节假日前一天以及节假日以后一周的数据,和正常周期的趋势都会有较大差异,可能会出现误告。本文经过提早配置须要进行节假日检测的日期,在设置的日期范围内,除了进行正常的检测流程,对于已经检测出异常的数据点,会再进入到节假日检测流程,都异常才会触发告警。节假日检测会取最近1h的数据,分别计算其波动比、周同比、日环比等数据,当前时间的这些指标经过“孤立森林”判断都为异常,才会认为数据是真正异常。除此以外,对于节假日,模型的敏感度会适当调低以适应节假日场景。

3)总体抬升/降低场景:场景特色以下图15所示,在该场景下,会设置一个抬升/下跌率,好比80%,若是今天最近1h数据80%相对昨日和上周都上涨,则认为是总体抬升,都下跌则认为是总体降低。若是出现总体抬升状况,会下降模型敏感度,而且要求当前日环比、周同比在1h数据中均为异常点,才会断定当前的数据异常。

图15 总体抬升降低场景

4)规律波动偏移场景:部分指标存在周期性波动,可是时间上会有所偏移,如图16所示案例中时序数据因为波动时间偏移致使误告。本文设计一种类似序列识别算法,在历史数据中找出波动类似的序列,若是存在足够多的类似波动序列,则认为该波动为正常波动。类似序列提取过程以下:最近n分钟的时序做为基础序列x,获取检测时刻历史14天邻域内的数据(如先后30min),在邻域数据中指定滑动窗口(如3min)滑动,把邻域数据分为多个长度为n的序列集Y,计算基础序列x与Y中每一个序列的DTW距离,经过“孤立森林”对距离序列进行异常判断,对于被断定为异常值的DTW距离,它所对应的序列将被视为类似序列。若是类似序列个数超出设定阈值,则认为当前波动为规律偏移波动,属于正常现象。根据上述方法,提取到对应的类似序列如图16右边所示,其中红实线为基础序列。

图16 规律波动偏移类似序列提取

3.4 异常检测能力平台化

为了把上述时序数据异常检测探索的结果进行落地,服务运维部与交易系统平台部设计和开发了时序数据异常检测系统Horae。Horae致力于时间序列异常检测流程的编排与调优,处理对象是时序数据,输出是检测流程和检测结果,核心算法是异常检测算法、时间序列预测算法以及针对时间序列的特征提取算法。除此以外,Horae还会针对特殊的场景开发异常检测算法。Horae核心能力是可根据提供的算法,编排不一样的检测流程,对指标进行自动分类,并针对指标所属类型自动选择合适的检测流程,进行流程调优获得该指标下的最优参数,从而确保能适配指标并获得更高的精召率,为各个对时序数据异常检测有需求的团队提供高准确率的异常检测服务。

3.4.1 Horae系统架构设计

Horae系统由四个模块组成:数据接入、实时检测、实验模块和算法模块。用户经过数据接入模块注册须要监听时序数据的消息队列,Horae系统将监听注册的Topic采集时序数据,并根据粒度(例如分钟、小时或天)更新每一个时间序列,每一个时序点都存储到时序数据库中,实时检测模块对每一个时序点执行异常检测,当检测到异常时,经过消息队列将异常信息传输给用户。下图17详细展现了Horae系统的总体架构图。

  1. 数据接入:用户能够经过建立数据源用于数据上报,数据源能够包含一个或多个指标,指标更新频率最小为一分钟。不一样数据源中指标的时序数据相互隔离,时序数据更新到使用Elasticsearch改造后的时序数据库中。
  2. 实时检测:采集到实时的时序数据后,会根据指标绑定的执行流程当即进行异常检测,若是没有训练调优,会先执行训练调优以保证更佳的精召率。实时检测的结果会经过消息队列通知到用户,用户根据异常检测的结果进行进一步处理判断是否须要发出告警。
  3. 实验模块:该模块主要功能是样本管理、算法注册、流程编排、模型训练和评估、模型发布。该模块提供样本管理功能,可对样本进行标注和存储;对于已经实现的算法,能够注册到系统中,供流程编排使用;经过算法编排获得的流程,能够用在模型训练或者异常检测中;训练流程会使用到标注好的样本数据调用算法离线服务进行离线训练并存储模型;对于已经编排好的检测流程,能够对指标进行模拟观察检测异常检测效果,或者离线回归判断检测流程在该指标上的具体精召率数据。
  4. 算法模块:算法模块提供了全部在实验模块注册的异常检测算法的具体实现,算法模块既能够执行单个算法,也能够接受多个算法编排的流程进行执行。当前支持的算法大类主要有预处理算法(异常值去除、空值填充、降维、归一化等),时序特征算法(统计类特征、拟合特征、分类特征等),机器学习类算法(RF、SVM、XGBoost、GRU、LSTM、CNN、聚类算法等),检测类算法(孤立森林、LOF、SVM、3Sigma、四分位、IQR等),预测类算法(Ewma、Linear Weighted MA、Holt-Winters、STL、SAIMAX、Prophet等),自定义算法(形变分析、同环比、波动比等)。

图17 Horae时序数据异常检测系统架构图

3.4.2 算法注册和模型编排

算法模型是对算法的抽象,经过惟一字符串标识算法模型,注册算法时须要指定算法的类型、接口、参数、返回值和处理单个时序点所须要加载的时序数据配置。成功注册的算法模型根据算法类型的不一样,会生成用于模型编排的算法组件或对异常检测模型进行训练的组件。用于模型编排的算法组件主要包括:预处理算法、时序特征算法、评估算法、预测算法、分类算法、异常检测算法等,用于模型训练的算法分为两大类:参数调优和机器学习模型训练。

注册后的算法模型一般不会直接用于异常检测,会对算法模型进行编排后获得一个流程模型,流程模型能够用于执行异常检测或者执行训练。实验模块支持两种类型的流程模型:执行流程和训练流程。执行流程是一个异常检测流程,指定指标和检测时间段,获得检测时间段每一个时序点的异常分值;训练流程是一个执行训练的流程模型,主要包括参数调优训练流程和机器学习模型训练流程。使用算法进行流程编排以下图18所示,左侧菜单为算法组件,中间区域可对算法执行流程进行编排调整,右侧区域是具体算法的参数设置。

图18 流程编排示意图

3.4.3 离线训练和实时检测

在模型编排阶段,可编排执行流程和训练流程,执行流程主要用在指标实时异常检测过程,而训练流程主要用在离线模型训练和参数调优。执行流程由流程配置和异常分值配置构成,由实验模块的流程调度引擎负责执行调度,下图19展现了执行流程的详细构成。流程调度引擎在对执行流程调度执行以前,会从流程的最深叶子节点的算法组件开始递归计算须要加载的时序数据集,根据流程中算法组件的参数配置,加载前置训练流程的训练结果,最后对流程中的算法组件依次调度执行,获得检测时间段每一个时序点的异常分值。最终实现后的执行流程编排如图18所示。

图19 执行流程组成和处理过程

训练流程由流程配置、训练算法、样本加载配置和训练频次等信息构成,由实验模块的流程调度引擎负责调度执行,下图20展现了训练流程的详细构成。训练流程主要分为两大类,参数调优训练和机器学习模型训练。参数调优训练是指为须要调优的参数设置参数值迭代范围或者枚举值,经过贝叶斯调优算法对参数进行调优,获得最优参数组合;机器学习模型训练则经过设计好特征工程,设置分类器和超参数范围后调优获得机器学习模型文件。训练流程执行训练的样本集来源于人工标注的样本或者基于自动样本构造功能生成的样本。训练流程编排具体过程和执行流程相似,不一样的是训练流程可设置定时任务执行,训练的结果会存储供后续使用。

图20 训练流程组成和处理过程

异常检测模型中会包含不少凭借经验设定的超参数,不一样的指标可能须要设置不一样的参数值,保证更高的精召率。而指标数据会随着时间发生变化,设置参数须要按期的训练和更新,在实验模块中能够为训练流程设置定时任务,实验模块会定时调度训练流程生成离线训练任务,训练任务执行完成能够看到训练结果和效果。下图21示例展现了一个参数调优训练流程的示例。

图21 参数调优训练结果示例

3.4.4 模型案例和结果评估

根据在周期型指标上探索的结果,在Horae上编排分类模型训练流程,训练和测试所使用的样本数是28000个,其中用于训练的比例是75%,用于验证的比例是25%,具体分类模型训练结果以下图22所示,在测试集上的准确率94%,召回率89%。同时编排了与之对应的执行流程,它的检测流程除了异常分类,还主要包含了空值填充、预检测、特征提取、分类判断、低峰期判断、偏移波动判断等逻辑,该执行流程适用范围是周期型和稳定型指标。除此以外,还提供了流程调优能力,检测流程中的每一个算法能够暴露其超参数,对于具体的指标,经过该指标的样本数据能够训练获得该流程下的一组较优超参数,从而提升该指标的异常检测的精召率。

图22 异常分类模型训练结果

该异常检测流程应用到生产环境的指标后,具体检测效果相关案例以下图23所示,对于周期型指标,能及时准确地发现异常,对异常点进行反馈,准确率达到90%以上。除此以外,还对比了形变分析异常检测,对于生产环境中遇到的三个形变分析没法发现的4个案例,周期型指标异常检测流程能发现其中3个,表现优于形变分析。

图23 周期型指标异常检测模型生产环境检测结果

4、总结与展望

时序数据异常检测做为AIOps中故障发现环节的核心,当前通过探索和实践,已经在周期型指标异常检测上取得了必定的成绩,并落地到Horae时序异常检测系统中。在时序数据异常检测部分,后续会陆续实现平稳型、无规律波动型指标自动异常检测,增长指标数据预测相关能力,提升检测性能,从而实现全部类型的海量指标自动异常检测的目的。

除此以外,在告警触达方面,咱们当前在进行告警收敛、降噪和抑制相关的规则和算法的探索,致力于提供精简有效的信息,减小告警风暴及干扰;在故障定位方面,咱们已经基于规则在定位上取得比较不错的效果,后续还会进行更全面的定位场景覆盖和关联性分析、根因分析、知识图谱相关的探索,经过算法和规则提高故障定位的精召率。因篇幅所限,告警触达(告警中心)和故障定位(雷达)两部份内容将会在后续的文章中详细进行分享,敬请期待。

5、参考资料

  • [1] 周志华. 机器学习: 发展与将来[R]. 报告地: 深圳, 2016.
  • [2] 美团实时监控系统CAT[EB/OL]. https://tech.meituan.com/CAT_... 2018-11-01.
  • [3] 美团系统指标监控Mt-Falcon[EB/OL]. https://tech.meituan.com/Mt-F... 2017-02-24.
  • [4] Ding R, Wang Q, Dang Y, et al. Yading: fast clustering of large-scale time series data[J]. Proceedings of the VLDB Endowment, 2015, 8(5): 473-484.
  • [5] Paparrizos J, Gravano L. k-shape: Efficient and accurate clustering of time series[C]. Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data. ACM, 2015: 1855-1870.
  • [6] H. Ren, Q. Zhang, B. Xu, Y. Wang, C. Yi, C. Huang, X. Kou, T. Xing, M. Yang, and J. Tong, “Time-series anomaly detection serviceat microsoft,” in Proceedings of the ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pp. 3009–3017, ACM, Jun. 2019.
  • [7] Tom Brander. Time series classification with Tensorflow[EB/OL]. https://burakhimmetoglu.com/2... 2017-08-22.
  • [8] Liu D, Zhao Y, Xu H, et al. Opprentice: Towards practical and automatic anomaly detection through machine learning[C]//Proceedings of the 2015 Internet Measurement Conference. ACM, 2015: 211-224.
  • [9] Metis is a learnware platform in the field of AIOps[EB/OL]. https://github.com/Tencent/Me... 2018-10-12.
  • [10] 李航. 统计学习方法 [M]. 第2版. 北京: 清华大学出版社, 2019.28-29.
  • [11] An tool to help label anomalies on time-series data[EB/OL]. https://github.com/baidu/Curve, 2018-08-07.

6、做者简介

胡原、锦冬、俊峰,基础技术部-服务运维部工程师;长伟、永强,到家事业群-交易系统平台部工程师。

招聘信息

基础技术部-服务运维部-运维工具开发组-故障管理开发组主要负责故障发现、故障定位、故障恢复、故障运营、告警中心、风险管理、数据仓库等工做。目前团队诚招高级工程师、技术专家。欢迎有兴趣的同窗投送简历至tech@meituan.com(邮件主题注明:运维工具)

想阅读更多技术文章,请关注美团技术团队(meituantech)官方微信公众号。

相关文章
相关标签/搜索