樊志遠,石明麗,吳仁彪,屈景怡
(中國民航大學天津市智能信號與圖像處理重點實驗室,天津 300300)
空管系統(tǒng)中多種監(jiān)控代理的實現(xiàn)及性能對比
樊志遠,石明麗,吳仁彪,屈景怡
(中國民航大學天津市智能信號與圖像處理重點實驗室,天津 300300)
在空管系統(tǒng)中,為了確保整體系統(tǒng)能夠長時間無故障地運行,監(jiān)控系統(tǒng)的存在必不可少.監(jiān)控代理作為監(jiān)控系統(tǒng)的重要組成部分,需要對空管系統(tǒng)中的相關設備及關鍵進程的工作狀態(tài)進行實時地監(jiān)控.闡述了空管系統(tǒng)中監(jiān)控代理的基本結構和通信方式,給出了3種不同的方式實現(xiàn)監(jiān)控代理的功能.其中介紹了使用SNMP獲取監(jiān)控代理信息的方法,并借助Net-SNMP軟件作為SNMP代理,描述了基于Windows操作系統(tǒng)實現(xiàn)對Net-SNMP軟件進行代理功能擴展的開發(fā)流程,然后對不同方式的性能進行對比及總結,以達到可以根據(jù)不同的應用需求和不同的設備環(huán)境有效地選擇最佳的方式完成監(jiān)控的目的.
空管系統(tǒng);監(jiān)控代理;SNMP;性能分析
監(jiān)控系統(tǒng)作為空管系統(tǒng)的重要輔助系統(tǒng),要求能夠?qū)φ麄€系統(tǒng)中的軟硬件設備進行有效、全面的后臺監(jiān)視和控制,同時不能影響主體系統(tǒng)的運行和設備主體功能的實現(xiàn)。監(jiān)控系統(tǒng)主要包括顯控終端和監(jiān)控代理。監(jiān)控代理用于實時地監(jiān)測系統(tǒng)中設備的運行狀態(tài),及時發(fā)現(xiàn)并報告設備異常,迅速地執(zhí)行來自顯控終端的命令,從而更好地保障自動化系統(tǒng)安全、穩(wěn)定、可靠地運行。
1.1 監(jiān)控代理的結構
監(jiān)控代理工作在空管系統(tǒng)中各個硬件設備上。它負責獲取設備的運行狀態(tài)信息,并對關鍵進程等信息進行處理以檢測是否有異常,能夠執(zhí)行來自顯控終端的命令信息對設備實現(xiàn)相應的控制功能,而且進行日志記錄以供用戶查詢。監(jiān)控代理還需要完成和顯控終端之間的信息交互[1]。監(jiān)控代理的功能及在監(jiān)控系統(tǒng)中的位置如圖1所示。
圖1 監(jiān)控系統(tǒng)的結構Fig.1 Structure of monitoring system
需要獲取的設備狀態(tài)信息主要有:設備名稱、設備IP、內(nèi)存信息、硬盤信息、CPU使用率和關鍵進程占用的內(nèi)存和CPU信息。異常檢測是對CPU使用率和內(nèi)存使用率的大小進行比較,以及查看關鍵進程是否都正常運行。執(zhí)行的控制命令主要有進程與設備的關閉和重啟。本文詳細介紹了3種獲取和傳輸狀態(tài)信息的方式[2]。
1.2 信息傳輸方式
監(jiān)控代理和顯控終端之間的通信協(xié)議使用規(guī)則為對可靠性要求較高的信息使用TCP方式,對實時性要求較高的信息使用UDP方式。監(jiān)控代理可通過以下3種通信方式完成和顯控終端之間的信息交互。
1)顯控終端主動查詢
顯控終端定時給代理發(fā)送獲取設備狀態(tài)信息的命令,代理得到命令后獲得所有需要監(jiān)測的設備工作狀態(tài)信息后傳送給顯控終端。
2)監(jiān)控代理主動查詢
監(jiān)控代理定時獲得設備工作狀態(tài)信息,然后主動向顯控終端發(fā)送,顯控終端接收信息后立即進行更新顯示。
3)監(jiān)控代理主動報告異常
顯控終端定時給代理發(fā)送查詢某一詳細信息的命令,監(jiān)控代理把獲取的相應信息直接返回。當監(jiān)控代理檢測到設備有異常時,主動向終端上報異常信息。此種方式是將前面兩種方式進行結合。
在本文介紹的方式中,設備使用的是Windows操作系統(tǒng),采用Miscrosoft Visual Studio 2010開發(fā)工具。監(jiān)控代理的功能可以通過以下介紹的3種方式實現(xiàn)。
2.1 基于Windows API函數(shù)的實現(xiàn)方式
Windows API(application programming interface)是Windows平臺下的應用程序編程接口,是Windows提供給應用程序與操作系統(tǒng)的接口。在Windows操作系統(tǒng)下,API函數(shù)包含的信息廣泛,對于需要監(jiān)控的設備工作狀態(tài)信息,能夠簡捷準確地獲取,而且能夠按需要的方式編寫返回結果。因此考慮使用Windows API函數(shù)獲取信息。例如通過API函數(shù)GlobalMemoryStatus可以獲得設備內(nèi)存的使用信息,使用API函數(shù)GetProcessMemoryInfo獲得進程占用內(nèi)存的信息[3]。獲得設備工作狀態(tài)信息后,通過Windows socket建立通信,同樣采用UDP通信和第2種工作方式,完成監(jiān)控代理獲取并傳送信息的功能。
2.2 基于cmd和Net-SNMP代理的實現(xiàn)方式
本方法借助第三方軟件Net-SNMP,簡單網(wǎng)絡管理協(xié)議SNMP(simple net-work management protocol)是目前被廣泛應用的網(wǎng)絡管理協(xié)議,通過在設備上開啟SNMP服務和安裝Net-SNMP軟件來查詢設備的工作狀態(tài)信息。Net-SNMP為開源的SNMP實現(xiàn)項目,它支持SNMPv1、SNMPv2、SNMPv3。下面以5.6.1版本為例,只需要在監(jiān)控代理所在的設備上簡單地安裝netsnmp-5.6.1.1-1.x86.exe,然后注冊Net-SNMP Agent服務和Net-SNMP Trap服務,注冊成功后通過輸入其包含的對象標識OID(object identifier)就能獲得Net-SNMP代理提供的設備信息。
例如獲得設備內(nèi)存總量的信息,在cmd.exe中輸入:snmpwalk-v 2c-c public localhost 1.3.6.1.2.1.25. 2.2.0,即可獲得。如圖2所示。
圖2 通過Net-SNMP查詢內(nèi)存Fig.2 Memory query through Net-SNMP
監(jiān)控代理的實現(xiàn)方式如下:首先創(chuàng)建管道CreatePipe,用于獲取進程的輸出,通過使用CreateProcess函數(shù)創(chuàng)建進程,在VC環(huán)境下執(zhí)行Dos命令(即使用cmd.exe執(zhí)行),然后通過ReadFile讀取輸出的內(nèi)容,對輸出的信息進行提取和運算后存放到緩沖區(qū)。等到獲得全部需要監(jiān)控的信息后,監(jiān)控代理和顯控終端通過Windows socket建立通信,采用UDP傳輸協(xié)議,以及第2種代理主動上報的方式,實現(xiàn)監(jiān)控代理獲取和發(fā)送設備信息的功能。
2.3 基于SNMP和Net-SNMP代理的實現(xiàn)方式
SNMP是應用層的協(xié)議,它的使用是將網(wǎng)絡中的設備分為管理端和被管理端。在Windows平臺下,SNMP是使用Windows socket接口,采用的是UDP協(xié)議。管理端和被管理端之間通過SNMP協(xié)議數(shù)據(jù)單元PDU(protocol data unit)進行通信。Windows環(huán)境下基于SNMP協(xié)議編程的方法有兩種:第1種是直接使用WinSNMP API函數(shù)[4];第2種是使用惠普(HP)公司的SNMP++,它是用C++語言編寫的類庫,采用的是面向?qū)ο蟮姆椒?,使用被擴展的Net-SNMP軟件作為監(jiān)控代理。
2.3.1 基于SNMP設計管理端
WinSNMP以函數(shù)形式封裝了SNMP協(xié)議,主要有wsnmp32.dll、wsnmp32.lib和winsnmp.h。通過以下的步驟即可實現(xiàn)獲取監(jiān)控代理的信息。首先通過Snmp-Startup啟動SNMP,然后依次創(chuàng)建會話、實體和變量,使用SnmpCreateVbl綁定Vbl變量和SnmpCreatePdu創(chuàng)建PDU包,最后通過SnmpSendMsg向代理發(fā)送消息和SNMPAPI_STATUS CALLBACK Receive回調(diào)函數(shù)接收代理的返回,其中Receive為函數(shù)的名字[5]。使用WinSNMP需要特別注意對SNMP資源的釋放,否則當程序被循環(huán)調(diào)用時會導致內(nèi)存不斷增加,嚴重時會導致程序崩潰。通過 SnmpFreeDescriptor、SnmpFreePdu和SnmpFreeVbl釋放資源,使用SnmpClose關閉會話,最后通過SnmpCleanup在程序結束之前釋放所有的資源。
使用SNMP++開發(fā)包能很大程度上降低開發(fā)的復雜度和難度。只要了解SNMP++開發(fā)包中類的使用方法和C++語言的使用就可以開發(fā)出簡捷高效的管理端。以Snmp++v3.2.25版本為例,采用將SNMP++軟件包編譯為靜態(tài)庫“snmp_pp.lib”的方法,通過#include“snmp_pp.h”和#pragma comment(lib,“snmp_pp.lib”)鏈接在顯控終端的工程中。首先通過Snmp::socket_startup()函數(shù)初始化Windows socket相關函數(shù),然后依次定義和初始化UdpAddress、CTarget、Vb和Pdu類的對象,使用Snmp類中get()函數(shù)獲得代理返回的信息,最后通過Snmp::socket_cleanup()釋放被初始化的資源[6]。雖然SNMP協(xié)議采用的通信方式是UDP,但是它設置了超時重傳和重傳的次數(shù),為信息傳輸?shù)目煽啃蕴峁┝擞辛Φ谋U稀?/p>
2.3.2 擴展Net-SNMP代理
由于Net-SNMP代理自身所包含的OID號有限,而且對于不同版本的操作系統(tǒng),OID號的資源也不同。因此,想要獲取更多監(jiān)控信息或者一次性就可以讀取信息結果時,可以對Net-SNMP代理進行擴展,在管理信息庫MIB(management information base)中增加私有的OID號來獲取需要的信息。
首先下載net-snmp-5.6.2源代碼,并對源代碼進行編譯。打開net-snmp-5.6.2\Win32\Win32.dsw,依次重新生成libagent、libnetsnmptrap、libsnmp和netsnmplibs項目。其次是編寫私有的MIB文件。SNMP中的管理信息結構SMI(structure of management information)對象分為兩類:標量(scalar)和表格(table)。標量包含整型、字符串等數(shù)據(jù)類型。如果要自定義MIB節(jié)點,只需要描述該節(jié)點的SYNTAX,ACCESS,STATUS,DESCRIPTION等屬性和其所屬的是父節(jié)點的第幾個子節(jié)點。以擴展設備內(nèi)存信息為例,選用enterprises子樹下的一個分支1.3.6.1.4.1.9000.1,編寫的MIB文件如下:
其中:MY-MIB是自定義的MIB Module的名稱;mymib為自定義的MIB樹的中間節(jié)點;memory為自定義的MIB樹的葉子節(jié)點[7]。并保存為MY-MIB.txt。
將此文本文件拷貝到net-snmp-5.6.1.1-1.x86.exe的目錄下sharesnmpmibs路徑下,并在snmp.conf中添加mibs+MY-MIB。完成后,可以使用snmptranslate命令檢測此擴展OID是否存在,如圖3所示。
圖3 檢測自定義OIDFig.3 Self-definition of OID detection
根據(jù)上面編寫完的MIB文件,選擇適當?shù)墓ぞ呱蒀語言代碼,然后在MIB訪問接口handle_memory函數(shù)中加入用于獲得設備內(nèi)存信息的Windows API函數(shù)[8]。最后,將修改后的mymib.h和mymib.c文件添加到netsnmpmibs工程中,依次重新編譯Win32.dsw中的netsnmpmibs工程和snmpd工程,并把編譯好的snmpd.exe拷到安裝net-snmp-5.6.1.1-1.x86.exe的目錄下in中,把netsnmpmibs.lib拷到lib下,即可通過相應私有的OID號獲取。變量memory中字符串的顯示結果如圖4所示。
圖4 獲得擴展后的內(nèi)存信息Fig.4 Extended memory information
結果依次是內(nèi)存總量、已使用內(nèi)存量和內(nèi)存使用率,以MB為單位。用基于WinSNMP或基于SNMP++軟件包編寫管理端,以擴展后的Net-SNMP軟件作為監(jiān)控代理,采用第1種工作方式,由顯控終端定時發(fā)送命令查詢;設置Trap后,可采用第3種工作方式,當代理檢測到異常時主動上報異常信息。
2.4 不同方法的性能比較
通過對3種不同實現(xiàn)方式的描述,使讀者進一步了解監(jiān)控代理獲取信息和傳輸?shù)脑?,下面通過實驗說明不同方式的性能。實驗設備環(huán)境為Windows Server 2008操作系統(tǒng),網(wǎng)絡通信采用雙網(wǎng)結構,使用12個監(jiān)控代理和1個顯控終端分布在不同的設備上。通過觀察設備CPU使用、網(wǎng)絡傳輸丟包和顯控終端信息更新情況總結出這3種方式性能對比的結果。
表1 不同方式的性能比較Tab.1 Performance comparison of different ways
使用監(jiān)控代理獲取設備信息,均可采用上述介紹的3種方式實現(xiàn)。在滿足空管系統(tǒng)監(jiān)控性能的要求下,可以根據(jù)子系統(tǒng)不同的功能需求,選擇不同的實現(xiàn)方法,以達到使用更簡單,更高效的方法實現(xiàn)監(jiān)測設備的功能。并且對于空管系統(tǒng)中需要被監(jiān)控的非計算機類的設備,可以先編寫1個代理程序來收集設備的狀態(tài)信息來進行數(shù)據(jù)傳輸。如果監(jiān)控代理需要監(jiān)控的信息復雜時,可以采用多個代理監(jiān)控的方式進行實現(xiàn),滿足了監(jiān)控系統(tǒng)需求的多樣性。這樣不僅增加了監(jiān)控系統(tǒng)的可移植性,而且便于提高系統(tǒng)軟件運行效率,能夠更好地為空管系統(tǒng)的主功能服務。
[1]周奕利,楊紅雨,孫 肖,等.空管系統(tǒng)監(jiān)控代理子系統(tǒng)的設計與實現(xiàn)[J].計算機工程與應用,2006,(28):205-207.
[2]蘇 科.空管自動化系統(tǒng)監(jiān)控系統(tǒng)分析及設計[D].成都:四川大學,2006.
[3]韓學為.民航ATC系統(tǒng)中網(wǎng)絡監(jiān)控子系統(tǒng)的研究與實現(xiàn)[D].成都:四川大學,2005.
[4]嚴斌宇,劉方圓,吳少華.基于SNMP的網(wǎng)絡管理軟件的設計與實現(xiàn)[J].計算機與數(shù)字工程,2012,40(4):126-129.
[5]黃基前.理解SNMP、SNMP++及用VC++6.0實現(xiàn)Windows SNMP編程[J].光通信技術,2001,25(3):220-226.
[6]武孟軍,徐 龑,任相臣.Visual C++開發(fā)基于SNMP的網(wǎng)絡管理軟件[M].2版,北京:人民郵電出版社,2009.
[7]孫曉艷.SNMP擴展代理的設計與實現(xiàn)[J].現(xiàn)代電子技術,2011,34(22):116-119,122.
[8]張登銀,陳 瑋,任勛益,等.基于SNMP的MIB庫轉化成C文件的實現(xiàn)[J].計算機技術與發(fā)展,2011,21(9):6-9.
(責任編輯:黨亞茹)
Achievements and performance comparison of multiple monitoring agents in air traffic control system
FAN Zhi-yuan,SHI Ming-li,WU Ren-biao,QU Jing-yi
(Intelligent Signal and Image Processing Key Lab of Tianjin,CAUC,Tianjin 300300,China)
In ATC system,in order to ensure that the whole system operates for a long time without trouble,system monitoring is essential.The working status of related equipment and key process in ATC system must be monitored in real-time by monitoring agent,which is an important part of monitoring system.Firstly,the basic structure and communication mode of monitoring agent are elatorated,and then three different methods of monitoring function achieving are proposed.SNMP method is introduced to obtain the information of monitoring agent.With Net-SNMP software as an SNMP agent,the development process of Net-SNMP agent extension based on Windows operating system is described.Furthermore,a comparison and summary is made about the performance of these methods.According to different application requirements and equipment environments,the most effective way to complete monitoring function can be selected.
ATC system;monitoring agent;SNMP;performance analysis
V355;TP393.1
:A
:1674-5590(2015)01-0001-04
2013-09-24;
:2013-11-22
國家科技支撐計劃項目(2011BAH24B12);中央高?;究蒲袠I(yè)務費專項(ZXH2012C004)
樊志遠(1976—),男,河南衛(wèi)輝人,講師,碩士,研究方向為空管自動化、模式識別等.