基于Zabbix和Jenkins的運(yùn)維可視化自動(dòng)故障處理方式研究與設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
隨著分布式系統(tǒng)以及x86服務(wù)器的大規(guī)模運(yùn)營(yíng),系統(tǒng)所涉及的主機(jī)越來(lái)越多,應(yīng)用的服務(wù)器類(lèi)型也越來(lái)越多,使得業(yè)務(wù)復(fù)雜度逐步提升,運(yùn)維人員的工作強(qiáng)度和壓力也越來(lái)越大。為解決這一問(wèn)題,提升維護(hù)工作的自動(dòng)化水平勢(shì)在必行。在系統(tǒng)日常維護(hù)工作中,故障處理是最常見(jiàn)的問(wèn)題,對(duì)常見(jiàn)故障進(jìn)行自動(dòng)化處理,能夠在極大程度上減輕維護(hù)人員的壓力。本文將基于Zabbix和Jenkins,研究并設(shè)計(jì)一個(gè)自動(dòng)化故障處理方案。
!$0ZZab和ienkans簡(jiǎn)介
Zabbix是開(kāi)源分布式監(jiān)控方案之一,具有良好的可用性和可靠性,能夠?qū)ο到y(tǒng)中的機(jī)器磁盤(pán)、CPU、內(nèi)存以及網(wǎng)絡(luò)狀況進(jìn)行實(shí)時(shí)監(jiān)控并進(jìn)行可視化呈現(xiàn)。相對(duì)于其他的開(kāi)源監(jiān)控軟件,如Nagios、Cacti等,Zabbix具有更好的中文兼容性以及更好的文檔支持[l]。
Jenkins是一個(gè)開(kāi)源軟件,其主要目的是為了對(duì)于持續(xù)的重復(fù)性工作進(jìn)行可視化展現(xiàn)[2],旨在提供一個(gè)開(kāi)放易用的軟件平臺(tái)。Jenkins具有豐富的插件,包括ssH、0racle、HTTPP0sT等,提供了易于擴(kuò)展的能力,為配置化操作提供了便利[3]。
2系統(tǒng)設(shè)計(jì)總體介紹
系統(tǒng)總體設(shè)計(jì)流程如圖1所示。
故障自動(dòng)化處理是通過(guò)使用Zabbix對(duì)主機(jī)進(jìn)行監(jiān)控,配合Zabbix配置的觸發(fā)器進(jìn)行動(dòng)作觸發(fā)、告警,并通過(guò)調(diào)用在Jenkins配置的任務(wù)而實(shí)現(xiàn)的,并且可以運(yùn)用短信進(jìn)行可視化追蹤呈現(xiàn)。整體設(shè)計(jì)包括4個(gè)模塊:服務(wù)器監(jiān)控模塊、告警觸發(fā)模塊、預(yù)案調(diào)用模塊、可視化配置操作模塊。
2.!服務(wù)器監(jiān)控模塊
服務(wù)器監(jiān)控模塊主要用來(lái)采集每臺(tái)生產(chǎn)機(jī)器的信息,是整個(gè)監(jiān)控系統(tǒng)的核心。利用部署在每臺(tái)生產(chǎn)機(jī)器上的ZabbixClient客戶(hù)端對(duì)主機(jī)的信息進(jìn)行采集,信息包括內(nèi)存、CPU、磁盤(pán)、網(wǎng)絡(luò)狀況以及服務(wù)運(yùn)行情況等。
監(jiān)控平臺(tái)通過(guò)服務(wù)器主機(jī)IP或者主機(jī)名對(duì)于不同的主機(jī)進(jìn)行區(qū)分,實(shí)時(shí)對(duì)系統(tǒng)上報(bào)的信息進(jìn)行處理,同時(shí)進(jìn)行數(shù)據(jù)存儲(chǔ)和展示。
2.2告警觸發(fā)模塊
告警觸發(fā)模塊是通過(guò)配置在Zabbix主機(jī)中的觸發(fā)器和閥值來(lái)實(shí)現(xiàn)的,例如,當(dāng)CPU可利用率高于閥值時(shí)就會(huì)進(jìn)行告警:內(nèi)存剩余可利用率低于閥值觸發(fā)告警。對(duì)于一個(gè)具有較小容量的磁盤(pán)來(lái)說(shuō),80%的磁盤(pán)利用率已經(jīng)具有很高的風(fēng)險(xiǎn)性了,而對(duì)于一個(gè)較大空間的磁盤(pán)而言,l0%的磁盤(pán)剩余足夠安全運(yùn)行很長(zhǎng)時(shí)間。因此,對(duì)于不同的指標(biāo)、不同的業(yè)務(wù)場(chǎng)景,需要配置不同的觸發(fā)器以及閥值。服務(wù)器監(jiān)控模塊中的數(shù)據(jù)一旦滿(mǎn)足觸發(fā)器條件,觸發(fā)器即會(huì)工作,觸發(fā)相應(yīng)的動(dòng)作,Zabbix提供了多種操作方式,如Curl調(diào)用、ssH命令執(zhí)行以及短信郵件等操作。
2.3預(yù)案調(diào)用模塊
相對(duì)于Zabbix提供的操作方式,Jenkins的擴(kuò)展性更為優(yōu)秀,提供更多插件,Jenkins提供了極具擴(kuò)展性的使用方式,無(wú)需進(jìn)行代碼編寫(xiě),即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)sOL執(zhí)行、shell腳本執(zhí)行、HTTP請(qǐng)求執(zhí)行等功能,具有優(yōu)秀的可視化能力。本文采用ssH方法對(duì)遠(yuǎn)程主機(jī)的服務(wù)進(jìn)行重啟,磁盤(pán)空間清理、對(duì)數(shù)據(jù)庫(kù)長(zhǎng)會(huì)話(huà)進(jìn)行監(jiān)控處理、對(duì)鎖表進(jìn)行殺鎖操作等,均可以通過(guò)Jenkins的配置操作方法實(shí)現(xiàn)。
2.4可視化配置模塊
在Zabbix以及Jenkins中通過(guò)配置化的操作告警以及觸發(fā)器和預(yù)案處理方式進(jìn)行配置,避免了傳統(tǒng)告警觸發(fā)機(jī)制的黑盒化、腳本化。將故障和數(shù)據(jù)清晰展示在維護(hù)人員面前,進(jìn)一步提高了運(yùn)維水平,并降低了人員要求。
3系統(tǒng)配置實(shí)現(xiàn)方法
3.1系統(tǒng)短信發(fā)送
Zabbix的短信發(fā)送預(yù)置方式為調(diào)用串口進(jìn)行短信發(fā)送,直接調(diào)用即可發(fā)送到設(shè)備。在目前的系統(tǒng)建設(shè)中,較少采用這種方式,而是采用PosT請(qǐng)求或者數(shù)據(jù)庫(kù)插表的方式實(shí)現(xiàn)。短信內(nèi)容在數(shù)據(jù)庫(kù)插入表之后,后臺(tái)發(fā)送進(jìn)行掃描,這種處理方式具有較好的抗擠壓性,可以提供較好的緩沖能力。本文通過(guò)編寫(xiě)腳本,將告警短信的接收者和接受短信設(shè)置為參數(shù),傳入后臺(tái)sqlplus腳本中進(jìn)行數(shù)據(jù)插入,Zabbix的短信模板如下:
Problems=ar=eta=(EVENT.TIME}on(EVENT.DATE}Problemname:EVENT.NAME}:(ITEM.VALUE}Hos=:(HosT.NAME}
severi=y:(EVENT.sEVERITY}
originalproblemID:(EVENT.ID}(TRIGGER.URL}
對(duì)于sqlPlus腳本而言,不同參數(shù)的傳遞是根據(jù)空格區(qū)分的,需要對(duì)后續(xù)參數(shù)進(jìn)行合并,sqlplus腳本中第一個(gè)參數(shù)為接收者號(hào)碼,而第二、第三以及第N個(gè)參數(shù)均為告警內(nèi)容,在shell中使用msg='echos(@:2}'進(jìn)行合并,將msg向后傳輸即可,最終生成接收者號(hào)碼和短信內(nèi)容的腳本進(jìn)行傳送。
3.2動(dòng)作調(diào)用
觸發(fā)器被觸發(fā)后,調(diào)用短信模塊將告警信息發(fā)送給接收者,同時(shí)利用Curl工具調(diào)用Jenkins中已經(jīng)配置好的預(yù)案。
Jenkins出于安全的考慮,在遠(yuǎn)程調(diào)用過(guò)程中,需要通過(guò)驗(yàn)證用戶(hù)密碼和=oken來(lái)進(jìn)行安全認(rèn)證。為此,建議設(shè)置獨(dú)立的用戶(hù)進(jìn)行遠(yuǎn)程調(diào)用。遠(yuǎn)程調(diào)用的格式是由用戶(hù)名、key、JoB對(duì)應(yīng)的URL以及=oken共同構(gòu)成。例如:h==p://=riggerurl:t2一4f3347t982c一ca12一cc69323190a3@IP:Por=/0enkins/0ob/tblogspar=i=iontrop/builtj=oken==okenName。
其中,key的查看需要在Jenkins設(shè)置中通過(guò)查看用戶(hù)APIToken實(shí)現(xiàn),且每次查看后都會(huì)發(fā)生變更。=oken保護(hù)是針對(duì)任務(wù)而單獨(dú)設(shè)置,不同的任務(wù)可以具有不同的=oken,是通過(guò)在Jenkins任務(wù)中"觸發(fā)遠(yuǎn)程構(gòu)建(例如,使用腳本)"來(lái)設(shè)定的。3.3Jenkins預(yù)案配置
系統(tǒng)觸發(fā)告警后,如果立即觸發(fā)故障處理,有可能在測(cè)試中造成系統(tǒng)不可用,因此,在預(yù)案被調(diào)用后,故障處理的最合適時(shí)間應(yīng)該是等待N分鐘后,并能夠提供可取消的方案,從而避免被認(rèn)為是誤操作。在本文設(shè)計(jì)的方案中,調(diào)用預(yù)案后,通過(guò)Jenkins發(fā)送觸發(fā)短信。系統(tǒng)提供URL可以實(shí)時(shí)取消,如果無(wú)人取消或者操作,系統(tǒng)將繼續(xù)下一步,等待任務(wù),并在完成后進(jìn)行結(jié)果告知。
觸發(fā)短信的模板是通過(guò)Jenkins預(yù)置參數(shù)來(lái)構(gòu)建的,Jenkins的常用預(yù)置參數(shù)如表1所示:
利用這些內(nèi)置參數(shù),可以構(gòu)建短信模板:如"xxxx告警觸發(fā)任務(wù):s(JoBNAME},s(BUILDURL},讓系統(tǒng)等待5min后自動(dòng)處理,可通過(guò)點(diǎn)擊URL查看或取消",系統(tǒng)等待功能可通過(guò)sleep命令實(shí)現(xiàn),最終配置如圖2所示。
完成后可以進(jìn)一步在Jenkins中添加其他故障處理配置,如重啟服務(wù)、清理磁盤(pán)文件、調(diào)用數(shù)據(jù)庫(kù)腳本等,從而實(shí)現(xiàn)系統(tǒng)故障的自動(dòng)化處理。
3.4Zabbix動(dòng)作配置
Zabbix采集到的數(shù)據(jù)經(jīng)過(guò)觸發(fā)器后,需要調(diào)用Jenkins中的任務(wù)進(jìn)行處理,在Zabbix中進(jìn)行動(dòng)作添加即可實(shí)現(xiàn)。在Zabbix的動(dòng)作操作中選擇Zabbix服務(wù)器執(zhí)行命令,腳本如下:
curl-xPosTh==p://=riggerurl:t2一4f3347t902c一ca12一cc69323190a3@IP:Por=/0enkins/0ob/tblogspar=i=iontrop/builtj=oken==okenName,即可調(diào)用相關(guān)配置預(yù)案從而進(jìn)行相關(guān)處理。
4方案實(shí)現(xiàn)效果
在Zabbix收集到的數(shù)據(jù)經(jīng)過(guò)服務(wù)器處理后,如果達(dá)到了觸發(fā)器條件,則會(huì)首先發(fā)送告警短信給運(yùn)維人員,然后調(diào)用Jenkins中的預(yù)置任務(wù)進(jìn)行處理。Jenkins再次發(fā)送確認(rèn)短信,如果無(wú)人操作,則繼續(xù)工作,完成任務(wù)并發(fā)送結(jié)束告知短信。系統(tǒng)設(shè)計(jì)的最終效果如圖3所示。
5結(jié)語(yǔ)
隨著分布式系統(tǒng)的廣泛應(yīng)用,可視化維護(hù)以及自動(dòng)化運(yùn)維已經(jīng)成為當(dāng)前研究的熱點(diǎn)話(huà)題,相對(duì)于傳統(tǒng)的監(jiān)控告警、人工上線(xiàn)等處理方式,本文設(shè)計(jì)的基于Zabbix和Jenkins的自動(dòng)化故障處理方案具有可視化、可追蹤的特點(diǎn),一方面實(shí)現(xiàn)了對(duì)系統(tǒng)健康度的監(jiān)控,另一方面能夠?qū)τ诔R?jiàn)故障進(jìn)行實(shí)時(shí)自動(dòng)處理,具有一定的實(shí)用價(jià)值和先進(jìn)性,并進(jìn)一步提高了運(yùn)維質(zhì)量,有效緩解了運(yùn)維人員的工作壓力。