游戲平臺的運維自動化擴展:故障自愈

HilMariano 8年前發布 | 29K 次閱讀 運維技術 運維

馬辰龍,負責某大型網頁游戲平臺的運維開發,專注于運維自動化、監控系統故障自愈研究,擅長Perl開發、正則表達式、日志精確匹配。

網絡游戲是對用戶體驗要求最嚴苛的IT行業之一,任何IT問題造成的業務不穩定,都可能導致玩家的流失,進而影響游戲商的營收。因此,自動化運維對于游戲平臺的重要不言而喻。

相比起對IT基礎設施運維操作的需求,業務則更需要運維提供高質量的業務保障服務,包括對業務架構及部署的持續優化,精細化的游戲健康度管理,以及快速的故障處理服務等。

以下就是由馬辰龍先生分享的工作心得:游戲平臺運維自動化擴展之故障自愈。

大家好,我們用一個例子作為今天分享的開始。

越來越復雜的網絡問題常常會造成各種誤報,導致各種誤報信息的轟炸,出現報警我們一般先看報警內容,這種情況大家都遇到過吧?久而久之就造成了對告警信息的麻木。比如凌晨2點某機房切割網絡抖動,一下過來幾百條告警短信,相信大家不可能一條條的看。

首先我們要解決的是誤報的問題。現在的監控軟件無非就是Zabbix 、Nagios或者 SmokePing 這類,還會有一些單點監控軟件。如果想消除誤報只有多IDC去部署監控服務器,搭建多節點去監控網絡問題,但這就需要使用大量的服務器資源,有沒有什么好的解決方案呢?而且即使我們搭建了大量的監控服務器,又怎么去集中處理告警消息呢?

經過對市面上流行的監控類產品進行廣泛調研,發現云智慧的監控寶可以通過分布式監測節點,多區域同時監控服務器、網站的健康狀況,同時還提供一些國外節點(我們的業務涉及海外)監測海外用戶的業務訪問體驗,而且閾值和監控方式也可以根據業務的實際需求去自定義。

當然作為一個崇尚運維自動化的運維人員,我看中的不僅是這些,更重要的是能夠callback告警消息。如果是因為服務器網絡或者其他原因導致宕機,在收到告警消息之后,讓后端系統能夠根據消息去自動處理是不是會更好呢。給大家看一副圖來理解下:

根據回調信息,事先將其定義成一些規則,當我們匹配到了告警信息中的特定信息后,可以自主切換。

監控寶的URL回調可以在這里設置:

運維監控的發展

過去:Nagios、Cacti、Zabbix 監控單一,對告警后知后覺;

現在:API監控數據聚合、告警信息收斂,自動化感知;

未來:挖掘故障信息,制定故障自愈規則,提前感知。

運維的建設有四個階段,簡稱為四化建設:

第一個階段就是標準化。標準化的意思是把主機名、內網以及配置文件統一起來,如果不統一,后面的東西就無法繼續。沒有一個標準化的環境,腳本是無法寫下去的。

第二個階段是自動化。中小型企業階段都是自動化到平臺化的過渡,平臺化就是把自動化的東西分裝,把功能整合,把數據做聚合,然后放在平臺上來可視化。

第三個階段是平臺化。以后的趨勢是腳本和功能必須是外部化的,這樣新來的一個人才能接手。不用在服務器上跑腳本,還要同下個人交代在哪兒裝。

最后一個階段就是服務化。服務化是指現在云平臺所承載的東西。舉個例子,搭一個redis集群,用戶不需要知道服務器有多少個,因為所提供的NOSQL服務打開后,用戶就可以直接使用了。

所以我們未來要做的就是收集告警信息進行自動化處理,而不是通知運維上線處理。我們要脫離那種每天等著告警信息去處理故障,要主動出擊,不要等到故障了再去處理,而且即使事后處理好了,那么時間成本也是很高的。

再舉個栗子,一個網站在全國各地會解析為多個IP,而且還會有備用IP用來切換(被DDOS的時候,IP被封,我們需要切換)。我們會有一個腳本去檢測這些IP的狀態,當這些IP正常的時候才會切換到這些IP上,如果Ping不通或者有其他故障就不會去切換,否則去切換一個故障IP不是沒有用嗎?

我們在做監控的時候需要考慮很多不可控的因素,因此在寫代碼的時候要首先考慮異常狀態,否則會造成二次故障,這是我們不愿意看到的。當故障IP 2小時內不丟包,我們就把他去掉,下次切換的時候就可以用到,反之亦然。這里提示下,對于這種時間周期可以使用redis,expire 指定ttl。

給大家一張圖來理解下告警信息的分類:

我們要做到能自動化的盡量自動化,不能自動化的我們要讓它半自動,人工介入處理是最后的方案,因為是人就會犯錯,尤其在業務出現異常,操作都是不可控的。

說這么多 ,核心就是需要建立自己的消息處理中心來分析問題,充分利用告警信息,大概的模型可以是這樣:

最后,故障自愈能夠給我們帶來什么

1、非工作時間運維人員處理故障以及響應時間;

2、減少直接的線上操作、避免出現人為原因的二次故障;

3、提高運維人員對故障原因的分析、以及工作積極性;

4、提升運維的自身價值。

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的面太大,這里細節就不多說了。

 

來自:http://mp.weixin.qq.com/s/yFRCeX26VOgIycSq1bL1lg

 

 本文由用戶 HilMariano 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!