做者简介:周伟 百度高级研发工程师算法
负责百度智能运维(Noah)监控报警系统、通告平台;在精准报警、精准通告、报警收敛、公/私有云监控等方向具备普遍的实践经验。安全
监控报警是故障发现的重要一环,也是百度在AIOps的最先切入方向之一,目前百度 AIOps 在监控报警方面已经有两个场景取得突出效果:智能异常检测和智能报警合并。网络
如何支撑 AIOps 算法在监控报警系统的快速落地并产生业务价值,这对监控报警架构提出了很大的挑战!本文首先介绍百度Noah监控报警的功能和业务模型,而后重点分析百度监控报警系统在落地 AIOps 过程当中遇到的挑战。架构
首先咱们介绍下百度的标准故障处理流程,如上图所示,主要分为如下7个过程:运维
在整个故障处理流程中,监控系统主要负责故障发现到故障定位的环节;报警系统做为监控系统的子系统,主要负责故障发现和故障通告。组件化
百度Noah报警系统最先服务于百度内部的监控平台,提供从机器、实例到上层业务等全方位、立体化的监控报警能力,已经覆盖百度的全部产品线。同时,系统面临很大的挑战,每秒须要处理千万级个数据点,线上的监控配置已经达到百万级别,天天会产生千万个报警事件,在这么大的量级下,还需保证秒级的报警时效性。学习
百度Noah报警系统不只为百度内部用户服务,咱们还同时为公有云和私有云服务提供监控报警能力。咱们将内部强大的监控产品和运维理念输出到业界,打造了NoahEE产品(详见《百度云企业级运维平台——NoahEE》介绍 ),帮助客户一块儿提高运维效率和线上稳定性。另外,咱们还依托报警系统孵化出了百度AIOps智能运维产品,包括智能异常检测、故障定位、报警合并等高级功能,已经落地金融、交通、互联网等行业,受到客户一致好评。测试
监控报警系统的核心使命是精准报警,那报警系统是如何进行故障发现和故障通告呢?咱们经过一个场景来了解下。spa
假设上图中的曲线是某产品线的流量指标(简称PV),其中每一个点表明一个PV数据点,假设但愿当PV值小于100时,异常判断结果为异常,并通告给业务运维人员。3d
监控报警系统会周期性地对最近一个数据点(Data)进行判断,若是PV小于100则判断结果为异常,不然判断结果为正常。当首次异常的时候(即判断结果从正常转为异常),会产生一个报警事件(Event);当异常恢复时,则将报警事件结束掉。在报警事件持续期间,会根据报警规则产生一个或多个报警消息(Message),并将报警消息渲染成容易理解的文本,经过下游发送渠道(短信、电话等)送达给运维工程师。经过这么一个流程,监控报警系统就达到了故障发现和故障通告的目的。
相应地,咱们将监控报警系统拆分红如下三个子系统:
将监控报警系统拆分红三个子系统后,有如下两个好处:
每一个子系统能够根据自身的功能特色采用不一样的技术栈和部署架构,由不一样的研发工程师负责研发和维护。好比异常判断系统更偏向计算逻辑,能够采用Golang或C++这类更加注重执行效率的技术栈;而事件管理和报警发送系统更偏向于业务逻辑,能够采用Java或PHP等更注重研发效率的技术栈。
每一个子系统也能够独立进行功能和架构升级。好比异常判断系统须要大量的CPU资源,比较适合采用集群架构,这样方便横向扩展,增长系统吞吐能力;而通告发送系统的流量相对小些,初期能够采用主备架构,不只架构简单可靠,并且研发和维护成本小。假设随着业务的发展,业务须要更大的报警发送能力,通告发送系统只需保证对外接口不变,独立将自身架构升级为集群架构,就可获取更大的报警发送能力。
每一个子系统都是一个独立的功能组件,能够独立部署、升级,这样就具有灵活支持商业化交付能力。好比咱们能够只将通告发送系统单独交付给商业化客户,客户经过直接调用通告发送的接口就能够获取报警合并、渲染、发送等能力。
经过上面的业务模型介绍,你们已经对监控报警系统有了全局的认识,那下面来详细分析落地AIOps遇到的问题。
咱们继续来看PV指标,经过对历史PV数据的观察,咱们发现不一样时间段的PV大小是上下波动的,好比在早上八九点是流量高峰期,在凌晨两三点是流量低峰期,另外工做日和周末的流量大小也是不一样的。这意味着,咱们不可能设置统一的阈值来检测PV流量的变化状况,那么怎么办呢?
百度策略人员研发了基于鲁棒回归的无监督突升突降检测算法,这个算法不须要设置PV阈值,便可检测流量的变化。下面展现的这个公式是其中的一步,其中变量y就是真实的PV值,f(x)表明利用某种算法预测到的PV值。若是对算法细节感兴趣,可参考文章:《咱们不同!告诉你百度是如何作智能流量异常检测的》。
这类异常检测算法相对于传统的四则运算,有如下不一样:
最初咱们落地这类AIOps算法时,总体的流程如上图所示:
上面的研发流程暴露出不少的问题。一方面,对咱们的研发工程师要求比较苛刻,既须要看得懂策略算法,又要熟知工程研发;另外一方面,算法的迭代周期比较长,常常以月为单位,可能算法刚上线,数据特征就发生了变化,致使算法失效;最后,即便算法程序迭代稳定了,可是参数模型还须要按期更新,因为参数模型和算法程序没有分离,致使后期参数模型的更新须要不断上线,提升了维护成本。
咱们再来看下报警管理的挑战。报警管理须要处理的需求比较多,咱们以一个典型的运维场景来串一下这些需求:
可见报警管理的需求复杂多样,若是咱们不能抽象出一个可扩展的报警管理模型,咱们将变得愈来愈被动。
看完报警管理,咱们再来看下报警风暴的挑战。
为了不遗漏故障,运维工程师经常会在监控系统中定制大量的监控指标和报警规则,从而创建起从网络到机器、从实例到模块、再到上层业务的立体化监控。立体化的监控虽然极大提升了故障发现的能力,可是很容易致使一个故障触发大量报警,形成报警风暴。
为了让你们认识报警风暴的真面目,咱们来看三个典型的场景:
咱们能够看到,这三种典型故障对值班工程师都很是的不友好。他们的手机会被短信和电话轰炸,与此同时大量的报警消息却并不能帮助他们迅速寻找根因和制订止损方案。对大量报警消息先进行有效地组织,而后再发送,就成为值班工程师的一大需求。
本文首先介绍了百度Noah监控报警系统功能和业务模型,而后结合案例场景分析了咱们在落地AIOps时遇到的问题,让你们对监控报警系统的现状有一个直观的认识。咱们将在下篇文章中讲解如何来解决这些挑战,敬请期待。
若是你喜欢本文,请分享到朋友圈,想要得到更多信息,请关注咱们!
若是你有任何问题欢迎留言咨询~
若是想试用咱们的企业级运维平台NoahEE,请联系邮箱:noah_bd@baidu.com