吳宗鍵
(中國民航珠海進近管制中心,廣東 珠海 519015)
Unix操作系統因為其極高的可靠性、網絡功能和數據庫支持功能等特性[1],目前已經成為世界最主流的服務器操作系統。在空管系統中,空中交通管制自動化設備服務器也均采用Unix系統。隨著航班流量的日益增長,服務器處理數據量與日俱增,加上設備老化等因素,服務器由于資源占用過高導致的故障頻繁發生,因此,對Unix服務器的運行資源進行監控管理就顯得十分必要。
目前空管設備軟件廠家提供的監控系統偏重于對軟件狀態的監控管理,而對服務器硬件資源較少涉及。商業的Unix服務器管理軟件又無法保證安全性,而且不切合空管系統的實際需求。因此,本文開發了一套適用于空管系統的 Unix服務器管理系統,對服務器的運行資源進行監控管理,輔助設備保障人員保障Unix服務器的正常運行。
結合筆者單位空管設備 Unix服務器的運行狀況,以及設備維護人員的需求,本文所開發的Unix服務器管理系統需要實現的功能如下:
(1)實時監控服務器資源占用[2],包括內存占用、CPU占用、硬盤占用、swap緩沖區占用、網絡端口占用等,并在占用超過告警閾值時產生告警。
(2)Unix服務器監控對象和告警閾值可實現自定義添加、刪除和修改。
(3)可查詢Unix服務器歷史告警日志、歷史資源占用數據,并可選擇起止時間段繪制歷史曲線。
(4)具備遠程控制Unix服務器進行關機、重啟和kill進程的功能。
(5)具備簡潔鮮明的人機界面,為用戶提供便捷友善的操作體驗。
本文所開發的 Unix服務器管理系統的核心功能是實時監控Unix服務器的資源占用狀況,因此和Unix服務器建立快速、穩定的數據交互尤為重要。筆者嘗試過在windows操作系統下獲取Unix服務器數據,延時很大且穩定性較差。因此,筆者選用Unix分支的Ubuntu[3-5]操作系統作為開發平臺,可移植性很強的 Python[6]作為開發語言,用 pyqt4[7-8]完成圖形界面設計,用 mysql數據庫[9]進行數據管理。系統層次架構如圖1所示。

圖1 系統層次架構圖Fig.1 System hierarchy diagram
系統采用模塊化的設計方式,主要后臺功能模塊分為服務器數據獲取及顯示模塊、告警模塊、配置模塊、日志查詢模塊和遠程維護模塊。前臺主界面分為服務器資源占用狀態顯示和告警信息顯示、維護菜單三個部分。系統模塊關系如圖2所示。服務器資源監控數據、告警日志、系統操作日志均保存在 mysql數據庫中。服務器資源占用狀態包括CPU占用率、內存占用率、硬盤占用率、SWAP緩沖空間占用、網絡端口狀態、進程資源占用狀態。維護菜單包括監控配置、系統日志查詢、歷史數據查詢、歷史曲線繪制和遠程維護菜單。

圖2 系統模塊關系圖Fig.2 System module relation diagram
上文描述了系統的設計架構和模塊關系,下面進一步對關鍵功能模塊的實現方法加以說明。
圖3給出了Unix服務器資源占用數據獲取的流程。用戶在開始服務器監控之前,需要設置服務器的IP地址、遠程登錄用戶名、登錄密碼、以及標識符。當開啟監控功能之后,系統從數據庫中取出以上數據,按照IP地址建立telnet連接[10-11],連接成功后輸入用戶名和密碼,將登錄后的標識符與設定標識符進行對比,對比一致后進入數據獲取步驟,定時向Unix服務器發送資源監控指令,獲取回顯,然后將監控結果發送給狀態顯示模塊和告警模塊處理,并存入數據庫。

圖3 服務器資源占用數據獲取流程Fig.3 The process of get data from server
本系統獲取的服務器數據包括:內存占用率、CPU占用率、硬盤占用率、SWAP緩沖區占用、網絡端口收發狀態、進程資源占用狀態。以監控對象為Unix分支Solaris5.8操作系統的服務器為例,不同資源的監控指令見表1所示。

表1 Unix服務器資源監控指令Tab.1 Unix server resource monitoring instruction
服務器資源告警模塊對數據獲取模塊獲取的數據進行計算處理,并產生告警。用戶在設置監控對象后,系統會將默認告警閾值保存在數據庫中,用戶可隨時配置為自定義閾值。如表2所示,內存、CPU、硬盤占用、單個進程 cpu和內存占用的告警產生,都是通過計算百分比占用率,并和告警閾值比較后產生。Swap緩沖區占用則直接比較實際數值與告警閾值的大小。網絡端口狀態告警計算則比較特殊,通過netstat指令[12]獲取到的各個網口的累積發送和接收數據量是持續增長的數值,無法和固定閾值比較來產生告警。因此系統采用累積發送數據增長率和接收數據增長率的穩定度來判斷網口狀態。以一個網口為例,netstat指令觀察到的當前接收數據量為rx,系統從數據庫取當前時間往前的20組數據,依次為 rx1,rx2….rx20,然后依次取差值rx2-rx1,rx3-rx2…rx20-rx19,一共19個數據增長量,最后計算這19個數據的方差[13-14],即可反映出增長率的穩定程度。將方差與告警閾值做對比,大于閾值則產生告警。經多次測試,在網口數據量急劇增大、急劇減少、通信中斷的情況下都可以產生有效告警。

表2 資源告警判斷機制Tab.2 Resource alarm judgment mechanism
系統為方便用戶直觀的觀察到服務器運行狀態的變化過程,提供了歷史曲線繪制功能。用戶點擊菜單后,選擇起止時間、監控對象和項目,系統從數據庫中查詢出滿足條件的數據,按照時間排序,然后將開始時間作為 x軸的起點,截止時間作為 x軸的終點,該段時間內的最大值取 1.1倍作為 y軸的最高點,最小值的0.9倍作為y軸的零點,進而每一條數據的(時間,數值)確定一個點,最后將這些點連線生成歷史曲線。如圖4所示。
考慮到實際應用中unix服務器位置可能比較分散,為方便運維人員進行管理,本系統提供了簡單的遠程維護功能[15-16],包括遠程關機、遠程重啟、遠程殺進程。因為Unix操作系統只有root用戶才有關機和重啟的權限,所以必須在用戶設置了超級用戶 root的登錄密碼并驗證通過后方可執行這些功能。表3給出了這幾項遠程維護功能的執行流程和指令,其中遠程關機和遠程重啟在下拉菜單中選擇服務器后可一鍵操作,而遠程殺進程在選擇服務器后還需選擇待殺的進程方可執行。

圖4 服務器歷史曲線繪制流程Fig.4 The process of history curve drawing

表3 遠程維護功能執行流程Tab.3 The process of remote maintenance
Unix操作系統在服務器上的應用非常廣泛,如何利用Unix系統的特點對服務器進行管理和優化[17-18]是一個長遠且深入的課題。筆者從自己的一點淺薄工作經驗出發,基于Ubuntu開發了一套以監控Unix服務器資源占用為主要功能的管理系統,該系統還有很多不完善之處,謹將開發思路在文中介紹,希望對有志于類似課題的廣大同行有所幫助和啟發。筆者經驗所限,難免有疏漏之處,歡迎廣大同行批評指正。
[1] 劉日升, 孫玉方. UNIX操作系統分析報告[J]. 計算機研究與發展, 1982(9): 1-60+65.
[2] 唐川. UNIX系統性能監控簡述及shell系統資源統計程序[J]. 科學咨詢(決策管理), 2009(4): 39-40.
[3] 邵長磊. Linux操作系統簡介[J]. 農業圖書情報學刊,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進行Python下的GUI開發[J]. 中文信息,2002(7): 73-75.
[8] 何建倉, 侯澤民. 嵌入式Qt環境下繪圖軟件的設計與實現[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] 盧愛卿, 張會勇, 趙征. Telnet協議的實現原理及應用[J].計算機工程, 2002(11): 268-269+280.
[11] 馬玉春, 汪文彬, 李應勇. 基于TCP客戶機的計算機監控系統測試軟件的設計[J]. 軟件, 2014, 35(5): 1-3, 12.
[12] Anonymous. NETSTAT OPTIONS AND SWITCHES[J].Biomedical Instrumentation & Technology, 2012, 46(5).
[13] 楊小勇. 方差分析法淺析——單因素的方差分析[J]. 實驗科學與技術, 2013, 11(1): 41-43.
[14] 王建政, 王輝, 范作娥. 基于ALLAN方差的MEMS隨機誤差項辨識[J]. 軟件, 2013, 34(2): 75-78.
[15] 孫開云. UNIX/Linux遠程管理—字符篇[J]. 微電腦世界,2010(01): 93-95.
[16] 馬培, 翟高壽. 面向硬件瞬時故障的Linux設備驅動敏感代碼的自動分析與檢測[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] 王鯤. 計算機系統性能評測與優化[A]. 河南省通信學會.河南省通信學會2005年學術年會論文集[C]. 河南省通信學會, 2005: 16.