攜程旅行網(wǎng)是國(guó)內(nèi)領(lǐng)先的在線旅游服務(wù)公司作箍,也是國(guó)內(nèi)規(guī)模較大的互聯(lián)網(wǎng)公司之一乌叶。隨著近年來業(yè)務(wù)的迅猛增長(zhǎng),支撐網(wǎng)站的技術(shù)和系統(tǒng)的復(fù)雜性和規(guī)模也隨之呈跳躍性的攀升汉矿。要迎接網(wǎng)站規(guī)模和復(fù)雜性提升帶來的各種挑戰(zhàn),運(yùn)維部門首當(dāng)其沖阵苇。運(yùn)用新技術(shù)壁公,新思維來應(yīng)對(duì)各種出現(xiàn)的新問題是運(yùn)維技術(shù)人員天天都要面對(duì)的工作。本文中將介紹我們?nèi)绾螒?yīng)對(duì)新場(chǎng)景下的排障工作绅项。
問題描述
當(dāng)運(yùn)維自動(dòng)化程度提高后紊册,對(duì)于自動(dòng)化服務(wù)的請(qǐng)求數(shù)量不斷增長(zhǎng),業(yè)務(wù)規(guī)則和流程的復(fù)雜性日益加大快耿。用戶對(duì)自動(dòng)化服務(wù)越來越依賴囊陡,因此對(duì)服務(wù)標(biāo)準(zhǔn)的要求也在提高,尤其表現(xiàn)在對(duì)服務(wù)可靠性的高要求润努。而另一方面关斜,開發(fā)周期短示括,外部依賴多铺浇,不可控因素多等原因又使得工具和系統(tǒng)的缺陷在所難免。因此垛膝,在出現(xiàn)故障后能夠快速定位問題鳍侣,快速解決問題,把對(duì)用戶的影響降到最低吼拥,就成了一個(gè)直接關(guān)系到產(chǎn)品成敗的非功能性需求倚聚。
以攜程運(yùn)維工作流平臺(tái)(攜程運(yùn)維工作流平臺(tái)是一個(gè)運(yùn)行攜程核心運(yùn)維流程,如服務(wù)器凿可,網(wǎng)絡(luò)惑折,應(yīng)用等上線/下線/變更等工作流的系統(tǒng)平臺(tái))為例,一臺(tái)服務(wù)器的上線流程從提交請(qǐng)求到服務(wù)器交付需要控制在半小時(shí)之內(nèi)枯跑,而流程由近十個(gè)環(huán)節(jié)惨驶,和近十個(gè)工具或系統(tǒng)交互,任何一個(gè)環(huán)節(jié)出現(xiàn)微小故障或者不穩(wěn)定都可能造成流程中斷敛助。因此粗卜,需要我們能盡早發(fā)現(xiàn)每個(gè)環(huán)節(jié)的問題,修復(fù)問題纳击。
傳統(tǒng)策略和它的問題
傳統(tǒng)方式下续扔,我們使用黑盒策略,只監(jiān)控流程的外在表現(xiàn)焕数。監(jiān)控流程中的每個(gè)步驟纱昧,給流程的每個(gè)步驟設(shè)置SLA,一旦SLA超時(shí)堡赔,就發(fā)郵件提醒相關(guān)人員及流程組识脆。告警郵件發(fā)出后,運(yùn)維人員需要接收到告警,登錄系統(tǒng)存璃,分析告警仑荐,定位診斷,修復(fù)故障纵东。
上述策略存在明顯的問題:
1) ? ?時(shí)間延誤:運(yùn)維人員不能及時(shí)響應(yīng)告警粘招,造成響應(yīng)及處理時(shí)間不可控
2) ? ?人力成本:人工調(diào)查故障需要消耗大量的人力成本,而且經(jīng)驗(yàn)積累過程緩慢(因?yàn)橥粋€(gè)處理人員處理同一個(gè)問題的間隔時(shí)間可能比較長(zhǎng)偎球,不能快速利用上次的排障經(jīng)驗(yàn))
3) ? ?有價(jià)值的歷史數(shù)據(jù)沒有保存洒扎,無法統(tǒng)計(jì)告警現(xiàn)狀及解決方案。如果有保存和分類的歷史數(shù)據(jù)衰絮,我們可以了解系統(tǒng)的主要故障區(qū)域有哪些袍冷,以便進(jìn)行針對(duì)性的改良設(shè)計(jì)。
4) ? ?引入人為錯(cuò)誤:人工處理過程還有可能引入人為錯(cuò)誤
解決思路
為了全面掌握當(dāng)前系統(tǒng)中故障的分布情況猫牡,我們先進(jìn)行了第一步工作:建立一個(gè)排障系統(tǒng)對(duì)故障進(jìn)行自動(dòng)記錄和分類胡诗。我們?cè)诹鞒唐脚_(tái)中的關(guān)鍵環(huán)節(jié)進(jìn)行埋點(diǎn),將最能反映故障和異常的特征參數(shù)隨著故障警告一起輸送出來淌友,在系統(tǒng)中根據(jù)這些特征參數(shù)對(duì)故障和人工分析的結(jié)果進(jìn)行分類煌恢。
經(jīng)過一段時(shí)間的人工處理,統(tǒng)計(jì)出如下報(bào)表:
從報(bào)表中震庭,我們可以看到幾個(gè)結(jié)果:
有很大一部分是無需干預(yù)的瑰抵。
告警數(shù)量雖然很多,但是類別卻不多器联,大量告警可以被診斷為同一問題二汛,使用同樣的修復(fù)方式。
絕大部分的故障可以通過告警中帶有的特征參數(shù)進(jìn)行自動(dòng)分類或者利用簡(jiǎn)單的邏輯進(jìn)行自動(dòng)分類 – 自動(dòng)診斷問題是可行的拨拓。
根據(jù)告警落地后的分析報(bào)告肴颊,很清楚地可以看到自動(dòng)診斷流程是可行的,并且可以節(jié)省大量人力成本千元,并且大幅縮短排障時(shí)間和消除人為錯(cuò)誤苫昌。
故障自動(dòng)診斷方案
既然所有的問題的答案最終都指向自動(dòng)診斷,那么我們來看下自動(dòng)診斷需要包含哪些功能才能解決我們的問題幸海。
故障自動(dòng)診斷流程需要做到如下幾點(diǎn):
告警發(fā)出時(shí)立即響應(yīng)
識(shí)別誤報(bào)或可自行修復(fù)的告警
自動(dòng)處理誤報(bào)及無需干預(yù)的告警
對(duì)于復(fù)雜情況的告警進(jìn)行預(yù)先診斷并返回結(jié)果
有了以上目標(biāo)祟身,接下來我們需要選擇合適的工具實(shí)現(xiàn)自動(dòng)診斷流程。
StackStorm介紹
StackStorm (以下簡(jiǎn)稱ST2)是時(shí)下非常流行的一個(gè)自動(dòng)化引擎物独,擅長(zhǎng)處理自動(dòng)化流程袜硫,支持各種服務(wù)及工具的自動(dòng)化與集成〉猜ǎ可以輕松的實(shí)現(xiàn)故障診斷和自動(dòng)修復(fù)婉陷。因此利用ST2來實(shí)現(xiàn)故障自動(dòng)診斷和修復(fù)應(yīng)該是非常不錯(cuò)的選擇帚称。
那么,ST2到底是什么秽澳,能做什么闯睹,為什么可以應(yīng)用到故障智能診斷中。下面做簡(jiǎn)單介紹担神。
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.
簡(jiǎn)單來說:StackStorm是一個(gè)事件驅(qū)動(dòng)的自動(dòng)化引擎楼吃。
ST2優(yōu)勢(shì)
攜程之前使用最多的工作流平臺(tái)是BMC的產(chǎn)品Remedy。Remedy同樣是一個(gè)使用范圍廣泛的自動(dòng)化工作流引擎妄讯。和Remedy這種比較龐大的工作流平臺(tái)相比孩锡,ST2有以下優(yōu)勢(shì):
? 開源,StackStorm Exchange提供了各種各樣的Pack亥贸,只要進(jìn)行簡(jiǎn)單的Pack安裝后就可以使用躬窜。
? 對(duì)DevOPS友好,ST2的Action支持任何形式的編程語言炕置,如:Python荣挨,Java等,用簡(jiǎn)單的標(biāo)記語言定義流程讹俊,如:yaml垦沉,簡(jiǎn)單易上手。
? 活躍的用戶群仍劈,很多大公司(如:Netflix,AMAZON )都在使用StackStorm
? 平臺(tái)寡壮,可以給我們提供非常有價(jià)值的參考贩疙。
? 更擅長(zhǎng)自動(dòng)化,故障診斷况既,自動(dòng)修復(fù)等場(chǎng)景
? 相比Remedy復(fù)雜的集群部署配置这溅,ST2的集群配置要簡(jiǎn)單得多
ST2運(yùn)行機(jī)制
ST2運(yùn)行機(jī)制 (官方)
ST2運(yùn)行機(jī)制(簡(jiǎn)單理解)
Sensor接收或者監(jiān)聽外部Events,觸發(fā)Triggers棒仍,映射到Rules悲靴,在Rules中判斷是否滿足Criteria,滿足則運(yùn)行具體的Workflow
實(shí)施過程
對(duì)ST2有了初步了解以后莫其,我們來看下ST2如何應(yīng)用到故障自動(dòng)診斷流程中癞尚。
ST2故障自動(dòng)診斷流程實(shí)現(xiàn)
通過Sensor監(jiān)聽吐到告警系統(tǒng)中的告警,通過不同的Rule將告警分發(fā)到不同的Workflow進(jìn)行處理
告警系統(tǒng)中包含多個(gè)系統(tǒng)(如:ITSM乱陡,CMS浇揩,…)的告警,ST2的Sensor會(huì)定期拉取告警系統(tǒng)中的告警信息憨颠,進(jìn)行初步處理后胳徽,分發(fā)到Rules积锅,每個(gè)Rule會(huì)根據(jù)配置的Criteria,判斷是否符合觸發(fā)該Rule的條件养盗,如果符合則執(zhí)行Rule對(duì)應(yīng)的Workflow缚陷,否則結(jié)束。
ST2故障自動(dòng)診斷流程優(yōu)勢(shì)
ST2故障自動(dòng)診斷流程解決了以往排障遇到的問題往核,告警得到及時(shí)響應(yīng)蹬跃,同時(shí)自動(dòng)化流程解放了人力,大部分誤報(bào)的請(qǐng)求被自動(dòng)處理掉铆铆,對(duì)于無法自動(dòng)處理的告警蝶缀,也可以進(jìn)行初步的分析,將分析結(jié)果以郵件等形式反饋給運(yùn)維人員薄货,節(jié)省人工檢查的時(shí)間翁都。自動(dòng)化流程也避免了人為錯(cuò)誤的引入。
除此之外谅猾,利用ST2實(shí)現(xiàn)自動(dòng)診斷流程也有它自身的優(yōu)勢(shì):
1) ? ?ST2通過統(tǒng)一的Sensor將告警預(yù)處理并分發(fā)到Rules柄慰,不同系統(tǒng)的Rule根據(jù)條件觸發(fā)自動(dòng)診斷流程。不同系統(tǒng)的告警診斷互不干擾税娜,Rules之間坐搔,Workflows之間相對(duì)獨(dú)立,可以很好的支持橫向擴(kuò)展敬矩。
2) ? ?Pack共享概行,減少重復(fù)代碼
3) ? ?自動(dòng)診斷流程可以靈活的定義流程中的Action,方便系統(tǒng)告警的擴(kuò)展
4) ? ?告警處理過程被系統(tǒng)記錄弧岳,有利于后期查找分析
ST2故障自動(dòng)診斷流程實(shí)例
ITSM告警自動(dòng)診斷Workflow
ITSM告警自動(dòng)診斷Workflow實(shí)例
成果和小結(jié)
正確的思路+正確的工具=預(yù)期的結(jié)果凳忙。有了ST2自動(dòng)診斷流程之后,我們將告警的發(fā)出禽炬,記錄涧卵,診斷,報(bào)表各環(huán)節(jié)全部打通腹尖,形成閉環(huán)柳恐,成為一套完整的告警自動(dòng)診斷解決方案。
通過ST2自動(dòng)診斷流程热幔,經(jīng)過告警自動(dòng)診斷乐设,告警結(jié)果回寫到告警系統(tǒng)中,得出的報(bào)表前后對(duì)比數(shù)據(jù)如下:
ST2自動(dòng)診斷前
ST2自動(dòng)診斷后
經(jīng)過對(duì)ST2實(shí)現(xiàn)故障自動(dòng)診斷功能的初步嘗試断凶,ST2初露鋒芒伤提,給我們帶來的收益也顯而易見。
有了這第一階段的實(shí)踐和成果认烁,我們有更多的信心和經(jīng)驗(yàn)來展望下一步:
? ?將更多告警自動(dòng)診斷接入ST2
? ?緊接自動(dòng)診斷肿男,將故障自動(dòng)修復(fù)流程也加入ST2
? ?針對(duì)經(jīng)常發(fā)生的故障做進(jìn)一步的根因分析
原文來自:攜程技術(shù)保障中心