?藍(lán)鯨??作者?故障自愈產(chǎn)品經(jīng)理
以產(chǎn)品設(shè)計(jì)理念剖析企業(yè)建設(shè)故障自動(dòng)化處理方案的思路
人工處理告警,一直是運(yùn)維心中的痛。大年初一拜年泳炉、結(jié)婚、和老婆孩子外出過(guò)周末等美好時(shí)光嚎杨,作為運(yùn)維的你胡桃,好像一直心系IT系統(tǒng),保持與筆記本的安全距離磕潮。
為什么這么多年過(guò)去了翠胰,還是這么苦逼,不是說(shuō)運(yùn)維行業(yè)轉(zhuǎn) AIOps了自脯,我竟然還在手工處理告警之景,我該怎么辦?
今天就和大家聊聊實(shí)現(xiàn)故障自愈要攻克的3個(gè)問(wèn)題膏潮,以及獻(xiàn)上開(kāi)箱即用的方案锻狗。
1. 故障自愈的基本流程
自動(dòng)化的要點(diǎn)是什么?把人的經(jīng)驗(yàn)抽象焕参、固化為程序處理轻纪,工業(yè)(第3次工業(yè)革命)或互聯(lián)網(wǎng)都是如此。
舉個(gè)例子叠纷,磁盤(pán)出現(xiàn)告警刻帚,運(yùn)維首先想到的是登陸服務(wù)器清理磁盤(pán)。
(人工處理告警的流程)
接下來(lái)涩嚣,我們拆解背后的邏輯崇众。
1.1 抽象告警處理流程
1)?拉取磁盤(pán)告警
2) 編寫(xiě)磁盤(pán)清理的腳本或作業(yè)任務(wù)
3) 設(shè)計(jì)模塊:把拉取到的磁盤(pán)告警,與調(diào)用腳本的模塊串起來(lái)
?(故障自愈流程 簡(jiǎn)化版V1)
1.2 通過(guò)CMDB做資源清洗
不同模塊的磁盤(pán)清理方案不一樣航厚,如何解決呢顷歌?
這時(shí)需要引入CMDB(設(shè)備、人幔睬、業(yè)務(wù)的映射關(guān)系)眯漩,通過(guò)CMDB把IP?清洗為?模塊,這樣就解決了接入層 和 邏輯層麻顶、存儲(chǔ)層的告警使用對(duì)應(yīng)的磁盤(pán)清理方案赦抖。
(故障自愈流程 簡(jiǎn)化版V2)
1.3 對(duì)接企業(yè)內(nèi)部網(wǎng)關(guān)
故障自愈可能會(huì)處理失敗,這時(shí)需要通知用戶(hù)澈蚌。故障自愈的處理方式除了調(diào)用作業(yè)外摹芙,還可能需要調(diào)用企業(yè)內(nèi)部的網(wǎng)關(guān),比如服務(wù)器重啟宛瞄、申請(qǐng)服務(wù)器等浮禾。
使用PaaS層的ESB是一種解決思路,通過(guò)ESB封裝企業(yè)內(nèi)部網(wǎng)關(guān)份汗,解決權(quán)限校驗(yàn)盈电、頻率控制、訪(fǎng)問(wèn)統(tǒng)計(jì)杯活、路由分發(fā)以及自助接入等功能匆帚,不要直接調(diào)用裸接口了。
(故障自愈的通知方案)
經(jīng)過(guò)這一輪的探索旁钧,故障自愈的架構(gòu)就是下面這個(gè)樣子吸重。
(故障自愈的流程)
1.4 對(duì)接企業(yè)內(nèi)部監(jiān)控產(chǎn)品
等等互拾,好像還沒(méi)說(shuō)如何對(duì)接企業(yè)內(nèi)部的監(jiān)控產(chǎn)品,以Zabbix嚎幸、Open-Falcon為例颜矿。
1.4.1 對(duì)接Zabbix
《當(dāng)Zabbix遇見(jiàn)故障自愈》介紹了拉取Zabbix告警的方案,通過(guò) ActionScript 調(diào)用腳本嫉晶,把 Zabbix 告警推送至自愈的告警拉取模塊骑疆。
推送(或叫回調(diào))可以保證告警拉取的實(shí)時(shí)性。
(Zabbix推送告警示例)
(Zabbix調(diào)用推送告警的腳本)
對(duì)接Zabbix 的落地案例可以參考陳亮撰寫(xiě)的那些年我們想做的無(wú)人值守?替废。
除Zabbix外箍铭,Open-Falcon在國(guó)內(nèi)的社區(qū)熱度也不錯(cuò),所以也介紹拉取其告警的方案椎镣。
1.4.2 對(duì)接Open-falcon
方案類(lèi)似Zabbix诈火,不過(guò)Open-falcon 直接提供了callback功能,簡(jiǎn)化了流程衣陶。
(Open-Falcon配置Callback地址)
收到了Open-Falcon 推送的告警后柄瑰,解析對(duì)應(yīng)的字段即可。
如果企業(yè)內(nèi)部的CMDB以IP來(lái)標(biāo)識(shí)主機(jī)剪况,需要再做一層轉(zhuǎn)換教沾,因?yàn)镺pen-Falcon 的資源標(biāo)識(shí)endpoint默認(rèn)是主機(jī)名,那么就需要使用CMDB的自動(dòng)發(fā)現(xiàn)功能自動(dòng)上報(bào)主機(jī)名译断,同時(shí)提供把主機(jī)名清洗為IP的功能授翻。
下面是Nginx模塊磁盤(pán)告警的自愈示例,匹配N(xiāo)ginx模塊的磁盤(pán)清理套餐孙咪,清理Nginx模塊的日志文件堪唐,整個(gè)過(guò)程不到30秒。
(磁盤(pán)告警的自愈示例)
2. 故障自愈的兩面性
故障自動(dòng)處理就像一把刀翎蹈,有其兩面性淮菠。
因?yàn)橐_保告警的真實(shí)性,一旦把假告警也自動(dòng)處理了荤堪,就很悲催了…
舉個(gè)例子合陵。網(wǎng)絡(luò)波動(dòng),批量出現(xiàn)PING告警澄阳。實(shí)際上服務(wù)器運(yùn)行正常拥知,這時(shí)你把服務(wù)器都重啟了,那就GG了碎赢。
如何解決呢低剔?分析事物的規(guī)律。
批量出現(xiàn)告警,那可以在告警拉取模塊后面襟齿,增加一個(gè)收斂模塊姻锁。
比如,在X時(shí)間內(nèi)出現(xiàn)Y個(gè)告警蕊唐,打電話(huà)給運(yùn)維審批屋摔。
X時(shí)間內(nèi)同一主機(jī)出現(xiàn)使用相同套餐的告警,則收斂時(shí)間窗口中后面的告警則跳過(guò)替梨,比如同時(shí)收到進(jìn)程告警 和 端口告警,就不用拉2次進(jìn)程了装黑。
還有就是副瀑,原有監(jiān)控系統(tǒng)沒(méi)有收斂能力,那么可以借用這個(gè)功能來(lái)做告警匯總恋谭,因?yàn)槭諗窟壿嬕粯涌匪皇鞘諗康奶幚矸绞接胁町悺?/p>
3. 復(fù)雜告警的處理方案 - 組合套餐
上面提到的技術(shù)方案是用來(lái)處理邏輯簡(jiǎn)單的告警,那么故障替換這種復(fù)雜的場(chǎng)景如何解決呢疚颊?
舉個(gè)例子狈孔,A模塊是重要模塊,出現(xiàn)PING不可達(dá)告警材义,首先要校驗(yàn)A模塊是否真的故障均抽,如果真的故障,接下來(lái)是從資源池中獲取備機(jī) … 故障替換等等其掂,期間每個(gè)環(huán)節(jié)都有可能出錯(cuò)油挥,那就要考慮異常分支的場(chǎng)景。
樹(shù)結(jié)構(gòu)可以解決該問(wèn)題款熬,二叉樹(shù)足以滿(mǎn)足大部分場(chǎng)景(成功深寥、失敗兩種分支)。
( 組合套餐的示例)
上面這張圖贤牛,是一個(gè)自愈處理方案惋鹅,可以稱(chēng)之為組合套餐。
這里同時(shí)引入了原子的概念殉簸,通過(guò)組裝原子來(lái)滿(mǎn)足各種需求場(chǎng)景闰集, 和資源編排說(shuō)的是同一個(gè)理兒。
注:如果你想使用三叉樹(shù)喂链,其實(shí)可以把組合套餐也作為一個(gè)原子套餐(節(jié)點(diǎn))返十。
4. 故障自愈的技術(shù)架構(gòu)
經(jīng)過(guò)前面對(duì)故障自愈的基本流程、故障自愈的兩面性椭微、復(fù)雜的故障處理方案的層層梳理洞坑,我們有了一張故障自愈的技術(shù)架構(gòu)圖。
相信這次以經(jīng)行業(yè)驗(yàn)證的故障自愈做技術(shù)剖析蝇率,能對(duì)大家建設(shè)企業(yè)內(nèi)部的故障自動(dòng)處理方案提供參考思路迟杂。
5. 收尾
當(dāng) AIOps大行其道的時(shí)候刽沾,我們需要克制,優(yōu)先解決主要矛盾排拷,而不是構(gòu)建高大上的空中樓閣侧漓。
如同產(chǎn)品路線(xiàn)圖,優(yōu)先解決可用性监氢,接下來(lái)是體驗(yàn)布蔗,最后才是可擴(kuò)展性和生態(tài),依次落地浪腐。
(產(chǎn)品需求模型 by 騰訊8分鐘產(chǎn)品課)
最后纵揍,希望廣大的運(yùn)維兄弟姐妹能盡早脫離原始運(yùn)維的苦海,抓住行業(yè)發(fā)展趨勢(shì)议街,掌握核心技術(shù)泽谨,在變革中實(shí)現(xiàn)自身價(jià)值!