AIOps,最初的定义是AlgorithmITOperations,是利用运维算法来实现运维的自动化,最终走向无人化运维。随着技术成熟,逐步确定为ArtificialIntelligenceforITOperations——智能运维,将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维无法解决的问题。
早期的运维工作大部分是由运维人员手工完成的,手工运维在互联网业务快速扩张、人力成本高企的时代,难以维系。于是,自动化运维应运而生,它主要通过可被自动触发、预定义规则的脚本,来执行常见、重复性的运维工作,从而减少人力成本,提高运维的效率。总的来说,自动化运维可以认为是一种基于行业领域知识和运维场景领域知识的专家系统。随着整个互联网业务急剧膨胀,以及服务类型的复杂多样,“基于人为指定规则”的专家系统逐渐变得力不从心,自动化运维的不足,日益凸显,当前美团在业务监控和运维层面也面临着同样的困境。
DevOps的出现,部分解决了上述问题,它强调从价值交付的全局视角,但DevOps更强调横向融合及打通,AIOps则是DevOps在运维(技术运营)侧的高阶实现,两者并不冲突。AIOps不依赖于人为指定规则,主张由机器学习算法自动地从海量运维数据(包括事件本身以及运维人员的人工处理日志)中不断地学习,不断提炼并总结规则。AIOps在自动化运维的基础上,增加了一个基于机器学习的大脑,指挥监测系统采集大脑决策所需的数据,做出分析、决策,并指挥自动化脚本去执行大脑的决策,从而达到运维系统的整体目标。综上看,自动化运维水平是AIOps的重要基石,而AIOps将基于自动化运维,将AI和运维很好地结合起来,这个过程需要三方面的知识:
美团技术团队在行业、业务领域知识和运维领域的知识等方面有着长期的积累,已经沉淀出不少工具和产品,实现了自动化运维,同时在AIOps方面也有一些初步的成果。我们希望通过在AIOps上持续投入、迭代和钻研,将之前积累的行业、业务和运维领域的知识应用到AIOps中,从而能让AIOps为业务研发、产品和运营团队赋能,提高整个公司的生产效率。
AIOps的建设可以先由无到局部单点探索,在单点探索上得到初步的成果,再对单点能力进行完善,形成解决某个局部问题的运维AI学件,再由多个具有AI能力的单运维能力点组合成一个智能运维流程。行业通用的演进路线如下:
所谓学件,亦称AI运维组件[1](南京大学周志华老师原创),类似程序中的API或公共库,但API及公共库不含具体业务数据,只是某种算法,而AI运维组件(或称学件),则是在类似API的基础上,兼具对某个运维场景智能化解决的“记忆”能力,将处理这个场景的智能规则保存在了这个组件中,学件(Learnware)=模型(Model)+规约(Specification)。AIOps具体的能力框架如下图1所示:
当前,我们在质量保障方面的诉求最迫切,服务运维部先从故障管理领域探索AIOps实践。在故障管理体系中,从故障开始到结束主要有四大核心能力,即故障发现、告警触达、故障定位、故障恢复。故障发现包含了指标预测、异常检测和故障预测等方面,主要目标是能及时、准确地发现故障;告警触达包含了告警事件的收敛、聚合和抑制,主要目标是降噪聚合,减少干扰;故障定位包含了数据收集、根因分析、关联分析、智能分析等,主要目标是能及时、精准地定位故障根因;故障恢复部分包含了流量切换、预案、降级等,主要目标是及时恢复故障,减少业务损失,具体关系如下图3所示:
其中在故障管理智能化的过程中,故障发现作为故障管理中最开始的一环,在当前海量指标场景下,自动发现故障和自动异常检测的需求甚为迫切,能极大地简化研发策略配置成本,提高告警的准确率,减少告警风暴和误告,从而提高研发的效率。除此之外,时序数据异常检测其实是基础能力,在后续告警触达、故障定位和故障恢复环节中,存在大量指标需要进行异常检测。所以将故障发现作为当前重点探索目标,解决当前海量数据场景下人工配置和运营告警策略、告警风暴和准确率不高的核心痛点。整个AIOps体系的探索和演进路线如下图4所示。每个环节均有独立的产品演进,故障发现-Horae(美团服务运维部与交易系统平台部共建项目)、告警触达-告警中心、故障定位-雷达、故障恢复-雷达预案。
在时序数据异常检测中,对于不同类型的时序数据,通常需要设置不同的告警规则。比如对于CPULoad曲线,往往波动剧烈,如果设置固定阈值,瞬时的高涨会经常产生误告,SRE和研发人员需要不断调整阈值和检测窗口来减少误告,当前,通过Radar(美团内部系统)监控系统提供的动态阈值策略,然后参考历史数据可以在一定程度上避免这一情况。如果系统能够提前预判该时序数据类型,给出合理的策略配置建议,就可以提升告警配置体验,甚至做到自动化配置。而且在异常检测中,时序数据分类通常也是智能化的第一步,只有实现智能化分类,才能自动适配相应的策略。
3.2.1分类器选择
根据当前监控系统中时序数据特点,以及业内的实践,我们将所有指标抽象成三种类别:周期型、平稳型和无规律波动型[6]。我们主要经历了三个阶段的探索,单分类器分类、多弱分类器集成决策分类和卷积神经网络分类。
3.2.2分类流程
我们选择CNN分类器进行时序数据分类,分类过程如下图6所示,主要步骤如下:
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。
3.3.2异常注入
一般而言,在样本数据集中,正负样本比例如果极度不均衡(比如1:5,或者更悬殊),那么分类器分类时就会倾向于高比例的那一类样本(假如负样本占较大比例,则会表现为负样本Recall过高,正样本Recall低,而整体的Accuracy依然会有比较好的表现),在一个极度不均衡的样本集中,由于机器学习会对每个数据进行学习,那么多数数据样本带有的信息量就比少数样本信息量大,会对分类器学习过程中造成干扰,导致分类不准确。
在实际生产环境中,时序数据异常点是非常少见的,99%以上的数据都是正常的。如果使用真实生产环境的数据进行样本标注,将会导致正负样本比例严重失衡,导致精召率无法满足要求。为了解决基于监督学习的异常检测异常点过少的问题,本文设计一种针对周期型指标的自动异常注入算法,保证异常注入足够随机且包含各种异常场景。
通过上面的异常注入步骤,能比较好地模拟出周期型指标在生产环境中的各种异常场景,上述过程中各个步骤的数据都是随机产生,所以产生的异常案例各不相同,从而能为我们生产出足够多的异常样本。为了保证样本集的高准确性,我们对于注入异常后的指标数据还会进行标注,以去除部分注入的非异常数据。具体异常数据生成效果如图10所示,其中蓝色线为原始数据,红色线为注入的异常,可以看出注入异常与线上环境发生故障时相似,注入的异常随机性较大。
3.3.3特征工程
针对周期型指标,经标注产生样本数据集后,需要设计特征提取器进行特征提取,Opprentice中设计的几种特征提取器如图11所示:
3.3.4模型训练及实时检测
参考监督学习在分类问题中的应用思路,对周期型指标自动异常检测方案具体设计如图下13所示,主要分为离线模型训练和实时检测两大部分,模型训练主要根据样本数据集训练生成分类模型,实时检测利用分类模型进行实时异常检测。具体过程说明如下:
3.3.5特殊场景优化
3)整体抬升/下降场景:场景特点如下图15所示,在该场景下,会设置一个抬升/下跌率,比如80%,如果今天最近1h数据80%相对昨日和上周都上涨,则认为是整体抬升,都下跌则认为是整体下降。如果出现整体抬升情况,会降低模型敏感度,并且要求当前日环比、周同比在1h数据中均为异常点,才会判定当前的数据异常。
3.4.1Horae系统架构设计
3.4.2算法注册和模型编排
算法模型是对算法的抽象,通过唯一字符串标识算法模型,注册算法时需要指定算法的类型、接口、参数、返回值和处理单个时序点所需要加载的时序数据配置。成功注册的算法模型根据算法类型的不同,会生成用于模型编排的算法组件或对异常检测模型进行训练的组件。用于模型编排的算法组件主要包括:预处理算法、时序特征算法、评估算法、预测算法、分类算法、异常检测算法等,用于模型训练的算法分为两大类:参数调优和机器学习模型训练。
3.4.3离线训练和实时检测
3.4.4模型案例和结果评估
根据在周期型指标上探索的结果,在Horae上编排分类模型训练流程,训练和测试所使用的样本数是28000个,其中用于训练的比例是75%,用于验证的比例是25%,具体分类模型训练结果如下图22所示,在测试集上的准确率94%,召回率89%。同时编排了与之对应的执行流程,它的检测流程除了异常分类,还主要包含了空值填充、预检测、特征提取、分类判断、低峰期判断、偏移波动判断等逻辑,该执行流程适用范围是周期型和稳定型指标。除此之外,还提供了流程调优能力,检测流程中的每个算法可以暴露其超参数,对于具体的指标,通过该指标的样本数据可以训练得到该流程下的一组较优超参数,从而提高该指标的异常检测的精召率。
胡原、锦冬、俊峰,基础技术部-服务运维部工程师;长伟、永强,到家事业群-交易系统平台部工程师。
基础技术部-服务运维部-运维工具开发组-故障管理开发组主要负责故障发现、故障定位、故障恢复、故障运营、告警中心、风险管理、数据仓库等工作。目前团队诚招高级工程师、技术专家。欢迎有兴趣的同学投送简历至tech@meituan.com(邮件主题注明:运维工具)