5月6日,数人云与优维科技主办了【DevOps&SRE超越传统运维之道 · 深圳站】,6月北京站敬请关注~本文是腾讯SNG运维负责人——大梁分享的DevOps最后一棒,如何有效构建海量运营的持续反馈能力。同期嘉宾数人云王璞实录:活动实录丨SRE在传统企业中的落地实践。前端
梁定安,腾讯织云负责人,目前就任于腾讯社交网络运营部,开放运维联盟委员,腾讯云布道师,腾讯课堂运维讲师,EXIN DevOps Master讲师,凤凰项目沙盘教练,复旦大学客座讲师。算法
此图归纳了整个DevOps体系,它最后的环节,是作运营和终结的环节。对于运营和终结的理解,我认为应该包含两个维度:第一个是此次运维活动质量的运营与终结;第二个是产品的技术运营与生命周期的终结。
今天聊下产品生命周期结束前的技术运营阶段,如何构建质量体系,实现持续反馈和优化的目标。数据库
◆ 监控——覆盖率、状态反馈、指标度量服务器
监控要作到360度无死角,业务出现什么问题都能发现,有了监控的反馈,能够看到实时监控的状态,同时,当指标发生变化的时候也须要注意反馈信息。微信
◆ 告警——时效性、准确性、触及率网络
业务愈来愈复杂,层次愈来愈多,每个监控点都会产生数据指标、状态异常,会收到愈来愈多的告警。未看到或者看到未处理都须要承担责任,由于收到的并不是都是错误告警。架构
◆ 运营——RCA、事件管理、报表/考核负载均衡
问题再三出现必须从根源优化。经过事件管理机制保证RCA能够落地,最后经过报表和考核去给运维赋予权利,推进相关优化活动的开展,包括架构和代码的优化等。运维
腾讯业务按照不一样的层级进行管理,自下而上,有服务器层、数据库、逻辑层。中间计算的这一层,有接入层、负载均衡、机房、DNS服务、客户端、用户端等,为了作到无死角,咱们布局了不少监控点。机器学习
实现舆情监控后,监控点作到了100%的覆盖,但并不能高枕无忧,由于当监控点作得越多越立体化,360度无死角后,每一个最细节的点都有指标去度量,指标数据爆炸极可能成为另外一个潜在的监控隐患。
〓 繁——简
在具体生产过程当中会产生运维的事件或者故障,常常会有死机,以及各层监控告警,这些繁琐的告警、故障,该如何简单化?
〓 泛——精
举个例子,在一台核心的交换机下,假设其下连有1000台的机器分布到数据层、逻辑层、接入层等等,当这台交换机故障不可用时,因为有立体化监控的存在,每一个监控点都会产生大量的告警信息,要如何发现这些告警是由哪台核心交换机故障引发的?
〓 乱——序
因为指标采集方式和计数据量的不一样,直接致使了监控流处理效率是不同的。告警收到的次序不同,要如何排序并有效识别优先级?
因此在监控匮乏的时代要积极地搞建设,可是告警泛滥的时候要学会过滤。
腾讯业务要监控的对象如上图左,按照业务逻辑从下往上,下面是通用的监控层面,网络、服务器、虚拟化还有应用,应用包括了组件的一些监控。
这里举了申请QQ号的业务场景案例,假设用户在PC端发起申请QQ号的业务请求,请求走到WEB前端,然后是注册服务,注册QQ包含了三个信息:我的信息、个性化设置、增值服务。是否是QQ会员,是否要开通会员相似的服务,这是业务逻辑。
基于立体化地监控,假设用组件监控,不管是QQ仍是QQ空间、QQ音乐,都有一些通用的指标能够衡量。如,打开的内存是多少?长链接数是多少?用户进程、吞吐量、流量、CPU,业务层面返回码分别是什么?省市链接的成功率、请求量的分布是什么?这都与具体的业务逻辑无关。
在作监控时,把指标划分红两大类:
☆ 低层次指标
把公共的、基础设施等在业务逻辑之下的指标称之为低层次指标,如网络、硬件、虚拟化等。
越低层次的指标让监控系统或是告警带来的噪音越大。在规划监控处理或者优化监控策略时,要尽可能把低层次的指标自动化处理和收敛掉,尽可能以高纬度指标来告警,由于这才是最核心最须要关注,最能反馈业务可用性的告警。若是一个公司用低层次指标来代替高层次的指标做用,那质量是很难管理的。
☆ 高层次指标
高层次指标要能更直接地反馈业务可用性的状况,如成功率、延时、请求率等。
高层次的指标,要可以实时反馈业务真实情况的,在海量规模的业务运维场景下,人没办法看到单机的层面,必需要看到集群的层面。
以模块为统一的运维对象,模块是提供单一业务功能的集群。为何要管理到集群?简单理解就是把运维对象给抽象,作减法。拿腾讯的SNG来讲,10万+服务器,抽象成模块后只有一万多个模块,较以前面对10万个运维对象N个指标的告警量,如今面对一万个模块告警量要轻松很多,若是再把低层次的告警优化掉,可能只面对5000台的告警。
在高层次指标中,还要有效的区分开单服务的高层次指标,和业务功能的高层次指标。要理清两个概念,可靠性和可用性。
可靠性是指单个服务失败的次数,因为单个服务的失败并不必定会影响整个QQ号申请业务功能可用性的降低,由于微服务自身有失败重试的逻辑,在腾讯的运维经验中,咱们会在可靠性和可用性之间作出必定取舍。
低层次指标虽然比较基础或者能够自动化解决,但每每是一些高层次指标的根源问题,善用低层次指标可以帮助运维快速定位高层次指标故障。
监控无非是监控不少的值和率。把值和率分开是有考虑的,由于值报上来就是一个值,率是通过必定的计算才变成率的,其实都是把扁平化的信息包装成高层次的指标。
监控最终的目标都是要分析状态和发现异常,要从图、表或数据中,分析如今业务的真实状况,分析如今服务是否有异常。
立体化监控,会带来监控指标的爆炸,更有可能带来告警数据失控,若是不能妥善处理,就会把告警通知演变成“狼来了”,失去了原来警报的效用。想有效解决告警多、误告警多要面对几点:
◇ 关联分析
把一些真正重要的,须要经过事件、活动、指标提取出来。不要把什么事情都告警出来,从而过多消耗告警的诚信。
◇ 无误告警
怎么样把收敛策略、屏蔽策略用到极致,必要时能够将二者组合,以达到更强化的效果。
◇ 持续运营
作好持续运营就是作好跟进,确保重要事情有人跟、有人度量,防止问题再三出现,要在流程上有保障的机制。
这样就要求有一个质量体系来闭环管理,当监控发现业务架构不合理、代码不合理等问题,可以经过该质量体系,推进业务、开发、运维去将优化措施落地,这也是为了最终的商业价值,这是DevOps的观点。
这是手机Qzone的一个多维监控案例。当客户端第一次链接服务端,会有一个心跳包,它是一个命令字,咱们以成功率来度量其质量,其实就是考量它维持长链接的可靠性。(若是长链接断开移动客户端连服务端的话要跟基站创建长链接,起码三、4秒耗掉了,好友消息没有办法接收。)如图,通常的功能,咱们要求三个9的质量。可是千万别被平均数所蒙骗了,一块儿展开看看真实的状况。
腾讯的服务是多地多活的,有一些分布在规模相对小的AC点,有些分布在比较大的DC点。根据全国用户访问服务端点的不一样,腾讯内部称之为SET。讲平均数按SET的维度展开,为何“无SET”的成功率只有2个9?再展开一下。
按APN(接入方式WIFI、4G、3G等)展开,服务质量愈来愈差,只有两个绿了,发现4G是100%,WIFI环境为何只有两个9了?
按运营商展开,质量数据更红(差)了,虽然符合预期,但最终的问题尚未找到。
继续按地区展开,发现全是红的,但仍是没有头绪。
当再次按地域展开时,展开到浙江地区,发现出错的全是安卓版本。而IOS的版本全是100%的成功率,共性问题呼之欲出。
这时候回过头来反省一下排障的思路,可能打开的方式不对。在第三步的时候直接展开,好像真相就已经出来了,实际上是安卓的某几个版本可能有这样的隐患,致使这个心跳逻辑有问题。
这里说明一个问题,对待海量多维数据的处理,分析方案很重要,在规划和建设监控体系时,应该考虑好这点。今天给你们带来3个小技巧,但愿能给你们在作监控数据分析时有帮助。
海量监控数据分析的技巧:溯源、根因和优选。
为了加快告警信息量的处理每每把监控的协议格式化,格式化处理完了以后再进一步格式化,把不少原始数据的蛛丝马迹丢掉了,致使没有办法查到真正的问题。由于以前作的格式化会让监控数据失真,影响排障的效率,因此上报协议的时候尽量的保留字段。
〓 高维与降维打击
高维与降维打击,把一个指标的结果值或率以不一样的纬度展开,要把每个维度的指标组合状态异常都变成告警,这是很不现实的,由于压根处理不过来。反而多维度的指标异常能经过平常报表汇总分析就能发现异常,而后经过考核去持续的推进,把异常指标给理顺、优化掉,这是就是高维、降维的打击。
〓 级联分析
网络有一个词叫微突发,网络忽然拥塞了,致使一大波低层次和高层次的告警产生。好比,一个交换机异常,引起下联服务器爆炸式的告警。当此类状况发生,统一告警平台所有不理,作好全局的收敛,以保证监控告警的有效性不受影响。
〓 逆向思惟
不能只看结果数据,要回到原始数据来看。若是要作到逆向思惟可生效,流处理集群在真正加工完,存储的结果数据以前要作最基础的分析,把那部分日志备份到大数据平台作离线的计算,而后结果数据再走正常的流,去作告警也好,异常波动也好,由于不少异常的东西必需要看到原始数据。咱们曾经深刻分析相册上传照片的流水日志,找到了大量异常的用户照片,从而节省了大量的运营成本,这些都是结果数据没法作到的效果。
用高层次的告警 收敛 低层次的告警
同一个集群下既产生了低层次告警,又产生了高层次告警,低层次的告警不用发。
用主调的告警 收敛 被调的告警
模块A调用模块B,B挂了,A受不受影响?从保障业务可用性的角度,若是A没有产生告警,证实该场景只是B的可靠性告警,告警通知开发而不是运维。但若是B挂了,A也产生了告警,运维就应该收到A的告警,B仍是告警给开发。推动告警分级(分值、分级、分人、分通道)的机制,实际上是慢慢把一些运维要作的事情分给开发,运维只看核心的,软件可靠性这些开发来看,可靠性是开发的问题,可用性是运营质量的问题。
用缘由告警 收敛 现象告警:
在业务逻辑的调用联调中,用缘由告警收敛掉现象告警。
用主动触发的活动 屏蔽 对象的告警:
有些告警是因为变动行为引发的,要收敛掉。如正在作升级引起了告警,运维系统要能关联这些事件与告警。有高层次告警、低层次告警,还有运维的活动事件,都把这些集中在一块儿,经过权重的算法,有一个排序决策说告警应该是告这条链路,而不是每个对象都重复告警。
核心指标论
优选指标应该是第一次对外分享,腾讯内部的系统代号叫DLP,是一种经过人工来筛选核心指标的方法,在大数据时代的今天,这种作法稍稍有些不够优雅。如一个模块可能有300-400个指标,这300-400个指标中,包含有低层次的指标,高层次的指标,但当这个模块出问题的时候,这300-400个指标可能都会产生告警,那么应该怎么样收敛呢?假若咱们提早已经对该模块进行过核心指标的人工筛选,这个指标能表明模块最真实的指标。
监控的相关性
监控是相关的,例如300个指标告警了,最核心的那个也会告警,最核心的告警了这300个指标能够不告警,只看核心的就能够了,为何要人首选核心指标,由于暂时没有办法人工识别。
告警分级管理
基于核心的指标对告警作分级,非核心的开发本身收,核心的运维收,作到高规格保障。
下降流式监控的计算量
监控点越多,流的数据越大,整个监控流处理集群规模很大,10万台机器光是流处理的集群都是接近1500台,当运营成本压力大时,也能够重点保障DLP指标的优先计算资源,保证优先给予容量的支持。
还有一个很核心的指标,就是织云用户舆情监控系统。简单介绍这个系统,用户舆情监控顾名思义就是监控用户的声音和反馈。用户的意见反馈来源能够分几部分,一是AppStore的入口,另外一个是App内嵌的反馈入口,还有的就是腾讯的用户反馈论坛,全部的数据都会被聚集到织云舆情监控平台上,而后经过机器学习实现自动分类。系统会把相似“QQ空间打不开”、“QQ空间用很差”等这些词汇进行语意分析和归类,而后统一告警成“QQ空间异常”,时间间隔是15分钟颗粒度,技术细节不重点介绍。
当实现了用户舆情监控后,咱们基本有把握说业务监控是360度无死角的(假设用户都会反馈问题,且不考虑时间因素)。但这套监控先天就有门槛,由于要基于用户的主动反馈行为,同时须要较多的用户反馈数据量,腾讯的用户量基数很大,用户主动反馈的量也很大。舆情监控能够用于监控技术上的质量问题,也能用于监控产品的体验或交互问题。
告警自动化处理的前提是标准化运维体系,在SNG织云监控体系下,全部告警处理会先通过预处理策略,而后再通过统一告警平台的策略和算法,最终才被决策会否发出。
在定义指标状态异常时,咱们的经验是尽可能不要用固定阀值,要用也是动态阀值,不然在监控对象的阀值管理上就会有大量人工管理的成本。其余的推荐策略如图。
咱们在平常运维工做中,面对的监控图形如上图,趋势有小波动、毛刺、无规律的,建议有针对性的套用监控策略,让监控告警更精准。
分享一个织云监控实现进程自愈的案例,流程中的模块在部署时,运维自动化流程就会把进程和端口的信息注册到CMDB中,而后监控服务会读取该模块须要监控的进程与端口信息,并把监控配置发送每台机器的监控Agent上,本地的监控Agent经过定时Ps检测进程和端口的运行状况,若是发生异常,则自动经过标准化的管理找到命令进行启动,若是启动成功便实现了进程自愈。
若是启动不了发给统一告警平台,统一告警平台来决策是否须要告警。当该告警缘由是由于基础设施正在作变动影响时,也不会发出告警。一系列的监控自愈方案都是构建在织云的自动化运维体系中。
◇ 毛刺收敛
在织云监控中,告警策略为了防止毛刺的影响,会将告警策略定义为10分钟发生3次相似的模式。
◇ 同类收敛
一个模块有300个监控实例,产生了300条告警,只要有一条告诉给运维,对于运维同类收敛掉了。
◇ 时间收敛
生产环境中有不少定时的任务,如定时跑量会引发I/O的陡增等异常,这种能够针对性的收敛掉。
◇ 昼夜收敛
有一些告警,在分布式服务的高可用架构下,晚上不须要告警出来,能够等白天才告警,更人性化的管理。
◇ 变动收敛
若是告警时间点有运维的活动,就要收敛掉它。怎么作到的?取决于要把运维的活动都收口在标准化运维的平台,运维平台对生产环节都要将变动日志写入在变动记录中心,而后统一告警系统可以关联变动记录来决策是收敛仍是发出告警。
织云监控构建的质量体系,分红用户端、客户端、服务端、基础端,定义核心指标DLP,而且善用分级告警、分渠道告警,结合短信、QQ、微信和电话等渠道实现告警通知,整个质量监控体系都是围绕预警、自愈、分析、排障碍的能力构建。
织云监控的质量体系,但愿打造一个闭环,可以实现持续反馈、度量、优化,让团队间可以有效地协同工做,更高效更有效。
监控能力
全局地看、须要什么样的监控能力和监控点,同时要理清指标是怎么分层的,哪些指标是重要的?最终把它转成业务看得懂的高层次指标。
业务可用性
运维要看什么,要看可靠性仍是可用性,若是规模不大看可靠性能够,可是在海量的场景下可靠性太细,要抽象核心指标来度量,用于衡量可用性。可靠性则能够经过考核体系去度量与管理,结合QA和老板的力量来推进开发团队的投入与优化。
用户体验
作技术运营会有视角的盲点,会常常迷恋可用性的数据是4个九、5个9,但这并不彻底表明服务质量好,当用户链接不上咱们的服务端时,几个9的意义都不大。这是一个很现实的问题,所以用户体验监控必定要作,由于内部的可用性再高都不表明用户用得好。
技术解决
要有技术解决方案和自动化工具,还要有协助用户排障的工具,以及根因分析的算法平台等等。
统计分析
最终造成可度量的指标、可考核的、可展现的,最好是DIY展现的,监控数据的统计/报表能力服务化,应发挥更多的角色来使用监控数据,而非仅限于运维角色。
持续改进
最终持续的改进不管是架构的问题、代码的问题,仍是由于标准化的问题或非功能落地推动不了的问题,都是须要数字来度量和推进。最好,这个数字要能间接的反馈商业的价值,也就是DevOps提倡的思路。
最后,质量体系确定是副作用于监控能力再去造成这样的闭环,跟开发怎么沟通?跟产品怎么沟通?跟QA、跟客服怎么沟通?要把他们用起来,要把他们关注的点牵引住,最终落到运维想实现的目标上是最好的,这很DevOps,也撬动了老板的思惟,争取从上而下的支持作好质量体系的建设。
咱们常常说DevOps很难落地,为何难?由于咱们老是想要去影响老板,先改变文化再改变工做方法,但这谈何容易。若是是运维和开发能联合起来,先从小的重点的业务抓起,用数听说话体现DevOps能给业务带来的最终的商业价值,说不定会起到事半功倍的效果。