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