当前位置: 首页 > 科技观察

百度日常业务监控中智能运维的探索_0

时间:2023-03-20 17:50:39 科技观察

随着互联网产品规模的爆发式增长,大规模分布式系统的监控复杂性也日益凸显。工程师们发现:监控疏漏导致宕机的黑天鹅现象时有发生;故障发生时,很难从海量的监控指标中快速找到故障根源;告警风暴极大地干扰了工程师定位问题的速度;故障恢复的速度基本上取决于工程师的操作速度。因此,我们尝试构建智能化的运维监控系统,希望用智能化的手段帮助工程师解决这些问题。1.嘉宾介绍  曲先平,百度运维部高级研发工程师  负责百度智能运维监控,在运维监控、大数据处理分析方面有丰富的经验。  二、百度数据情况  随着百度各项产品的蓬勃发展,百度的服务器数量也呈现爆发式增长,近5年规模增长了20倍左右。对应产品规模的不断增长,运维人员每天都会收到越来越多的监控告警。面对海量的运维指标,如何快速定位问题发生的业务层级,实现精准告警,快速解决问题成为目标,成为常态化运维监控的诉求。  百度监控系统数据规模,仅以时间序列数据为例,不包括日志数据。服务器指标数:>1亿业务指标数:>8000万数据增长率:50TB/天  三.运维中的监控问题维护人员要找到指标与事件之间的关联,推导因果关系,最终定位故障,基本上是靠人的经验。但随着业务和监控规模的扩大,运维也希望通过更加自动化和智能化的方式来实现保障服务高可用的目标,即快速发现问题、分析定位或止损。  接下来,我们可以从发现问题—分析问题—解决问题的思路出发,循序渐进地给出解决方案。  4.发现问题:异常自动检测  日常运维的业务指标数据与昨天相比,会出现一些明显的异常,明显的持续偏差问题,指标数据随时间漂移。监控的配置基本靠工程师的经验或者不断的迭代修正,甚至纯人工排查。随着监控系统的发展,可以通过制定监控标准和自动化监控部署,实现运维的标准化和自动化。最终目标是用智能方法彻底解决这个问题。  一般情况下,当系统中指标数据出现波动时,需要先判断是否确实是异常情况,确认异常后再进行准确报警。那么,如何自动检测业务异常指标,帮助运维工程师和开发工程师处理问题呢?  这里主要有两种策略,自动恒定阈值设置和动态阈值设置:  1。恒定阈值设置方法  对于普通数据,运维人员在服务器端设置服务器应用指标,超过某个合理值自动报警,对服务器异常波动状态进行报警。这可以使用一些标准的统计方法来自动计算这个阈值,代替手动配置成本。  参考方法:假设一个基于历史数据统计的正态分布3-sigma策略  2。动态阈值设置方法  百度大部分业务数据的流量都呈现出很强的日周期特征,出现在某个时刻数据峰值突然下降或者谷底数据突然上升的时候,常量阈值法很难解决准确的异常判断此类问题。那么我们可以对上述方法进行演进和升级,采用动态时间窗阈值设置的方法来解决周期性数据的异常判断。  参考方法:多分布形式:按天分割数据,计算统计阈值段3-sigma策略  #p#3。常量阈值和动态阈值的使用  对于以上两种阈值的划分,异常检测系统如何知道应该对每组数据进行什么样的异常检测策略呢?这就需要预先对数据进行分类的方法,可以使用能够判断数据是否具有周期趋势的分类器方法。解决。如果数据具有很强的周期性特征,建议使用动态阈值设置方法;如果数据分析后没有周期性特征,那么使用一个恒定的阈值就可以了。  另外,我们也会遇到这种数据会随时间漂移的特殊情况。例如,某个产品的流量会根据工作日、周末、传统长假等表现出不同的数据特??征,从而产生周期性变化。此时要进行异常检测,不仅要考虑数据的普通周期性,还要考虑季节性和趋势变化。监控系统可以通过分析每天的数据,采用三次指数平滑等方法,了解数据本身的趋势。  当然,以上方法都是基于对历史数据的学习和分析来进行异常检测的。如果缺少历史数据,那么对于这些??指标来说,根据历史数据进行同比分析意义不大,核心转化为检测数据是否存在暴涨暴跌异常。可以使用类似于局部平滑的方法来检查真实数据与局部平滑后的数据是否存在较大差异。如果差距很大,可以判断有较大的突然上升或下降,可以识别数据异常。  参考方法:LocalsmoothingmethodVelocitymethod  通过经验的积累,即使波动不大,监控系统也能对核心产品的流量变化实现灵敏、准确的指标监控,快速发现异常情况。当然,一个全自动的异常检测系统难免会出现误报漏报的情况。这就要求异常检测系统需要支持工程师的标注和反馈。百度监控系统的自学习能力可以根据工程师的需要动态调整。同时支持手动调整和系统自动参数学习调整。系统可根据工程师打标或报警次数自动进行参数训练,将异常检测参数调整到合理范围内。  工程师标记和修改参数,标记未检测到的异常和标记误报  机器学习标记告警=>参数训练  结合以上方法,百度智能监控系统中的自动异常检测最终形成了两者的结合states组合:离线状态和在线状态,离线部分可以根据历史数据进行分类学习和参数训练,而在线部分可以进行最终的异常检测和告警。  具体组成如图:  5。发现问题:精准报警  监控系统仅仅发现问题是不够的,因为指标数量太多太复杂,为了辅助工程师快速解决问题的效果,也需要做到精准报警.百度的精准报警主要分为两个层次,一个是单个指标的报警是否足够准确;这里需要考虑两个问题,一个是是否每一个异常都应该报警?需要容忍系统故障的存在;另一种是异常过滤,将离散的异常点转化为异常事件或状态,找出指标与事件的相关性。  在单个指标报警足够准确的基础上,另外就是将不同指标的报警组合起来,达到足够准确。如何组合多个指标的告警?简单的策略就是在固定的时间窗口进行告警,时间相近的告警可以进行一定程度的合并,只要将最先出现的指标告警传递给运维人员即可。从整个监控策略来看,告警是合并的,相似的告警合并起来上报给运维人员。更复杂的策略是关联挖掘,将历史运维告警与事件关联起来进行告警。同时,一些告警经常一起频繁出现。可以认为这是同一个告警,不需要单独告警。  具体采用的策略是:  1.告警合并简单策略固定时间窗口同监控策略同监控对象    2。Alarmmergingcomplexstrategyassociationminingandmergingfrequentitesetsetswithhighconfidence  3.AlarmDependencyStrategyDependencyAbnormalDependency  六.问题分析:相关分析  监控系统不仅需要帮助工程师发现问题,还需要建立关联分析来辅助问题定位,甚至快速找到相关指标或影响。那么,如何为复杂多样的运维数据建立关联呢?  产品服务水平关联图:  运维工程师可以将一些基本的关联关系配置到监控系统中,可以让监控系统了解一些规范化的运维指标是否与其他指标相关,比如多个模块异常是否相关,服务器升级或部署问题是否与数据中心或交换机异常相关等。  具体实施策略为:  1.关联挖掘  (1)从与事件相关的频繁项集中挖掘所有运维事件  (2)事件与时间序列的异常关联指标问题诊断与故障定位常伴随部署与升级事件出现  (3)多个时间序列之间的关联  #p#2。关联可视化  帮助运维人员通过关联变化分析关键数据的变化。  (1)事件与事件相关性  (2)事件与时间相关性  3.服务视角定位问题  运维事件大多与时间密切相关,我们可以对运维事件进行分类,按照时间线演化顺序展示。同时,运维工程师经常接触到的服务拓扑,本身就是一种运维模块之间的关系。通过模块关联、时间关联、数据流关联等方式将这些离散的运维数据紧密联系起来,形成一个完整的服务视角。快速定位问题的路径。  (1)模块调用关系  (2)事件与模块关联  六、问题分析:故障定位  仅仅找到关系是不够的,关键是要真正分析业务问题和解决这个问题。下面介绍两种常用的辅助定位问题策略。  1。多维数据分析  监测系统采集到的多项指标都存在牵制关系。很多时候,一个总体指标是由很多个子指标组成的,或者也可以说是一个总体维度是由很多个子维度组成的。监控系统可以计算出各子指标或子维度占总指标总维度的百分比,并根据影响权重进行分析。当某个子指标的变化幅度对整体指标的影响最大时,我们往往会认为这个指标可能是问题的根源。  比如百度的整体流量指数对应的是各个区域流量的总和。如果整体流量有问题,可能是某个区域的流量有问题。找到对整体流量变化影响最大的区域,处理问题即可解决问题。同样的原则可以推广到其他情况。  2.故障诊断树  运维人员可以通过数据可视化的形式(热图、多维报表),结合以往问题发现的经验沉淀模式,发现指标之间的强相关性,进行问题诊断。那么能否将运维人员的经验固化到监控系统中,通过不同指标的分析方向和钻取方式形成树状结构,通过树上的某个节点进行逐级检测。最后形成故障诊断树。通过推导路径,不仅可以帮助运维人员在问题出现时快速完成排查流程,节省这部分定位时间,而且极有可能达到直接定位问题或加快速度的目的故障的解决。  故障检测:  (1)领域专家知识  (2)逻辑推导引擎  (3)快速找到问题根源执行  1.单边故障自动止损  单边故障指的是单个IDC故障,单个链路故障等,比如一个IDC或者部分IDC出现问题,解决方案就是切断这部分流量,使用监控系统做动态部署调度。通过对某个数据中心或链路的部署调整,帮助系统快速恢复,进而实现自动决策和执行,实现单边故障止损。  具体策略为:  (1)实现自动冗余和调度  (2)智能监控系统负责动态决策  (3)部署调度系统负责调度执行  2。灰度发布自动止损  研发工程师做灰度发布时,可以先放小流量,部署系统可以配合监控系统。如果出现问题,状态将被终止或直接回滚,以将灰度发布中的问题控制在范围内。  8.智能运维监控总结  通过以上描述,百度的智能运维监控系统最终形成了一个监控闭环,包括问题发现、分析决策、问题解决。具体组成包括异常检测、告警收敛、关联分析、故障定位和自动处理五个部分。  9.未来的运维将从被动变为主动  1。全方位覆盖  在客户端(APP、浏览器等)、云端(机房、服务器、自助、第三方服务等)、管道(Link、运营商)等维度进行数据采集以及异常自动检测。  2.让监控更智能分析利用现有数据,可视化服务状态、问题影响分析等自动学习理解故障趋势和模式自动发现服务或依赖环境的变化  当然,更进一步,监控系统是否能在故障发生前预测到故障,并能在故障发生前处理和解决,从而达到产品超高可用的目的。智能监控的未来应该是这样的。完善的监控部署后,运维工程师可以实现全方位的异常自动检测覆盖。监控系统解决方案。  欢迎所有对智能运维技术感兴趣的同学加入百度运维部,共同推动智能运维的发展。  欢迎来到百度运维部博客:http://op.baidu.com