本帖最后由 adminlily 于 2018-10-9 09:46 编辑
1.DevOps持续反馈关键在于做好运营
这张图概括了整个DevOps的体系,它最后的一个环节,就是做运营和终结的环节。对与运营和终结的理解,我认为应该包含两个纬度,一是这次运维活动的质量运营与终结;二是产品的技术运营和生命周期的终结。今天我们聊下在产品生命周期结束前,我们在技术运营阶段构建的质量体系,以实现持续反馈和优化的目标。
2.产品在运营阶段运维发挥的关键作用
在腾讯运维看来,要做好持续反馈的落地,我们有必要做好3点:
①监控——覆盖率、状态反馈、指标度量
监控要做到360度无死角,业务出现了什么问题都能发现,有了监控的反馈,可以看到实时监控的状态,同时,当指标发生变化的时候也需要看到一些反馈。
②告警——时效性、准确性、触及率
业务越来越复杂,层次越来越多,每一个监控点都会产生数据指标、状态异常,会收到越来越多的告警。未看到或者看到未处理都需要承担责任,因为收到的并非都是误告警。最重要还要有触及率,告警由谁发现与处理?
③运营——RCA、事件管理、报表/考核
问题再三出现、必须从根源优化。通过事件管理机制保证RCA可以落地,最后通过报表和考核去给运维赋予权利推动相关优化活动的开展,包括架构和代码的优化等等。
3.腾讯业务的立体化监控
腾讯的业务按照不同的层级进行管理,从下向上,有服务器层、数据库、逻辑层、中间计算的这一层,有接入层、负载均衡,有我们的机房,DNS服务、客户端、用户端,为了做到无死角,我们规划与建设了很多监控点,美其名曰立体化监控。
在2014年实现用户舆情监控能力后,我们的监控点做到了100%的覆盖(不考虑时间纬度:P),但并不能高枕无忧,因为当监控点做得越多越立体化的360度无死角后,每个最细节的点都会有指标去度量,指标数据爆炸很有可能成为另一个潜在的监控隐患。
4.监控系统大兴土木之后的思考
从而引出,我们迫切需要在运营阶段要解决的难题:
在具体生产过程中会产生运维的事件或者是故障,经常会有死机,以及各层监控告警,这些繁琐的告警、故障,改如何简单化?
举个案例,在一台核心的交换机下,假设其下联有1000台的机器分布到数据层、逻辑层、接入层等等,当这台交换机故障不可用时,由于有立体化监控的存在,每个监控点都会产生大量的告警信息,我们要如何发现这些告警是由于这台核心交换机故障引起的呢?
由于指标采集方式和计数据量的不同,直接导致了监控的流处理效率是不一样的,告警收到的次序不一样,我们要如何排序,如何有效识别优先级?
所以我们今天重点聊下,在监控匮乏的时代我们在积极的搞建设,但是告警泛滥的时候我们要学会过滤。
5.理清监控对象与指标的关系
腾讯业务要监控的对象如左图,按照业务逻辑从下往上,下面是通用的监控层面,网络、服务器、虚拟化还有应用,应用包括了组件的一些监控。
这里举了申请QQ号的业务场景案例,假设用户在PC端发起申请QQ号的业务请求,请求走到WEB前端,而后是注册服务,注册QQ包含了三个信息:个人信息、个性化的设置、增值服务。
基于立体化的监控,假设用组件的监控,无论是QQ还是QQ空间、QQ音乐,都有一些通用的指标可以衡量。如,打开的内存是多少?长连接数是多少?用户进程、吞吐量、流量、CPU,业务层面返回码的分别是什么?省市连接的成功率、请求量的分布是什么?这都与具体的业务逻辑无关。
为了理清海量的监控数据,我们把指标划分成两大类:
越基础的低层次的指标会给让监控系统或者是告警带来的噪音越大的,在规划监控处理或者优化监控策略时,要尽量把低层次的指标自动化处理或收敛掉,尽量以高纬度的指标来告警,因为这才是最核心需要关注的,也是最能反馈业务可用性的。如果某个运维团队还在因低层次指标的故障而疲于救火,是很难全局管控好业务质量的。
高层次的指标,是要能够实时反馈业务的真实状况的。以腾讯经验为例,在海量规模的业务运维场景下,靠人没办法看到单机的层面,必须要看到集群的层面。以织云运维理念举例,CMDB将模块作为统一的运维对象,模块是提供单一业务功能的集群。为什么要管理到集群呢?简单的理解就是把运维对象做抽象,做减法。在SNG业务体量下,有10万+的服务器,抽象成模块后只有一万多个模块,相当于以前面对10万个运维对象的N个指标的告警量,现在面对一万个模块告警量要轻松不少。再把低层次的告警优化掉,可能只面对5000台的告警了。
在高层次指标中,还要有效的区分开单服务的高层次的指标,和业务功能的高层次的指标。我们要先理清两个概念,可靠性和可用性。
可靠性是指单个服务失败的次数,由于单个服务的失败并不一定会影响整个申请QQ号业务功能的可用性的下降,因为微服务自身有失败重试的逻辑,在腾讯的运维经验中,我们会在可靠性和可用性之间做出一定取舍。
低层次的指标虽然比较基础或者可以自动化的解决,但往往是一些高层次指标的根源的问题,善用这些低层次的指标能够帮助运维快速的定位高层次指标的故障原因。
6.看清监控的本质
那么我们可以看清监控的本质,无非就是收集和计算得到一些值和率,通过一定的分析策略或算法,然后把结论以不同的形式展现,最终达到分析状态和发现异常的目标。(把值和率分开是有考虑的,因为值报上来就是一个值了,率是经过一定的计算才变成率的,其实都是把扁平化的信息包装成高层次的指标。)
7.海量运营监控需要强调信息的有效性
立体化的监控,会带来监控指标的爆炸,更有可能带来告警数据的失控,如果不能妥善处理,就会把告警通知演变成“狼来了”,失去了原来警报的效用。要有效的解决告警多、误告警多我们要面对几点:
1.关联分析。把一些真正重要的,需要通过事件、活动、指标提取出来。希望不要把什么事情都告警出来,而过多的消耗告警的诚信。
2.无误告警。怎么样把收敛策略、屏蔽的策略用到极致,必要时可以将两者组合,以达到更强化的效果。
3.持续运营。做好持续运营就是做好跟进,为了保证重要的事情有人跟、有人度量,防止问题再三出现,要在流程上有保障的机制。这样就要求我们有一个质量体系来闭环管理,当监控发现业务架构不合理、代码不合理等问题,能够通过该质量体系,推动业务、开发、运维去将优化措施落地,这也是为了最终的商业价值,这是DevOps的观点。
8.一个多维分析的监控案例
一起看个小案例:扼杀真相的“结论”。
这是手机Qzone的一个多维监控案例。当客户端第一次连接服务端,会有一个心跳包,它是一个命令字,我们以成功率来度量其质量,其实就是考量它维持长连接的可靠性。(如果长连接断开移动客户端连服务端的话要跟基站建立长连接,起码3、4秒耗掉了,好友消息没有办法接收。)如图,一般的功能,我们要求三个9的质量。但是千万别被平均数所蒙骗了,我们一起展开看看真实的情况。
腾讯的服务是多地多活的,有一些分布在规模相对小的AC点,有些分布在比较大的DC点。根据全国用户访问的服务端的点的不同,腾讯内部称之为SET。讲平均数按SET的纬度展开,为什么“无SET”的成功率只有2个9?再展开一下。
按APN(接入方式wifi、4G、3G等)展开,服务质量越来越差,只有两个绿了,你会4G是100%,wifi的环境为什么只有两个9了?
按运营商展开,质量数据更红(差)了,虽然符合预期,但最终的问题还没有找到。
继续按地区展开,发现全是红的,但还是没有头绪。
当再次按地域展开时,展开到浙江地区,我们发现出错的全是安卓的版本。而IOS的版本,全是100%的成功率,共性问题呼之欲出?
倘若我们在第三步的时候直接展开,真相就已经出来了,其实是安卓的某几个版本,可能有这样的隐患,导致我们这个心跳逻辑有问题。
这里说明一个问题,我们对待海量的多维数据的处理,分析方案很重要,在我们规划和建设监控体系时,应该考虑好这点。今天给大家带来了3个小技巧,希望能给大家在做监控数据分析时有帮助。
9.对海量数据的分析需要有技巧
为此我们得出海量监控数据分析的3个小技巧:
为了加快告警信息量的处理往往把监控的协议格式化,格式化处理完了之后进一步的格式化,把很多原始数据的蛛丝马迹丢掉了,导致没有办法查到真正的问题。因为之前做的格式化会让监控数据失真,影响排障的效率,所以上报协议的时候尽可能的保留字段。 10.溯源分析实践简介
先谈谈溯源:
11.根因分析实践简介
再看根因分析:
12.优选指标实践简介
最后,是优选指标DLP:
13.织云用户舆情监控简介
除上述介绍的监控指标外,还有一个很核心的指标,就是织云用户舆情监控系统。简单的介绍这个系统,用户舆情监控顾名思义就是监控用户的声音和反馈。用户的意见反馈来源可以分几部分,一是appstore的入口,另一个是app内嵌的反馈入口,还有的就是腾讯的用户反馈IT运维管理社区,所有的数据都会被汇集到织云舆情监控平台上,然后通过机器学习实现自动分类。系统会把类似“QQ空间打不开”、“QQ空间不用好”等这些词汇进行语意分析和归类,然后统一告警成“QQ空间异常”,时间间隔是15分钟颗粒度。(技术细节可以参考我在2016年在北京TOP100大会上的分享主题。)
当实现了用户舆情监控后,我们基本有把握说业务的监控360度无死角的(假设用户都会反馈问题,且不考虑时间因素:P)。这套监控先天就有门槛,因为要基于用户的主动反馈行为,同时需要较多的用户反馈数据量,因为腾讯的用户量基数很大,用户主动反馈的量也很大。同时,舆情监控可以用于监控技术上的质量问题,也能用于监控产品的体验或交互问题。
14.监控告警的策略与自愈
告警自动化处理的前提是标准化运维体系,在SNG织云监控体系下,所有告警处理会先经过预处理策略,然后再经过统一告警平台的策略和算法,最终才被决策会否发出。
15.常用算法与策略简介
在定义指标状态异常时,我们的经验是尽量不要用固定阀值,要用也是动态阀值,否则在监控对象的阀值管理上就会有大量的人工管理的成本。其他的推荐策略如图。
16.常见监控图形与策略
我们在日常运维工作中,面对的监控的图形就如上图,趋势有小波动、毛刺、无规律的,建议大家有针对性的套用监控策略,让监控告警更精准。
17.监控资源案例
分享一个织云监控实现进程自愈的案例,流程中的模块在部署时,运维自动化流程就会把进程和端口的信息注册到CMDB中,然后监控服务会读取该模块需要监控的进程与端口信息,并把监控配置发送每台机器的监控agent上,本地的监控agent通过定时的ps检测进程和端口的运行情况,如果发生异常,则自动通过标准化的管理找到启动的命令启动,如果启动成功便实现了进程自愈。如果启动不了发给统一告警平台,统一告警平台来决策是否需要告警。当该告警原因是因为基础设施正在做变更影响时,也不会发出告警。一系列的监控自愈的方案都是构建在织云的自动化运维体系中的,详情可以参考以前织云的相关技术分享。
18.常用收敛算法简介
19.织云监控的指标体系
织云监控构建的质量体系,分成用户端、客户端、服务端、基础端,定义核心指标DLP,并且善用分级告警、分渠道告警,结合短信、QQ、微信和电话等渠道实现告警通知,整个质量监控体系都是围绕预警、自愈、分析、排障碍的能力构建。
20.织云监控的质量体系
小结织云监控的质量体系,我们希望打造一个闭环,能够实现持续反馈、度量、优化,让团队间能够有效的协同工作,更高效更有效。
1.监控能力。全局的看、需要什么样的监控能力和监控点,同时要理清指标是怎么分层的,哪些指标是重要的?最终把它转成业务看得懂的高层次指标。
2.业务可用性。运维要看什么,要看可靠性还是可用性,如果规模不大看可靠性可以,但是在海量的场景下可靠性要太细,要抽象核心指标来度量,用于衡量可用性。可靠性则可以通过考核体系去度量与管理,结合QA和老板的力量来推动开发团队的投入与优化。
3.用户体验。做技术运营会有视角的盲点,会经常迷恋可用性的数据是4个9、5个9,但这并不完全代表了我们服务质量好,当用户连接不上我们的服务端时,几个9的意义都不大。这是一个很现实的问题,因此用户体验监控一定要做,因为内部的可用性再高都不代表用户用得好。
技术解决。要有技术解决的方案,要有自动化的工具,有协助用户排障的工具,有根因分析的算法平台等等。
4.统计分析。最终形成可度量的指标、可考核的、可展示的,最好是DIY展示的,监控数据的统计/报表能力服务化,应发挥更多的角色来使用监控数据,而非仅限于运维角色。
5.持续改进。最终持续的改进无论是架构的问题、代码的问题,还是因为标准化的问题或非功能落地推进不了的问题,都是需要数字来度量和推动。最好,这个数字要能间接的反馈商业的价值,也就是DevOps提倡的思路。
最后,质量体系肯定是反作用于监控能力再去形成这样的闭环,跟开发怎么沟通?跟产品怎么沟通?跟QA、跟客服怎么沟通?要把他们用起来,要把他们关注的点牵引住,最终落到运维想实现的目标上是最好的,这很DevOps,也撬动老板的思维,争取从上而下的支持做好质量体系的建设。
我们经常说DevOps很难落地,为什么难?因为我们总是想要去影响老板,先改变文化再改变工作方法,但这谈何容易。如果是运维和开发能联合起来,先从小的重点的业务抓起,用数据说话体现DevOps能给业务带来的最终的商业价值,说不定会起到事半功倍的效果。
原创:梁安定
|