吳宗鍵
(中國(guó)民航珠海進(jìn)近管制中心,廣東 珠海 519015)
Unix操作系統(tǒng)因?yàn)槠錁O高的可靠性、網(wǎng)絡(luò)功能和數(shù)據(jù)庫(kù)支持功能等特性[1],目前已經(jīng)成為世界最主流的服務(wù)器操作系統(tǒng)。在空管系統(tǒng)中,空中交通管制自動(dòng)化設(shè)備服務(wù)器也均采用Unix系統(tǒng)。隨著航班流量的日益增長(zhǎng),服務(wù)器處理數(shù)據(jù)量與日俱增,加上設(shè)備老化等因素,服務(wù)器由于資源占用過(guò)高導(dǎo)致的故障頻繁發(fā)生,因此,對(duì)Unix服務(wù)器的運(yùn)行資源進(jìn)行監(jiān)控管理就顯得十分必要。
目前空管設(shè)備軟件廠家提供的監(jiān)控系統(tǒng)偏重于對(duì)軟件狀態(tài)的監(jiān)控管理,而對(duì)服務(wù)器硬件資源較少涉及。商業(yè)的Unix服務(wù)器管理軟件又無(wú)法保證安全性,而且不切合空管系統(tǒng)的實(shí)際需求。因此,本文開(kāi)發(fā)了一套適用于空管系統(tǒng)的 Unix服務(wù)器管理系統(tǒng),對(duì)服務(wù)器的運(yùn)行資源進(jìn)行監(jiān)控管理,輔助設(shè)備保障人員保障Unix服務(wù)器的正常運(yùn)行。
結(jié)合筆者單位空管設(shè)備 Unix服務(wù)器的運(yùn)行狀況,以及設(shè)備維護(hù)人員的需求,本文所開(kāi)發(fā)的Unix服務(wù)器管理系統(tǒng)需要實(shí)現(xiàn)的功能如下:
(1)實(shí)時(shí)監(jiān)控服務(wù)器資源占用[2],包括內(nèi)存占用、CPU占用、硬盤占用、swap緩沖區(qū)占用、網(wǎng)絡(luò)端口占用等,并在占用超過(guò)告警閾值時(shí)產(chǎn)生告警。
(2)Unix服務(wù)器監(jiān)控對(duì)象和告警閾值可實(shí)現(xiàn)自定義添加、刪除和修改。
(3)可查詢Unix服務(wù)器歷史告警日志、歷史資源占用數(shù)據(jù),并可選擇起止時(shí)間段繪制歷史曲線。
(4)具備遠(yuǎn)程控制Unix服務(wù)器進(jìn)行關(guān)機(jī)、重啟和kill進(jìn)程的功能。
(5)具備簡(jiǎn)潔鮮明的人機(jī)界面,為用戶提供便捷友善的操作體驗(yàn)。
本文所開(kāi)發(fā)的 Unix服務(wù)器管理系統(tǒng)的核心功能是實(shí)時(shí)監(jiān)控Unix服務(wù)器的資源占用狀況,因此和Unix服務(wù)器建立快速、穩(wěn)定的數(shù)據(jù)交互尤為重要。筆者嘗試過(guò)在windows操作系統(tǒng)下獲取Unix服務(wù)器數(shù)據(jù),延時(shí)很大且穩(wěn)定性較差。因此,筆者選用Unix分支的Ubuntu[3-5]操作系統(tǒng)作為開(kāi)發(fā)平臺(tái),可移植性很強(qiáng)的 Python[6]作為開(kāi)發(fā)語(yǔ)言,用 pyqt4[7-8]完成圖形界面設(shè)計(jì),用 mysql數(shù)據(jù)庫(kù)[9]進(jìn)行數(shù)據(jù)管理。系統(tǒng)層次架構(gòu)如圖1所示。
圖1 系統(tǒng)層次架構(gòu)圖Fig.1 System hierarchy diagram
系統(tǒng)采用模塊化的設(shè)計(jì)方式,主要后臺(tái)功能模塊分為服務(wù)器數(shù)據(jù)獲取及顯示模塊、告警模塊、配置模塊、日志查詢模塊和遠(yuǎn)程維護(hù)模塊。前臺(tái)主界面分為服務(wù)器資源占用狀態(tài)顯示和告警信息顯示、維護(hù)菜單三個(gè)部分。系統(tǒng)模塊關(guān)系如圖2所示。服務(wù)器資源監(jiān)控?cái)?shù)據(jù)、告警日志、系統(tǒng)操作日志均保存在 mysql數(shù)據(jù)庫(kù)中。服務(wù)器資源占用狀態(tài)包括CPU占用率、內(nèi)存占用率、硬盤占用率、SWAP緩沖空間占用、網(wǎng)絡(luò)端口狀態(tài)、進(jìn)程資源占用狀態(tài)。維護(hù)菜單包括監(jiān)控配置、系統(tǒng)日志查詢、歷史數(shù)據(jù)查詢、歷史曲線繪制和遠(yuǎn)程維護(hù)菜單。
圖2 系統(tǒng)模塊關(guān)系圖Fig.2 System module relation diagram
上文描述了系統(tǒng)的設(shè)計(jì)架構(gòu)和模塊關(guān)系,下面進(jìn)一步對(duì)關(guān)鍵功能模塊的實(shí)現(xiàn)方法加以說(shuō)明。
圖3給出了Unix服務(wù)器資源占用數(shù)據(jù)獲取的流程。用戶在開(kāi)始服務(wù)器監(jiān)控之前,需要設(shè)置服務(wù)器的IP地址、遠(yuǎn)程登錄用戶名、登錄密碼、以及標(biāo)識(shí)符。當(dāng)開(kāi)啟監(jiān)控功能之后,系統(tǒng)從數(shù)據(jù)庫(kù)中取出以上數(shù)據(jù),按照IP地址建立telnet連接[10-11],連接成功后輸入用戶名和密碼,將登錄后的標(biāo)識(shí)符與設(shè)定標(biāo)識(shí)符進(jìn)行對(duì)比,對(duì)比一致后進(jìn)入數(shù)據(jù)獲取步驟,定時(shí)向Unix服務(wù)器發(fā)送資源監(jiān)控指令,獲取回顯,然后將監(jiān)控結(jié)果發(fā)送給狀態(tài)顯示模塊和告警模塊處理,并存入數(shù)據(jù)庫(kù)。
圖3 服務(wù)器資源占用數(shù)據(jù)獲取流程Fig.3 The process of get data from server
本系統(tǒng)獲取的服務(wù)器數(shù)據(jù)包括:內(nèi)存占用率、CPU占用率、硬盤占用率、SWAP緩沖區(qū)占用、網(wǎng)絡(luò)端口收發(fā)狀態(tài)、進(jìn)程資源占用狀態(tài)。以監(jiān)控對(duì)象為Unix分支Solaris5.8操作系統(tǒng)的服務(wù)器為例,不同資源的監(jiān)控指令見(jiàn)表1所示。
表1 Unix服務(wù)器資源監(jiān)控指令Tab.1 Unix server resource monitoring instruction
服務(wù)器資源告警模塊對(duì)數(shù)據(jù)獲取模塊獲取的數(shù)據(jù)進(jìn)行計(jì)算處理,并產(chǎn)生告警。用戶在設(shè)置監(jiān)控對(duì)象后,系統(tǒng)會(huì)將默認(rèn)告警閾值保存在數(shù)據(jù)庫(kù)中,用戶可隨時(shí)配置為自定義閾值。如表2所示,內(nèi)存、CPU、硬盤占用、單個(gè)進(jìn)程 cpu和內(nèi)存占用的告警產(chǎn)生,都是通過(guò)計(jì)算百分比占用率,并和告警閾值比較后產(chǎn)生。Swap緩沖區(qū)占用則直接比較實(shí)際數(shù)值與告警閾值的大小。網(wǎng)絡(luò)端口狀態(tài)告警計(jì)算則比較特殊,通過(guò)netstat指令[12]獲取到的各個(gè)網(wǎng)口的累積發(fā)送和接收數(shù)據(jù)量是持續(xù)增長(zhǎng)的數(shù)值,無(wú)法和固定閾值比較來(lái)產(chǎn)生告警。因此系統(tǒng)采用累積發(fā)送數(shù)據(jù)增長(zhǎng)率和接收數(shù)據(jù)增長(zhǎng)率的穩(wěn)定度來(lái)判斷網(wǎng)口狀態(tài)。以一個(gè)網(wǎng)口為例,netstat指令觀察到的當(dāng)前接收數(shù)據(jù)量為rx,系統(tǒng)從數(shù)據(jù)庫(kù)取當(dāng)前時(shí)間往前的20組數(shù)據(jù),依次為 rx1,rx2….rx20,然后依次取差值rx2-rx1,rx3-rx2…rx20-rx19,一共19個(gè)數(shù)據(jù)增長(zhǎng)量,最后計(jì)算這19個(gè)數(shù)據(jù)的方差[13-14],即可反映出增長(zhǎng)率的穩(wěn)定程度。將方差與告警閾值做對(duì)比,大于閾值則產(chǎn)生告警。經(jīng)多次測(cè)試,在網(wǎng)口數(shù)據(jù)量急劇增大、急劇減少、通信中斷的情況下都可以產(chǎn)生有效告警。
表2 資源告警判斷機(jī)制Tab.2 Resource alarm judgment mechanism
系統(tǒng)為方便用戶直觀的觀察到服務(wù)器運(yùn)行狀態(tài)的變化過(guò)程,提供了歷史曲線繪制功能。用戶點(diǎn)擊菜單后,選擇起止時(shí)間、監(jiān)控對(duì)象和項(xiàng)目,系統(tǒng)從數(shù)據(jù)庫(kù)中查詢出滿足條件的數(shù)據(jù),按照時(shí)間排序,然后將開(kāi)始時(shí)間作為 x軸的起點(diǎn),截止時(shí)間作為 x軸的終點(diǎn),該段時(shí)間內(nèi)的最大值取 1.1倍作為 y軸的最高點(diǎn),最小值的0.9倍作為y軸的零點(diǎn),進(jìn)而每一條數(shù)據(jù)的(時(shí)間,數(shù)值)確定一個(gè)點(diǎn),最后將這些點(diǎn)連線生成歷史曲線。如圖4所示。
考慮到實(shí)際應(yīng)用中unix服務(wù)器位置可能比較分散,為方便運(yùn)維人員進(jìn)行管理,本系統(tǒng)提供了簡(jiǎn)單的遠(yuǎn)程維護(hù)功能[15-16],包括遠(yuǎn)程關(guān)機(jī)、遠(yuǎn)程重啟、遠(yuǎn)程殺進(jìn)程。因?yàn)閁nix操作系統(tǒng)只有root用戶才有關(guān)機(jī)和重啟的權(quán)限,所以必須在用戶設(shè)置了超級(jí)用戶 root的登錄密碼并驗(yàn)證通過(guò)后方可執(zhí)行這些功能。表3給出了這幾項(xiàng)遠(yuǎn)程維護(hù)功能的執(zhí)行流程和指令,其中遠(yuǎn)程關(guān)機(jī)和遠(yuǎn)程重啟在下拉菜單中選擇服務(wù)器后可一鍵操作,而遠(yuǎn)程殺進(jìn)程在選擇服務(wù)器后還需選擇待殺的進(jìn)程方可執(zhí)行。
圖4 服務(wù)器歷史曲線繪制流程Fig.4 The process of history curve drawing
表3 遠(yuǎn)程維護(hù)功能執(zhí)行流程Tab.3 The process of remote maintenance
Unix操作系統(tǒng)在服務(wù)器上的應(yīng)用非常廣泛,如何利用Unix系統(tǒng)的特點(diǎn)對(duì)服務(wù)器進(jìn)行管理和優(yōu)化[17-18]是一個(gè)長(zhǎng)遠(yuǎn)且深入的課題。筆者從自己的一點(diǎn)淺薄工作經(jīng)驗(yàn)出發(fā),基于Ubuntu開(kāi)發(fā)了一套以監(jiān)控Unix服務(wù)器資源占用為主要功能的管理系統(tǒng),該系統(tǒng)還有很多不完善之處,謹(jǐn)將開(kāi)發(fā)思路在文中介紹,希望對(duì)有志于類似課題的廣大同行有所幫助和啟發(fā)。筆者經(jīng)驗(yàn)所限,難免有疏漏之處,歡迎廣大同行批評(píng)指正。
[1] 劉日升, 孫玉方. UNIX操作系統(tǒng)分析報(bào)告[J]. 計(jì)算機(jī)研究與發(fā)展, 1982(9): 1-60+65.
[2] 唐川. UNIX系統(tǒng)性能監(jiān)控簡(jiǎn)述及shell系統(tǒng)資源統(tǒng)計(jì)程序[J]. 科學(xué)咨詢(決策管理), 2009(4): 39-40.
[3] 邵長(zhǎng)磊. Linux操作系統(tǒng)簡(jiǎn)介[J]. 農(nóng)業(yè)圖書(shū)情報(bào)學(xué)刊,2008(12): 55-57.
[4] Li Zhao, Zhang Yong.A Multicast Routing Design and Linux implementation in Ad Hoc Network[J]. The Journal of New Industrialization, 2011, 1(11): 1-10.
[5] Wang Lixin, Zhang Yong, Dai Chao.Design & Implementation of Cognitive Ad Hoc Network Testbed under Linux[J].The Journal of New Industrialization, 2011, 1(10): 96-102.
[6] Tony Jenkins. The first language – a case for Python?[J].ITALICS, 2004, 3(2).
[7] 肖文鵬. 用PyQt進(jìn)行Python下的GUI開(kāi)發(fā)[J]. 中文信息,2002(7): 73-75.
[8] 何建倉(cāng), 侯澤民. 嵌入式Qt環(huán)境下繪圖軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2014, 35(5): 45-47.
[9] B. Douglas Blansit. The Basics of Relational Databases Using MySQL[J]. Journal of Electronic Resources in Medical Libraries, 2006, 3(3).
[10] 盧愛(ài)卿, 張會(huì)勇, 趙征. Telnet協(xié)議的實(shí)現(xiàn)原理及應(yīng)用[J].計(jì)算機(jī)工程, 2002(11): 268-269+280.
[11] 馬玉春, 汪文彬, 李應(yīng)勇. 基于TCP客戶機(jī)的計(jì)算機(jī)監(jiān)控系統(tǒng)測(cè)試軟件的設(shè)計(jì)[J]. 軟件, 2014, 35(5): 1-3, 12.
[12] Anonymous. NETSTAT OPTIONS AND SWITCHES[J].Biomedical Instrumentation & Technology, 2012, 46(5).
[13] 楊小勇. 方差分析法淺析——單因素的方差分析[J]. 實(shí)驗(yàn)科學(xué)與技術(shù), 2013, 11(1): 41-43.
[14] 王建政, 王輝, 范作娥. 基于ALLAN方差的MEMS隨機(jī)誤差項(xiàng)辨識(shí)[J]. 軟件, 2013, 34(2): 75-78.
[15] 孫開(kāi)云. UNIX/Linux遠(yuǎn)程管理—字符篇[J]. 微電腦世界,2010(01): 93-95.
[16] 馬培, 翟高壽. 面向硬件瞬時(shí)故障的Linux設(shè)備驅(qū)動(dòng)敏感代碼的自動(dòng)分析與檢測(cè)[J]. 軟件, 2015, 36(12): 09-15.
[17] DONG Qingzhou, XU Mingwei, YANG Yuan.An Implementation of Identity-Locator Separation Mapping Table in the Linux Kernel[J]. The Journal of New Industrialization,2012, 2(2): 46-51.
[18] 王鯤. 計(jì)算機(jī)系統(tǒng)性能評(píng)測(cè)與優(yōu)化[A]. 河南省通信學(xué)會(huì).河南省通信學(xué)會(huì)2005年學(xué)術(shù)年會(huì)論文集[C]. 河南省通信學(xué)會(huì), 2005: 16.