吳文哲
(遼河油田信息工程公司智能技術(shù)中心,遼寧 盤(pán)錦 124010)
公司中心機(jī)房是遼河油田眾多信息系統(tǒng)的大腦和中樞,在日常運(yùn)維巡檢時(shí),服務(wù)器運(yùn)維人員和信息系統(tǒng)管理員需要查看服務(wù)器各項(xiàng)硬件資源使用情況和應(yīng)用服務(wù)的運(yùn)行狀態(tài),要對(duì)各個(gè)服務(wù)器分別登錄、逐個(gè)巡檢。這項(xiàng)工作有3 個(gè)方面的問(wèn)題:①手動(dòng)操作煩瑣耗時(shí)、運(yùn)維效率低,無(wú)法直觀地發(fā)現(xiàn)問(wèn)題;②有時(shí)疏忽大意會(huì)造成漏檢,有時(shí)操作失誤會(huì)導(dǎo)致系統(tǒng)無(wú)法正常運(yùn)行;③對(duì)于突發(fā)情況,尤其是夜間發(fā)生的故障,無(wú)法第一時(shí)間了解并處理。
為了解決以上問(wèn)題,需要有系統(tǒng)全天不間斷自動(dòng)監(jiān)控服務(wù)器,對(duì)資源緊張的情況提出預(yù)警、告警,突發(fā)故障時(shí)能及時(shí)通知到系統(tǒng)管理員和運(yùn)維人員,使應(yīng)用程序和服務(wù)有一定的自我恢復(fù)能力。
為了實(shí)現(xiàn)對(duì)服務(wù)器全天候不間斷自動(dòng)監(jiān)控,資源緊張時(shí)發(fā)出主動(dòng)預(yù)警,并希望服務(wù)器有一定的自我恢復(fù)能力,需要研究以下三方面內(nèi)容。
針對(duì)不同操作系統(tǒng),使用跨平臺(tái)能力強(qiáng)的探針程序,利用操作系統(tǒng)提供的自動(dòng)執(zhí)行功能,不間斷采集跟服務(wù)器運(yùn)行相關(guān)的CPU、內(nèi)存、硬盤(pán)、網(wǎng)絡(luò)、端口、進(jìn)程等關(guān)鍵敏感信息,實(shí)時(shí)上傳至數(shù)據(jù)采集數(shù)據(jù)庫(kù)。
根據(jù)初始信息配置數(shù)據(jù)源后,數(shù)據(jù)庫(kù)中的數(shù)據(jù)表記錄就可以被數(shù)據(jù)可視化系統(tǒng)調(diào)用了。該階段首先進(jìn)行數(shù)據(jù)的投影和清洗,用戶查詢自己關(guān)注的數(shù)據(jù)項(xiàng),如果查詢成功,系統(tǒng)返回查詢結(jié)果,否則返回錯(cuò)誤異常。通過(guò)選擇模型元素來(lái)建立數(shù)據(jù)模型,包括如折線圖、餅圖、柱形圖等模型樣式,顏色、視圖名稱(chēng),同時(shí)上層的展現(xiàn)功能調(diào)用被視圖庫(kù)添加好的模型。
使用可視化展示模式對(duì)采集入庫(kù)的數(shù)據(jù)進(jìn)行展示的同時(shí),根據(jù)提前設(shè)置好的報(bào)警參數(shù),判斷當(dāng)前服務(wù)器各項(xiàng)關(guān)鍵信息是否超過(guò)閾值,如果超出閾值,則使用郵件方式通知運(yùn)維人員。
對(duì)于報(bào)異常的用戶進(jìn)程,重啟該異常進(jìn)程;對(duì)于占用資源非常嚴(yán)重的非系統(tǒng)進(jìn)程,自動(dòng)關(guān)閉該進(jìn)程。服務(wù)器上的主要應(yīng)用程序,在服務(wù)器負(fù)載相對(duì)較低時(shí),使用腳本程序使其重啟。
本課題的設(shè)計(jì)思路是通過(guò)Python 編程,使用目標(biāo)服務(wù)器操作系統(tǒng)的自動(dòng)執(zhí)行功能運(yùn)行探針程序,通過(guò)“推”模式實(shí)時(shí)將目標(biāo)服務(wù)器的CPU、內(nèi)存、網(wǎng)卡和硬盤(pán)等硬件資源的使用情況、本地端口、進(jìn)程和應(yīng)用服務(wù)的運(yùn)行狀態(tài)推送至服務(wù)端程序,服務(wù)端程序部署在一臺(tái)安裝有雙網(wǎng)卡的服務(wù)器上,實(shí)現(xiàn)服務(wù)端程序跨網(wǎng)段運(yùn)行;運(yùn)維人員使用瀏覽器通過(guò)圖形化界面監(jiān)控目標(biāo)服務(wù)器各項(xiàng)指標(biāo)的運(yùn)行情況,頁(yè)面定時(shí)自動(dòng)刷新數(shù)據(jù);探針程序判斷目標(biāo)服務(wù)器資源占用異常時(shí),將異常信息記錄到日志文件,服務(wù)端程序發(fā)現(xiàn)目標(biāo)機(jī)在指定時(shí)間間隔沒(méi)有通信,也將記錄異常信息,以上異常信息將以預(yù)警或告警郵件的形式發(fā)送給系統(tǒng)管理員;本地用戶的進(jìn)程可以自動(dòng)重啟。監(jiān)控系統(tǒng)的參數(shù),比如硬件資源的預(yù)警和告警閾值、進(jìn)程或應(yīng)用服務(wù)的路徑、可視化界面的刷新時(shí)間、郵箱地址、字體大小等都可以通過(guò)配置文件修改。整個(gè)過(guò)程實(shí)時(shí)監(jiān)測(cè),程序全天不間斷運(yùn)行。
本課題研究的開(kāi)發(fā)語(yǔ)言是Python,使用了psutil、glances、pymysql、sqlalchemy、pandas、flask、pyecharts、flask_bootstrap 等多個(gè)第三方模塊,數(shù)據(jù)庫(kù)使用開(kāi)源的MySQL,網(wǎng)站搭建采用瀏覽器/服務(wù)器模式,使用HTML5、Bootstrap css 和jQuery 等前端技術(shù)實(shí)現(xiàn)網(wǎng)頁(yè)展示,利用flask框架實(shí)現(xiàn)后臺(tái)處理,使用pyecharts 將采集到的服務(wù)器系統(tǒng)信息可視化,使用uwsgi 和nginx 分別作為Web 服務(wù)器和反向代理服務(wù)器。
Python 崇尚優(yōu)美、清晰、簡(jiǎn)單,是一個(gè)優(yōu)秀并廣泛使用的語(yǔ)言,廣泛應(yīng)用于人工智能、運(yùn)維自動(dòng)化、操作系統(tǒng)管理、Web 應(yīng)用開(kāi)發(fā)、網(wǎng)絡(luò)爬蟲(chóng)、科學(xué)計(jì)算、計(jì)算機(jī)視覺(jué)、深度學(xué)習(xí)、區(qū)塊鏈開(kāi)發(fā)、桌面軟件、服務(wù)器軟件等。
psutil 是一個(gè)Python 模塊用來(lái)獲取正在運(yùn)行的進(jìn)程信息和系統(tǒng)的CPU 和內(nèi)存的利用率,它不僅可以通過(guò)一兩行代碼實(shí)現(xiàn)系統(tǒng)監(jiān)控,還可以跨平臺(tái)使用,支持Linux/Windows/Sun Solaris/OSX/FreeBSD/OpenBSD/NetBSD/AIX 等,是系統(tǒng)管理員和運(yùn)維小伙伴不可或缺的必備模塊。
flask 是Python 開(kāi)發(fā)的一個(gè)輕量級(jí)的Web 框架。Pyecharts是一個(gè)用于生成ECharts 圖表的類(lèi)庫(kù)。因?yàn)橛肊Charts 生成的圖可視化效果非常棒,為了方便與Python 對(duì)接、在Python中直接使用數(shù)據(jù)生成圖表,所以產(chǎn)生了pyecharts。
本課題主要科技創(chuàng)新體現(xiàn)在以下幾方面。
系統(tǒng)使用glances 模塊獲取目標(biāo)服務(wù)器的CPU、內(nèi)存、網(wǎng)卡、硬盤(pán)和端口的狀態(tài)信息;使用psutil 模塊獲取進(jìn)程和應(yīng)用服務(wù)信息;使用email 模塊創(chuàng)建一個(gè)包含主題和具體內(nèi)容的報(bào)警郵件,再使用smtp 模塊設(shè)置郵箱的發(fā)送地址和接收地址;可視化展示功能主要使用flask、pandas 和pyecharts模塊,使用flask 構(gòu)建Web 框架,使用pandas 統(tǒng)計(jì)分析采集來(lái)的數(shù)據(jù),使用pyecharts 實(shí)現(xiàn)前端可視化效果。
綜上所述,無(wú)論是目標(biāo)機(jī)上運(yùn)行的客戶端探針程序,還是服務(wù)端負(fù)責(zé)展示的可視化后端程序,基于跨平臺(tái)能力強(qiáng)的Python 語(yǔ)言開(kāi)發(fā),使得監(jiān)控服務(wù)器硬件資源、預(yù)警告警和可視化展示可以不受操作系統(tǒng)的影響,可移植能力大大增強(qiáng)。業(yè)界知名的老牌開(kāi)源監(jiān)控系統(tǒng)Zabbix,其server 端無(wú)法安裝在Windows 系統(tǒng)上,移植能力有限。
對(duì)于CPU 和內(nèi)存、交換內(nèi)存,使用餅圖可以分別展示(按照刷新頻率)最近10 次的CPU 和內(nèi)存占用率,使用帶標(biāo)記的折線圖展示最近n次(時(shí)間范圍可調(diào))的占用率走勢(shì),如圖1 所示。
對(duì)于硬盤(pán)空間,使用柱形圖顯示硬盤(pán)總?cè)萘看笮?,使用堆疊柱形圖的不同顏色區(qū)分已使用和未使用的硬盤(pán)容量,如圖2 所示。
對(duì)于網(wǎng)卡,按照采集間隔,使用折線圖展示瞬時(shí)流入流量和流出流量,直觀展示網(wǎng)絡(luò)流量隨時(shí)間的變化趨勢(shì),如圖3 所示。
開(kāi)源監(jiān)控系統(tǒng)Zabbix 可視化圖形展示功能較為單一,缺乏儀表盤(pán)、柱狀圖、餅圖等圖形支撐;nagios 沒(méi)有數(shù)據(jù)展示功能,只關(guān)心報(bào)警功能;MRTG 側(cè)重網(wǎng)絡(luò)監(jiān)控,主要功能是收集歷史數(shù)據(jù)和展示,圖形化能力差;Tsar 只能使用命令行形式,沒(méi)有圖形化界面。
圖1 負(fù)載占用情況
圖2 硬盤(pán)使用情況
圖3 網(wǎng)卡流量情況
CPU、內(nèi)存和磁盤(pán)的使用率設(shè)有一個(gè)預(yù)警值和一個(gè)告警值,具體每個(gè)硬件的預(yù)警值和告警值可以在配置文件中指定。根據(jù)提前設(shè)置好的報(bào)警參數(shù),判斷當(dāng)前服務(wù)器各項(xiàng)關(guān)鍵信息是否超過(guò)閾值,如果超出閾值,則使用郵件等方式通知運(yùn)維人員。
在探針程序的配置文件中寫(xiě)入目標(biāo)服務(wù)器需要被監(jiān)控進(jìn)程的絕對(duì)路徑,如果該進(jìn)程異常,則會(huì)通過(guò)os 模塊自動(dòng)重啟。對(duì)于報(bào)異常的用戶進(jìn)程,重啟該異常進(jìn)程;對(duì)于占用資源非常嚴(yán)重的非系統(tǒng)進(jìn)程,自動(dòng)關(guān)閉該進(jìn)程。服務(wù)器上的主要應(yīng)用程序,在服務(wù)器負(fù)載相對(duì)較低時(shí),使用腳本程序使其重啟。
本課題基于瀏覽器/服務(wù)器模式,使用基于Python 的flask 框架技術(shù),使用HTML5、JavaScript 和CSS 等前端技術(shù),通過(guò)異步請(qǐng)求實(shí)現(xiàn)無(wú)刷新定時(shí)更新頁(yè)面數(shù)據(jù)。通過(guò)傳輸層TCP 協(xié)議與應(yīng)用層HTTPS 協(xié)議傳輸數(shù)據(jù),保證數(shù)據(jù)完整性和安全性。使用MySQL 數(shù)據(jù)庫(kù)管理數(shù)據(jù),瀏覽器通過(guò)發(fā)送HTTPS 請(qǐng)求、接收J(rèn)SON 格式的返回?cái)?shù)據(jù)。主要實(shí)現(xiàn)數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)及管理、可視化展示3 個(gè)功能模塊。
數(shù)據(jù)采集:包括實(shí)時(shí)數(shù)據(jù)和非實(shí)時(shí)數(shù)據(jù)兩種。非實(shí)時(shí)數(shù)據(jù)包括服務(wù)器基本配置信息、操作系統(tǒng)版本、系統(tǒng)啟動(dòng)時(shí)間等。實(shí)時(shí)數(shù)據(jù)包括服務(wù)器主要負(fù)載指標(biāo)、硬盤(pán)使用情況、網(wǎng)卡實(shí)時(shí)流量、系統(tǒng)運(yùn)行時(shí)長(zhǎng)、端口使用和進(jìn)程分配的情況。
數(shù)據(jù)存儲(chǔ)及管理:通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)將采集到的結(jié)構(gòu)化數(shù)據(jù)整合為業(yè)務(wù)數(shù)據(jù)。
可視化展示:包括服務(wù)器硬件資源使用情況、系統(tǒng)端口使用列表和進(jìn)程分配列表等數(shù)據(jù)的多種模型可視化展示。
本課題已經(jīng)在車(chē)輛監(jiān)控平臺(tái)相關(guān)的15 臺(tái)服務(wù)器上研究部署并成功應(yīng)用,如圖4 所示,實(shí)現(xiàn)了對(duì)服務(wù)器、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、中間件和應(yīng)用系統(tǒng)等要素的監(jiān)控和統(tǒng)一管理,具有分布式、全覆蓋、自動(dòng)化和安全可靠等特點(diǎn)。本課題支持從業(yè)務(wù)視角排查并定位故障,讓系統(tǒng)運(yùn)維人員能夠及時(shí)定位并解決系統(tǒng)運(yùn)行問(wèn)題,提升運(yùn)維質(zhì)量和效率,降低運(yùn)維難度和風(fēng)險(xiǎn),具有良好的推廣前景。在今后的工作中,還需要進(jìn)一步完善系統(tǒng)日志深化分析和報(bào)警體系(如微信、短信推送等)建設(shè),使之成為更加全面、高效、智能的自動(dòng)化監(jiān)控運(yùn)維平臺(tái)。
圖4 首頁(yè)