李曉暉
摘要:隨著信息時代持續發展,面對復雜的業務和多樣化的需求,IT應用迅速擴展,運行環境也發展為分布式服務器,用戶對系統穩定性提出了越來越高的要求。針對這種情況,如何有效地監控分布在不同服務器的應用運行狀態,在出現故障時及時發現,是大多數企業必須解決的問題。文章設計了基于Zabbix的應用監控系統,能夠對復雜部署的IT應用進行監控,并具備普適性,可廣泛推廣應用。
Abstract: With the developing of Information Age,facing the increasing complicated work and diverse needs,the application of IT has expanded rapidly,the running environment has developed to distributed servers,and the user's equirements for the stability of IT applications are higher. In this situation,how to effectively monitor the running status of applications distributed on different servers and find out the cause when exceptions occur,it is an issue most companies need to solve urgently. A system for monitoring the applications based on Zabbix is developed,which can effectively monitor the complicated IT applications. It has good adaptability,and can be widely applied.
關鍵詞:應用監控;Zabbix;IT應用程序
Key words: application monitoring;Zabbix;IT applications
中圖分類號:TP391 文獻標識碼:A 文章編號:1006-4311(2018)28-0252-03
0 引言
隨著信息技術的迅猛發展,要處理的信息量及應用的復雜度也在不斷增大、增強。越來越多的互聯網企業采用分布式服務器架構,不同的服務器提供不同服務,或者多臺服務器進行負載均衡,以提高系統的運行速度,為用戶提供更好的體驗[1-2]。但隨著硬件及應用數量的大幅增加,部分服務器或應用發生故障的可能性也隨之升高,在系統發生故障時,人工定位發生故障的機器是不大現實的[3]。設計一個可靠靈活的應用監控系統是十分必要的,在故障發生時能主動準確定位故障節點,相關信息能及時、準確通知系統管理員。通過技術手段代替人工來進一步落實信息運維模式的標準化、規范化和自動化要求是實現精細化運維工作問題解決思路的重要基礎[4]。
商用的系統監控類軟件價格較高且不夠靈活,開源軟件則具有良好的社區支持和氛圍且插件較多,可擴展性好的特點。Zabbix是一種高度集成的開源分布式網絡監控解決方案[5],是企業常用的開源監控軟件之一,有特別良好的開發文檔及中文支持,因此本監控系統是基于Zabbix的基礎上進行設計,使用Zabbix進行基本的軟硬件參數監控,通過獨立模塊開發來完善本應用監控系統的功能。
1 系統功能分析
1.1 服務器監控
服務器監控主要是針對服務器CPU、內存、磁盤等硬件參數以及軟件參數的監控,是針對IT應用的基礎運行環境的監控,用于IT應用在運行過程中外部環境的實時監控,及時發現非IT應用本身問題導致的故障。
1.2 IT應用監控處理
IT應用監控主要是針對IT應用服務自身的監控,包括應用服務當前運行狀態,應用服務日志輸出有無異常,應用中是否存在需要優化的內容等,在發現異常之后能夠自動進行部分簡單的修復工作,如對異常掛起的應用進行嘗試重啟操作,并在3次嘗試失敗之后能夠將操作結果通知到系統運維人員,從而保障IT應用在運行過程中出現異常能夠及時發現和處理,系統運行穩定可靠,提升用戶感知。
1.3 監控系統自監控
對于監控系統本身相關服務運行狀態的監控,在出現異常時能夠對監控系統做簡單的自動化處理,保障監控系統的穩定運行,從而避免對IT應用的監控失效的情況。
1.4 異常情況通知
在監控系統對IT應用持續不間斷的監控過程中,發現的異常能夠通過生成告警的形式通知系統的運維人員,通知方式包括但不限于短信通知、郵件通知等多重方式,其中以郵件通知為主,將多個告警異常的信息進行合并,一次發送。
2 系統設計
2.1 架構設計
該系統主要由服務器監控和IT應用監控處理兩部分組成。服務器監控通過Zabbix監控方案來實現,服務端程序是Zabbix Server,部署在應用監控系統主服務器上;客戶端是Zabbix Agentd,在所有被監控服務器上均需要部署。IT應用監控發生異常或有需要用戶關注處理信息時,該程序根據對應的通知策略判斷是否需要對運維人員進行通知并進行后續處理。
被監控的主機上需部署Zabbix客戶端程序,該程序周期性上報主機監控結果,以及時發現運行過程中發現的主機問題,并通過異常情況通知程序按照設置好的通知策略通知具體運維人員;同時為保障該系統的穩定運行,增加了服務端監測程序和客戶端監測程序,周期性監測服務端和客戶端程序運行狀況,在出現異常時嘗試進行自動重啟等類似的方式進行系統恢復操作。
IT應用監控處理程序,負責對IT應用進程狀態及運行日志進行檢查,捕獲IT應用運行過程中的異常信息,同時對異常應用做簡單處理嘗試自動恢復,在處理完畢之后對應用進行再次檢查,并將檢查結果再次反饋至Zabbix服務端進行后續異常情況通知等操作。
2.2 功能模塊設計
2.2.1 服務器監控模塊設計
Zabbix具有非常完備的服務器監控方案,故本系統服務器監控模塊通過Zabbix的功能來實現。為了能夠檢測分布在不同網絡的服務器主機,需要Zabbix客戶端以主動式的方式運行,同時確保監控系統主服務器可被Zabbix客戶端通過IP尋址。Zabbix客戶端在運行時,會周期性的向Zabbix服務端請求需監控項目,之后通過10051端口將采集到的監控數據傳送給Zabbix服務端。
2.2.2 IT應用監控模塊設計
IT應用監控處理程序,不依賴于Zabbix自身功能,相對獨立,主要負責對IT應用自身的監控,監控的內容包括進程是否存活、日志刷新是否正常、日志中是否存在錯誤關鍵字等。該程序有基礎的系統自愈能力,能夠自動進行部分簡單的操作嘗試對異常自行恢復。(圖2)
2.2.3 監控系統自監控模塊設計
監控系統自監控模塊用于保障Zabbix服務端和客戶端程序的正常運行,并且在檢查到程序沒有運行時,會自動嘗試啟動程序。由于需要監控的內容包括Zabbix服務端和客戶端,實際上該模塊包括兩部分程序。
①Zabbix服務端監控程序。
由于Zabbix服務端程序僅能在Linux平臺運行,在此通過編寫Shell腳本檢查Zabbix服務端口開啟狀態,從而判斷Zabbix服務端的運行狀態,在檢測到Zabbix服務端未運行時嘗試再次啟動服務端程序。由于對于服務端的檢查需要周期性進行,在此通過Linux平臺的Crontab程序來實現。
②Zabbix客戶端監控程序。
Zabbix客戶端與Zabbix服務端的監控程序設計思路類似。與服務端監控不同的是,Zabbix客戶端還可以運行在Windows平臺上。Linux平臺的Zabbix客戶端監控實現和服務端一致;在Windows操作系統中,Zabbix客戶端的運行狀態檢查通過批處理腳本進行,客戶端的周期性檢查通過操作系統的任務計劃進行。
3 系統功能實現
3.1 服務器監控模塊功能實現
服務器的監控功能通過Zabbix提供的解決方案來實現,該方案是在應用監控系統主服務器上安裝Zabbix服務端,被監控主機安裝Zabbix客戶端,并配置Zabbix客戶端工作方式為主動式監控,配置參數是StartAgents,數值配置為0,以禁用被動模式。工作流程如圖3。
3.2 IT應用監控功能實現
IT應用監控的目的是及時發現應用運行過程中出現的問題,并對運行狀態數據進行收集和整理,為IT應用系統的后續優化提供資料參考。該功能通過perl腳本開發,使用mysql數據庫存儲檢查結果數據,具體實現方式采用perl腳本調用系統命令的方式,目前通過該功能從以下方面監控IT應用的實時運行狀態:
①應用進程監控:判斷應用進程是否存在,用于基礎的判斷,并在發現進程不存在之后自動對應用進行重啟,確保應用進程是正在運行的狀態。
②應用日志刷新監控:對應用產生的日志最后更新時間進行檢查,并根據預定的策略判斷應用是否出現長時間未刷新,應用是否出現線程耗盡等情況,避免出現應用進程存在但實際已無法響應和對外提供服務的情況。
③應用日志關鍵字監控:對應用日志內容進行檢查,判斷最新的日志信息中是否有應用產生的錯誤信息,應用是否已經出現嚴重錯誤需要重啟或者換人工干預的情況;應用運行過程中是否存在性能低下需要優化的情況等,并對該部分信息進行記錄。
3.3 監控系統自監控功能實現
3.3.1 Zabbix服務端監控程序
通過編寫shell腳本,監測本機的10050端口是否處于開啟狀態。如果沒有,則判斷為Zabbix服務端未運行,則使用服務啟動命令嘗試啟動該服務。在完成shell腳本功能驗證之后,為保證該監控能夠周期性執行,需要將該腳本執行任務配置到Crontab列表中,如下所示為每5分鐘執行一次:
*/5 * * * * /home/sysMonitor/monitor/host_monitor.sh
3.3.2 Zabbix客戶端監控程序
Zabbix客戶端監控程序需要支持Linux平臺和Windows平臺,其中Linux平臺的監控程序和Zabbix服務端監控程序一致,同樣是監控本機的10050端口是否開啟來實現;Windows平臺的監控程序通過批處理腳本實現,判斷服務運行狀態,并在出現異常時自動重啟服務,批處理腳本的周期執行通過系統的任務計劃配置,在系統啟動時開始執行,每5分鐘執行一次。
3.4 異常情況通知功能實現
3.4.1 短信通知程序
短信發送通常通過向第三方URL發送GET/POST請求,請求中包含用戶認證和短信內容等信息實現的,不同第三方會有所區別。本系統則是通過調用第三方系統已經實現的短信發送Web服務接口,從而實現短信的發送。
3.4.2 郵件通知程序
郵件通知程序通常采用TCP連接SNMP郵件服務器發送郵件。本系統使用C#語言通過.NET中的MailMessage類來實現郵件發送功能。
4 結束語
隨著服務器數量增長和應用復雜度的增加,傳統的以純人工為主的運維方式已不再適用,而通過應用監控系統則成為了當前的一種趨勢。文中基于Zabbix設計的應用監控系統,運行高效,穩定可靠,自動化程度高,有效提升了IT應用的運維效率,減少了對于人員能力和數量的嚴重依賴性,具有良好的普適性。
參考文獻:
[1]吳夫丹.基于云平臺的服務器監控系統設計[D].西安:西安工業大學,2014.
[2]董波,沈青,肖德寶.云計算集群服務器系統監控方法的研究[J].計算機工程與科學,2012,34(10):68-72.
[3]朱瑞斌.服務器集群監控系統的設計與實現[D].北京:北京交通大學,2015.
[4]程明,李凡.基于開放架構的信息系統運維監控輔助支持系統關鍵技術研究與應用[C]// 2013電力行業信息化年會論文集,2013.
[5]VLADISHEV A. Zabbix: an enterprise-class open source distributed monitoring solution[EB/OL]. http://www. zabbix. com/[Accessed: 21-Juli-2010], 2007.