游戏平台运维自动化扩展之故障自愈

马辰龙,负责某大型网页游戏平台的运维开发,专一于运维自动化、监控系统故障自愈研究,擅长Perl开发、正则表达式、日志精确匹配。
 java

图片1.png 

网络游戏是对用户体验要求最严苛的IT行业之一,任何IT问题形成的业务不稳定,均可能致使玩家的流失,进而影响游戏商的营收。所以,自动化运维对于游戏平台的重要不言而喻,各类DevOps产品和自动化运维技术方案不断涌现,包含发布变动、容量伸缩、故障自愈等多种场景的游戏运维技术日趋成熟,这些改变都让运维工做流程愈来愈简化。
然而流程的简化并不意味着运维变得容易,偏偏相反随着云计算、移动互联网的普遍应用,游戏业务对运维的要求水涨船高!相比起对IT基础设施运维操做的需求,业务侧更须要运维提供高质量的业务保障服务,包括对业务架构及部署的持续优化,精细化的游戏健康度管理,以及快速的故障处理服务等。
如下就是由马辰龙先生为咱们分享他在平常工做中总结的《游戏平台运维自动化扩展之故障自愈》:
你们好,咱们用一个例子做为今天分享的开始,愈来愈复杂的网络问题经常会形成各类误报,致使各类误报信息的轰炸,出现报警咱们通常先看报警内容,这种状况你们都遇到过吧?长此以往就形成了对告警信息的麻木。好比凌晨2点某机房切割网络抖动,一下过来几百条告警短信,相信你们不可能一条条的看。
首先咱们要解决的是误报的问题。如今的监控软件无非就是Zabbix 、Nagios或者 SmokePing 这类,还会有一些单点监控软件。若是想消除误报只有多IDC去部署监控服务器,搭建多节点去监控网络问题,但这就须要使用大量的服务器资源,有没有什么好的解决方案呢?并且即便咱们搭建了大量的监控服务器,又怎么去集中处理告警消息呢?
通过对市面上流行的监控类产品进行普遍调研,发现云智慧的监控宝能够经过分布式监测节点,多区域同时监控服务器、网站的健康情况,同时还提供一些国外节点(咱们的业务涉及海外)监测海外用户的业务访问体验,并且阈值和监控方式也能够根据业务的实际需求去自定义。
固然做为一个崇尚运维自动化的运维人员,我看中的不只是这些,更重要的是可以callback告警消息。若是是由于服务器网络或者其余缘由致使宕机,在收到告警消息以后,让后端系统可以根据消息去自动处理是否是会更好呢。给你们看一副图来理解下:
 ios

图片2.png 



根据回调信息,事先将其定义成一些规则,当咱们匹配到了告警信息中的特定信息能够自主切换。
监控宝的URL回调能够在这里设置:
 正则表达式

图片3.png 



运维监控的发展: 
过去:Nagios、Cacti、Zabbix 监控单一,对告警后知后觉;
如今:API监控数据聚合、告警信息收敛,自动化感知;
将来:挖掘故障信息,制定故障自愈规则,提早感知。
 redis

图片4.png



运维的建设有四个阶段,简称为四化建设:第一个阶段就是标准化。标准化的意思是把主机名、内网以及配置文件统一块儿来,若是不统一,后面的东西就没法继续。没有一个标准化的环境,脚本是没法写下去的。第二个阶段是自动化。中小型企业阶段都是自动化到平台化的过渡,平台化就是把自动化的东西分装,把功能整合,把数据作聚合,而后放在平台上来可视化。第三个阶段是平台化。之后的趋势是脚本和功能必须是外部化的,这样新来的一我的才能接手。不用在服务器上跑脚本,还要同下我的交代在哪儿装。最后一个阶段就是服务化。服务化是指如今云平台所承载的东西。举个例子,搭一个redis集群,用户不须要知道服务器有多少个,由于所提供的NOSQL服务打开后,用户就能够直接使用了。
因此咱们将来要作的就是收集告警信息进行自动化处理,而不是通知运维上线处理。咱们要脱离那种天天等着告警信息去处理故障,要主动出击,不要等到故障了再去处理,并且即便过后处理好了,那么时间成本也是很高的。
再举个栗子,一个网站在全国各地会解析为多个IP,并且还会有备用IP用来切换(被DDOS的时候,IP被封,咱们须要切换)。咱们会有一个脚本去检测这些IP的状态,当这些IP正常的时候才会切换到这些IP上,若是Ping不通或者有其余故障就不会去切换,不然去切换一个故障IP不是没有用吗?
咱们在作监控的时候须要考虑不少不可控的因素,所以在写代码的时候要首先考虑异常状态,不然会形成二次故障,这是咱们不肯意看到的。当故障IP 2小时内不丢包,咱们就把他去掉,下次切换的时候就能够用到,反之亦然。这里提示下,对于这种时间周期可使用redis,expire 指定ttl。
给你们一张图来理解下告警信息的分类:
 后端

图片5.png


咱们要作到能自动化的尽可能自动化,不能自动化的咱们要让它半自动,人工介入处理是最后的方案,由于是人就会犯错,尤为在业务出现异常,操做都是不可控的。
说这么多 ,核心就是须要创建本身的消息处理中心来分析问题,充分利用告警信息,大概的模型能够是这样:
 api

图片6.png



最后,故障自愈可以给咱们带来什么:
一、非工做时间运维人员处理故障以及响应时间;
二、减小直接的线上操做、避免出现人为缘由的二次故障;
三、提升运维人员对故障缘由的分析、以及工做积极性;
四、提高运维的自身价值。
Q&A
问:如何作告警收敛?
答:好比咱们以一台服务器为单位,每分钟的告警信息分为系统和网络告警,统一处理。(固然也能以收件人,业务关联为单位。)
问:对于传染型的故障,不知道有没有什么好的方案呢,就是反复访问一个问题致使骨牌性的反应。
答:好比网站报了500错误,那么咱们发现500错误的时候,在告警的时候可让它去错误日志里收集关于相同IP的error,一块儿发送。
问:怎么自动化的?
答:减小咱们去服务器查日志的时间,频繁的grep xxx。
问:百度爬虫并发大没抗住,怎么自动化处理?
答:首先你是想让它爬仍是不爬,不爬就匹配useragent。
问:大家故障自愈是哪些状况?是经过日志?仍是api url监控?经过特定故障返回特定值??由于java的日志各类状况都有。
答:面对DDOS流量型攻击,经过分析url使用防火墙封禁,首先是日志。
问:DDOS怎么分析url??有什么特征吗??
答:DDOS是没有日志的,能够经过网络告警去触发,CC攻击分析你的URL,规则能够本身去定义,有些注入、刷API等经过正则去匹配。运维人员要利用好日志,全部的问题都是从日志中分析行为发现的。
问:咱们上了ELK,Java除了假死自动重启,好像没什么自愈的。
答:ELK可使用API拉日志,去分析业务的运行状态,ELK的面太大,这里细节就很少说了。
 服务器

二维码.png


云智慧是业务运维解决方案服务商,旗下产品监控宝(www.jiankongbao.com)、透视宝(www.toushibao.com)、压测宝(www.yacebao.com),已累计为电商、移动互联网、广告传媒、在线游戏、教育医疗、金融证券、政企等行业的几十万用户提供了一站式的应用性能监控、管理及测试服务。网络

转载于:https://my.oschina.net/cloudwise/blog/791999架构