攜程旅行網是國內領先的在線旅遊服務公司,也是國內規模較大的互聯網公司之一。隨着近年來業務的迅猛增加,支撐網站的技術和系統的複雜性和規模也隨之呈跳躍性的攀升。要迎接網站規模和複雜性提高帶來的各類挑戰,運維部門首當其衝。運用新技術,新思惟來應對各類出現的新問題是運維技術人員每天都要面對的工做。本文中將介紹咱們如何應對新場景下的排障工做。編程
問題描述服務器
當運維自動化程度提升後,對於自動化服務的請求數量不斷增加,業務規則和流程的複雜性日益加大。用戶對自動化服務愈來愈依賴,所以對服務標準的要求也在提升,尤爲表如今對服務可靠性的高要求。而另外一方面,開發週期短,外部依賴多,不可控因素多等緣由又使得工具和系統的缺陷在所不免。所以,在出現故障後可以快速定位問題,快速解決問題,把對用戶的影響降到最低,就成了一個直接關係到產品成敗的非功能性需求。網絡
以攜程運維工做流平臺(攜程運維工做流平臺是一個運行攜程核心運維流程,如服務器,網絡,應用等上線/下線/變動等工做流的系統平臺)爲例,一臺服務器的上線流程從提交請求到服務器交付須要控制在半小時以內,而流程由近十個環節,和近十個工具或系統交互,任何一個環節出現微小故障或者不穩定均可能形成流程中斷。所以,須要咱們能儘早發現每一個環節的問題,修復問題。app
傳統策略和它的問題運維
傳統方式下,咱們使用黑盒策略,只監控流程的外在表現。監控流程中的每一個步驟,給流程的每一個步驟設置SLA,一旦SLA超時,就發郵件提醒相關人員及流程組。告警郵件發出後,運維人員須要接收到告警,登陸系統,分析告警,定位診斷,修復故障。編程語言
上述策略存在明顯的問題:ide
1) 時間延誤:運維人員不能及時響應告警,形成響應及處理時間不可控工具
2) 人力成本:人工調查故障須要消耗大量的人力成本,並且經驗積累過程緩慢(由於同一個處理人員處理同一個問題的間隔時間可能比較長,不能快速利用上次的排障經驗)網站
3) 有價值的歷史數據沒有保存,沒法統計告警現狀及解決方案。若是有保存和分類的歷史數據,咱們能夠了解系統的主要故障區域有哪些,以便進行鍼對性的改良設計。spa
4) 引入人爲錯誤:人工處理過程還有可能引入人爲錯誤
解決思路
爲了全面掌握當前系統中故障的分佈狀況,咱們先進行了第一步工做:創建一個排障系統對故障進行自動記錄和分類。咱們在流程平臺中的關鍵環節進行埋點,將最能反映故障和異常的特徵參數隨着故障警告一塊兒輸送出來,在系統中根據這些特徵參數對故障和人工分析的結果進行分類。
通過一段時間的人工處理,統計出以下報表:
從報表中,咱們能夠看到幾個結果:
有很大一部分是無需干預的。
告警數量雖然不少,可是類別卻很少,大量告警能夠被診斷爲同一問題,使用一樣的修復方式。
絕大部分的故障能夠經過告警中帶有的特徵參數進行自動分類或者利用簡單的邏輯進行自動分類 – 自動診斷問題是可行的。
根據告警落地後的分析報告,很清楚地能夠看到自動診斷流程是可行的,而且能夠節省大量人力成本,而且大幅縮短排障時間和消除人爲錯誤。
故障自動診斷方案
既然全部的問題的答案最終都指向自動診斷,那麼咱們來看下自動診斷須要包含哪些功能才能解決咱們的問題。
故障自動診斷流程須要作到以下幾點:
告警發出時當即響應
識別誤報或可自行修復的告警
自動處理誤報及無需干預的告警
對於複雜狀況的告警進行預先診斷並返回結果
有了以上目標,接下來咱們須要選擇合適的工具實現自動診斷流程。
StackStorm介紹
StackStorm (如下簡稱ST2)是時下很是流行的一個自動化引擎,擅長處理自動化流程,支持各類服務及工具的自動化與集成。能夠輕鬆的實現故障診斷和自動修復。所以利用ST2來實現故障自動診斷和修復應該是很是不錯的選擇。
那麼,ST2究竟是什麼,能作什麼,爲何能夠應用到故障智能診斷中。下面作簡單介紹。
ST2是什麼
官方定義:
StackStorm is a platform for integration and automationacross services and tools. It ties together your existing infrastructure andapplication environment so you can more easily automate that environment. Ithas a particular focus on taking actions in response to events.
簡單來講:StackStorm是一個事件驅動的自動化引擎。
ST2優點
攜程以前使用最多的工做流平臺是BMC的產品Remedy。Remedy一樣是一個使用範圍普遍的自動化工做流引擎。和Remedy這種比較龐大的工做流平臺相比,ST2有如下優點:
• 開源,StackStorm Exchange提供了各類各樣的Pack,只要進行簡單的Pack安裝後就可使用。
• 對DevOPS友好,ST2的Action支持任何形式的編程語言,如:Python,Java等,用簡單的標記語言定義流程,如:yaml,簡單易上手。
• 活躍的用戶羣,不少大公司(如:Netflix,AMAZON )都在使用StackStorm
• 平臺,能夠給咱們提供很是有價值的參考。
• 更擅長自動化,故障診斷,自動修復等場景
• 相比Remedy複雜的集羣部署配置,ST2的集羣配置要簡單得多
ST2運行機制
ST2運行機制 (官方)
ST2運行機制(簡單理解)
Sensor接收或者監聽外部Events,觸發Triggers,映射到Rules,在Rules中判斷是否知足Criteria,知足則運行具體的Workflow
實施過程
對ST2有了初步瞭解之後,咱們來看下ST2如何應用到故障自動診斷流程中。
ST2故障自動診斷流程實現
經過Sensor監聽吐到告警系統中的告警,經過不一樣的Rule將告警分發到不一樣的Workflow進行處理
告警系統中包含多個系統(如:ITSM,CMS,…)的告警,ST2的Sensor會按期拉取告警系統中的告警信息,進行初步處理後,分發到Rules,每一個Rule會根據配置的Criteria,判斷是否符合觸發該Rule的條件,若是符合則執行Rule對應的Workflow,不然結束。
ST2故障自動診斷流程優點
ST2故障自動診斷流程解決了以往排障遇到的問題,告警獲得及時響應,同時自動化流程解放了人力,大部分誤報的請求被自動處理掉,對於沒法自動處理的告警,也能夠進行初步的分析,將分析結果以郵件等形式反饋給運維人員,節省人工檢查的時間。自動化流程也避免了人爲錯誤的引入。
除此以外,利用ST2實現自動診斷流程也有它自身的優點:
1) ST2經過統一的Sensor將告警預處理並分發到Rules,不一樣系統的Rule根據條件觸發自動診斷流程。不一樣系統的告警診斷互不干擾,Rules之間,Workflows之間相對獨立,能夠很好的支持橫向擴展。
2) Pack共享,減小重複代碼
3) 自動診斷流程能夠靈活的定義流程中的Action,方便系統告警的擴展
4) 告警處理過程被系統記錄,有利於後期查找分析
ST2故障自動診斷流程實例
ITSM告警自動診斷Workflow
ITSM告警自動診斷Workflow實例
成果和小結
正確的思路+正確的工具=預期的結果。有了ST2自動診斷流程以後,咱們將告警的發出,記錄,診斷,報表各環節所有打通,造成閉環,成爲一套完整的告警自動診斷解決方案。
經過ST2自動診斷流程,通過告警自動診斷,告警結果回寫到告警系統中,得出的報表先後對比數據以下:
ST2自動診斷前
ST2自動診斷後
通過對ST2實現故障自動診斷功能的初步嘗試,ST2初露鋒芒,給咱們帶來的收益也顯而易見。
有了這第一階段的實踐和成果,咱們有更多的信心和經驗來展望下一步:
• 將更多告警自動診斷接入ST2
• 緊接自動診斷,將故障自動修復流程也加入ST2
• 針對常常發生的故障作進一步的根因分析
原文來自:攜程技術保障中心