魏鋼 趙杰
1北京交通大學(xué)電子信息工程學(xué)院 北京 100044 2北京市61516部隊(duì) 北京 100094
SNMP是目前常用的環(huán)境管理協(xié)議,它與協(xié)議無關(guān)并且可以在IP、IPX、APPLETALK、OSI等網(wǎng)絡(luò)傳輸協(xié)議上使用。它提供了從網(wǎng)絡(luò)上的設(shè)備中收集網(wǎng)絡(luò)管理信息的方法,為設(shè)備向網(wǎng)絡(luò)管理工作站報(bào)告問題和錯誤提供了方法,使用SNMP技術(shù)不會修改設(shè)備系統(tǒng)所有的網(wǎng)絡(luò)設(shè)置。目前的SNMP是一個從網(wǎng)絡(luò)上的設(shè)備收集管理信息的公用通信協(xié)議,并且絕大部分網(wǎng)絡(luò)設(shè)備都實(shí)現(xiàn)了對SNMP協(xié)議的支持。SNMP簡單模型如圖1所示。
圖1 SNMP簡單模型
SNMP定義了管理進(jìn)程(manager)和管理代理(agent)之間的關(guān)系,這個關(guān)系稱為共同體(community)。描述共同體的語義是非常復(fù)雜的,但其句法卻很簡單。位于網(wǎng)絡(luò)管理工作站(運(yùn)行管理進(jìn)程)上和各網(wǎng)絡(luò)元素上利用SNMP相互通信對網(wǎng)絡(luò)進(jìn)行管理的軟件統(tǒng)統(tǒng)稱為SNMP應(yīng)用實(shí)體。若干個應(yīng)用實(shí)體和SNMP組合起來形成一個共同體,不同的共同體之間用名字來區(qū)分,共同體的名字則必須符合 Internet的層次結(jié)構(gòu)命名規(guī)則,由無保留意義的字符串組成。此外,一個SNMP應(yīng)用實(shí)體可以加入多個共同體。
設(shè)備的管理者收集從網(wǎng)絡(luò)上的設(shè)備管理信息并記錄在管理信息庫(MIB)中,MIB包含了代理機(jī)(被監(jiān)視設(shè)備)中的有關(guān)配置和性能的數(shù)據(jù),有一個組織體系和公共結(jié)構(gòu),其中包含分屬不同組的許多對象。MIB數(shù)據(jù)對象以一種樹狀分層結(jié)構(gòu)進(jìn)行組織,這個樹結(jié)構(gòu)(見圖2)中的每個分枝都有一個專用的名字和一個數(shù)字節(jié)的標(biāo)識符。本系統(tǒng)的MIB應(yīng)用以一種樹狀結(jié)構(gòu)瀏覽的方式訪問整個MIB數(shù)據(jù)庫,通過數(shù)字標(biāo)識來查找MIB中的數(shù)據(jù)對象,這個數(shù)字標(biāo)識符號從結(jié)構(gòu)樹的頂部(根部)開始,直到各個葉子節(jié)點(diǎn)(數(shù)據(jù)對象)為止。到達(dá)目標(biāo)設(shè)備的路徑即為設(shè)設(shè)備的對象標(biāo)識符(object identifier desendant,OID),本系統(tǒng)可通過其尋址到要檢測和監(jiān)視設(shè)備。
OID是以管理信息結(jié)構(gòu)(Structure of Management Information, SMI)為基礎(chǔ)的一系列點(diǎn)分符號,如1.3.6.1.2.1.1,這些點(diǎn)分符號在任何網(wǎng)絡(luò)中都惟一標(biāo)識某一個特定數(shù)據(jù)參數(shù)。跟其它程序?qū)崿F(xiàn)過程一樣,整個SNMP協(xié)議管理編程也要經(jīng)過一個創(chuàng)建、執(zhí)行、撤銷的過程。初始化SNMP環(huán)境即加載SNMP的功能,接著執(zhí)行所進(jìn)行的操作,SNMP是基于消息機(jī)制的,所以消息的傳遞與管理是程序?qū)崿F(xiàn)的核心技術(shù)。整個SNMP協(xié)議的程序?qū)崿F(xiàn)過程可大體分為加載SNMP,建立會話,設(shè)置實(shí)體模式,發(fā)送接收消息,提取數(shù)據(jù)報(bào),取得返回值,最終實(shí)現(xiàn)設(shè)備的實(shí)時監(jiān)視。
圖2 SNMP樹形表格結(jié)構(gòu)示意圖
結(jié)合本部門的設(shè)備實(shí)際情況而言,集群服務(wù)器平臺下的Digital UNIX4.0D操作系統(tǒng)使用了Compaq的Server System MIB變量來建立Environment Monitor,但是其缺乏靈活性和易用性,僅僅使用了Server System MIB一個子集。如圖3所示。
圖3 Server System MIB子集
本文的設(shè)計(jì)思想繞過系統(tǒng)的Environment Monitor,直接調(diào)用系統(tǒng)函數(shù) SNMP_send、SNMP_get等函數(shù)訪問 Server System MIB(或在客戶端發(fā)送SNMP標(biāo)準(zhǔn)協(xié)議包實(shí)現(xiàn)),獲取系統(tǒng)當(dāng)前的溫度、風(fēng)扇、電源等傳感器狀態(tài)值,達(dá)到對系統(tǒng)硬件狀態(tài)的實(shí)時、準(zhǔn)確的監(jiān)視。經(jīng)過擴(kuò)展使用的Server System MIB子集。如圖4所示。
圖4 經(jīng)過擴(kuò)展使用的Server System MIB子集
工作站的Windowns系統(tǒng)首先需要啟動SNMP服務(wù),從而在工作站上建立起SNMP管理,使得管理客戶端只需要通過網(wǎng)絡(luò)發(fā)送標(biāo)準(zhǔn)的SNMP_send、SNMP_get等協(xié)議包既可獲取相應(yīng)于系統(tǒng)硬件狀態(tài)的OID值。
從客戶端/服務(wù)器的角度來看,監(jiān)視系統(tǒng)工作站和SNMP代理既是客戶端,同時又充當(dāng)服務(wù)器的角色。作為服務(wù)器,本系統(tǒng)監(jiān)聽UDP端口162,接收SNMP代理發(fā)送的消息;SNMP代理監(jiān)聽UDP端口161,接收本系統(tǒng)發(fā)送的查詢請求。作為客戶機(jī),本系統(tǒng)可以隨時向SNMP代理發(fā)送查詢請求。因此,基于Windowns系統(tǒng)下開發(fā)的該“集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)”實(shí)際上就是一個客戶端。本系統(tǒng)開發(fā)的主要工作有以下兩點(diǎn):
(1)構(gòu)造正確的PDU,組成SNMP報(bào)文;
(2)對發(fā)送(接收)的SNMP報(bào)文進(jìn)行BER編碼和解碼。
BER編碼處理后的SNMP報(bào)文,提交給UDP,同時指定SNMP代理的IP地址和端口號即可。接收到返回的應(yīng)答數(shù)據(jù)包后,再對SNMP報(bào)文進(jìn)行相應(yīng)的解碼分析和處理。
通過深入分析網(wǎng)絡(luò)交換機(jī)的MIB庫,選取適應(yīng)本分系統(tǒng)的OID,可以實(shí)時監(jiān)測到包括網(wǎng)絡(luò)交換機(jī)的各個模塊的運(yùn)行狀況,在此基礎(chǔ)上,還可以建立相關(guān)數(shù)據(jù)庫文件,統(tǒng)計(jì)網(wǎng)絡(luò)流量、擁塞狀態(tài)等,選取的switch hub MIB子集。如圖5所示。
圖5 網(wǎng)絡(luò)交換機(jī)的SNMP環(huán)境監(jiān)測技術(shù)分析
目前國內(nèi)對大型集群服務(wù)器硬件設(shè)備監(jiān)視手段比較單一,缺乏對這些網(wǎng)絡(luò)集群運(yùn)行設(shè)備的統(tǒng)一監(jiān)視手段,僅能從設(shè)備底層驅(qū)動級對其進(jìn)行監(jiān)視,無法通過底層傳感器得到硬件設(shè)備實(shí)時參數(shù)信息(例如:機(jī)箱風(fēng)扇狀態(tài)、CPU風(fēng)扇狀態(tài)等)。這種基于簡單網(wǎng)絡(luò)協(xié)議思想建立、開發(fā)的硬件設(shè)備實(shí)時監(jiān)視系統(tǒng),很好地利用底層傳感器的有效數(shù)據(jù),解決了系統(tǒng)硬件狀態(tài)的實(shí)時監(jiān)視問題,基本實(shí)現(xiàn)了對各種服務(wù)器的監(jiān)視功能,能夠更好地對在線運(yùn)行設(shè)備進(jìn)行管理、維護(hù),基本做到了全方位、全天候監(jiān)視,大大提高了系統(tǒng)的可維護(hù)性。
集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)充分地利用了SNMP具有簡單性、擴(kuò)展性、獨(dú)立性的特性。
(1)簡單性:不用采取類似 UDP的連接方式需要在被管理設(shè)備上創(chuàng)建新進(jìn)程的方法,從而影響到其它程序的穩(wěn)定運(yùn)行;也不使用TCP“三次握手”來建立的連接方式,避免了浪費(fèi)網(wǎng)絡(luò)、內(nèi)存資源,實(shí)現(xiàn)比較復(fù)雜,而且TCP協(xié)議很少參與底層網(wǎng)絡(luò)的操作,無法監(jiān)視到底層設(shè)備,適合在復(fù)雜的互聯(lián)網(wǎng)上運(yùn)行;
(2)擴(kuò)展性:通過定義新的被管理設(shè)備即擁有MIB信息的設(shè)備,可以非常方便地?cái)U(kuò)展管理功能而且可管理絕大部分符合Internet標(biāo)準(zhǔn)的設(shè)備;
(3)獨(dú)立性:即使被管理設(shè)備發(fā)生嚴(yán)重錯誤時,也不會影響管理設(shè)備的正常工作。
管理信息庫(MIB)是網(wǎng)絡(luò)管理中的重要組成部分。每個MIB包含系統(tǒng)與設(shè)備的狀態(tài)信息、運(yùn)行的數(shù)據(jù)統(tǒng)計(jì)、配置參數(shù)等。通過SNMP的五種命令就可以讀取或設(shè)置MIB庫中變量的值,獲得MIB信息的七種PDU。
所有的 MIB對象類型被收集到一個或多個管理信息庫中并且對象類型按照管理信息結(jié)構(gòu)和標(biāo)識(SMI)定義。一個對象類型的名字明確地代表一個對象,稱為對象標(biāo)識符。對象標(biāo)識符是按照在MIB樹中建立的嚴(yán)格分層空間構(gòu)造的,對象標(biāo)識符總是一個惟一的從樹根開始描述MIB樹的整數(shù)序列。
這里處于簡單性考慮,使用了SNMP定義其中的五種操作,每種操作對應(yīng)一種PDU。
(1)GetRequest 查詢請求PDU,由管理工作站發(fā)出,PDU中指明一個或多個要求查詢的對象。代理接收、處理后,返回GetRequest應(yīng)答PDU。
(2)SetRequest 設(shè)置請求PDU,由管理工作站發(fā)出,PDU中指明一個或多個要求設(shè)置的對象。代理接收、設(shè)置后,返回GetResponse應(yīng)答PDU。
(3)GetNextRequest 查詢請求PDU,由管理工作站發(fā)出,PDU中指明一個或多個要求查詢的對象。和GetRequest PDU不同的是,GetNextRequest PDU實(shí)際操作的對象,不是PDU中指明的對象,而是按字典序的下一個對象。代理接收、處理后,返回GetResponse應(yīng)答PDU。
(4)GetResponse應(yīng)答PDU,由代理應(yīng)答管理工作站發(fā)出的查詢、設(shè)置請求PDU。應(yīng)答PDU中包含了處理結(jié)果以及出錯代碼。
(5)Trap代理發(fā)出,向管理工作站報(bào)告本地網(wǎng)絡(luò)事件。所以,通過MIB,網(wǎng)絡(luò)管理器對管理對象的管理就簡化為網(wǎng)絡(luò)管理器對被管對象的MIB庫的內(nèi)容的查看和設(shè)置。對不同的設(shè)備,只要它們有相應(yīng)的代理軟件和統(tǒng)一的MIB,網(wǎng)絡(luò)管理器就可以對它進(jìn)行統(tǒng)一管理。同時,網(wǎng)絡(luò)管理器對被管對象的控制也通過 MIB改變?yōu)閷IB內(nèi)變量值的設(shè)置,這樣就避免了管理協(xié)議定義過多的控制信息,因?yàn)樾碌目刂乒δ芸梢酝ㄟ^在MIB中增加對應(yīng)的新的變量來實(shí)現(xiàn),而不必增加新的控制信息。
在對SNMP進(jìn)行細(xì)致分析的基礎(chǔ)上,該軟件設(shè)計(jì)了基于Windows系統(tǒng)、面向UNIX應(yīng)用軟件的集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)。管理信息庫的組織方式采取類似于SNMP的管理信息組織方式—MIB樹的方式來組織被管對象。協(xié)議數(shù)據(jù)單元方面保持SNMP基本操作,力求在管理站點(diǎn)上提供給管理機(jī)一個整個管理區(qū)域內(nèi)的MIB樹的直觀映射,以方便管理機(jī)對管理對象的實(shí)時監(jiān)視。
根據(jù)以上關(guān)于SNMP協(xié)議的理論,結(jié)合本部門的實(shí)際情況,集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)的流程設(shè)計(jì)如圖6。
圖6 集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)流程圖
就近些年國內(nèi)對硬件設(shè)備監(jiān)視的種類來看,基于SNMP技術(shù)對設(shè)備監(jiān)視的手段已經(jīng)存在,這種基于SNMP協(xié)議建立的硬件設(shè)備實(shí)時監(jiān)視系統(tǒng)的方法實(shí)現(xiàn)了對集群服務(wù)器進(jìn)行運(yùn)行狀態(tài)監(jiān)視的功能。針對集群服務(wù)器設(shè)備的特點(diǎn),我們實(shí)現(xiàn)了SNMP技術(shù)與集群服務(wù)器的有機(jī)結(jié)合,使得集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)方法和手段變得更為靈活、易于使用,并且該方法不需要對操作系統(tǒng)做任何的改動,大大增強(qiáng)了該方法的穩(wěn)定性。而且通過該技術(shù)研發(fā)的硬件實(shí)時監(jiān)視系統(tǒng)還具有很強(qiáng)的可擴(kuò)展性和移植性。可將支持SNMP協(xié)議的所有設(shè)備添加到該系統(tǒng)內(nèi),為構(gòu)建統(tǒng)一的監(jiān)視平臺提供了技術(shù)支持,為其進(jìn)行全面的設(shè)備狀態(tài)監(jiān)視,以便達(dá)到更好的設(shè)備管理、維護(hù)目的(如圖7)。
圖7 集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)基本界面圖
基于簡單網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)處理分系統(tǒng)設(shè)備的現(xiàn)狀,通過VC具體編譯設(shè)計(jì)監(jiān)視系統(tǒng),實(shí)現(xiàn)了利用底層傳感器得到集群服務(wù)器實(shí)時參數(shù)信息的功能,并使該系統(tǒng)達(dá)到在線運(yùn)行設(shè)備狀態(tài)可視化的程度,使得設(shè)備的維護(hù)、管理更加科學(xué)化。
現(xiàn)在已可實(shí)現(xiàn)的基本功能:
(1)網(wǎng)絡(luò)狀態(tài)實(shí)時嗅探功能;
(2)實(shí)時監(jiān)視各服務(wù)器CPU的運(yùn)算頻率;
(3)實(shí)時監(jiān)視各服務(wù)器CPU的數(shù)量;
(4)實(shí)時監(jiān)視各服務(wù)器CPU的緩存容量;
(5)實(shí)時監(jiān)視各服務(wù)器磁盤的容量;
(6)實(shí)時監(jiān)視各服務(wù)器內(nèi)存的容量;
(7)實(shí)時監(jiān)視各服務(wù)器內(nèi)存的數(shù)量;
(8)實(shí)時監(jiān)視各服務(wù)器電源狀態(tài);
(9)實(shí)時監(jiān)視各服務(wù)器CPU狀態(tài);
(10)實(shí)時監(jiān)視各服務(wù)器CPU風(fēng)扇狀態(tài);
(11)實(shí)時監(jiān)視各服務(wù)器電源風(fēng)扇狀態(tài);
(12)實(shí)時監(jiān)視各服務(wù)器機(jī)箱溫度及狀態(tài);
(13)實(shí)時監(jiān)視各服務(wù)器內(nèi)部底層傳感器狀態(tài);
(14)實(shí)時監(jiān)視各網(wǎng)絡(luò)交換機(jī)內(nèi)部模塊狀態(tài);
(15)實(shí)時監(jiān)視各網(wǎng)絡(luò)交換機(jī)內(nèi)部底層傳感器狀態(tài)。
在集群服務(wù)器狀態(tài)監(jiān)視系統(tǒng)管理方面完成了實(shí)現(xiàn)預(yù)期管理所需的基本功能,測試的結(jié)果基本符合設(shè)計(jì)的要求,但其中也存在一些問題。如系統(tǒng)的反應(yīng)不夠靈敏,MIB信息的更新速度不夠快;監(jiān)控模塊的容錯性能較差,發(fā)生故障后容易掛起。
還需在系統(tǒng)的安全性方面,和對結(jié)構(gòu)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型的支持方面作進(jìn)一步的工作。另外可以考慮擴(kuò)大監(jiān)控的范圍,不僅僅對類中的成員變量進(jìn)行監(jiān)控,還要對類中的成員函數(shù)進(jìn)行監(jiān)控。
[1]武孟軍.Visual C++開發(fā)基于 SNMP的網(wǎng)絡(luò)管理軟件.人民郵電出版社.2007.
[2]王群.計(jì)算機(jī)網(wǎng)絡(luò)教程.清華大學(xué)出版社.2007.
[3]Anthony.Jones.Windows 網(wǎng)絡(luò)編程技術(shù).機(jī)械工業(yè)出版社.2000.