毋 娟
安徽馬鋼技師學院 安徽馬鞍山 243041)
?
基于ICS SNMP完成SNMP協(xié)議的UPS數(shù)據(jù)采集
毋 娟
安徽馬鋼技師學院 安徽馬鞍山 243041)
基于工礦企業(yè)UPS的使用和維護現(xiàn)狀,提出了一種利用網絡進行監(jiān)控和維護的設想,以解決維護中巡檢不及時和對人力物力大量消耗的狀況。為此深入研究了SNMP協(xié)議,在對相關的技術原理和實現(xiàn)方法進行詳細剖析的基礎上,完成了對網絡監(jiān)控系統(tǒng)的需求分析和模塊設計。最后基于ICS開發(fā)組件完成了系統(tǒng)的開發(fā),實現(xiàn)了MIB瀏覽器進行MIB文件的裝載與解析,基于SNMP協(xié)議的UPS通道及變量組態(tài),通過SNMP輪詢操作及Trap偵聽與解析完成對UPS監(jiān)控數(shù)據(jù)的采集。
UPS數(shù)據(jù)采集;SNMP協(xié)議;ICS組件
馬鋼公司在各個重要生產線的電氣設備、自動化控制系統(tǒng)及數(shù)據(jù)中心都安裝部署了UPS,這些UPS投入使用時間大多數(shù)在2003年至2007年間,目前已進入了故障頻發(fā)期。因此迫切需要建立一個UPS監(jiān)測和管理的網絡平臺,通過信息化的手段對分布式UPS進行運行數(shù)據(jù)采集,對運行狀態(tài)進行判斷和隱患預報,及時有效的避免由于UPS的突發(fā)故障而影響生產或造成設備事故。
采用SNMP協(xié)議(簡單網絡管理協(xié)議)的網絡管理卡的出現(xiàn),使UPS通過網絡管理卡(SNMP代理)接入網絡就可以成為網絡上的一個結點,實現(xiàn)正真意義上的UPS網絡化。SNMP不僅解決了網絡的接入問題,而且不同UPS均提供了符合規(guī)范的MIB(管理信息庫)文件,監(jiān)控系統(tǒng)的數(shù)據(jù)采集開發(fā)得到大大簡化。本文僅涉及如何在WindowS環(huán)境下開發(fā)基于SNMP的UPS網絡管理程序,不涉及SNMP代理開發(fā)方面的內容。
1.1 SNMP
SNMP是目前使用最為廣泛的網絡管理協(xié)議,是由一系列相關標準組成的,這些標準在RFC文檔中定義。SNMP體系框架包含三個組成部分:SNMP實體,包括SNMP管理者和SNMP代理;SNMP協(xié)議,用于在兩個實體間傳輸管理信息的通信協(xié)議;解決管理信息如何表示和描述的MIB和規(guī)定MIB書寫規(guī)范的SMI(管理信息結構)。
SNMPv1只定義了5種操作,SNMP管理者使用GetRequest從擁有SNMP代理的網絡設備中查詢一個或多個對象。使用GetNextRequest則是請求下一個對象。使用SetRequest可以對設備中的參數(shù)進行遠程配置和控制設備的行為。SNMP代理以GetResponse消息響應Get/GetNext/Set-Request操作。Trap是由代理發(fā)出的,可以向管理者發(fā)送網絡設備重啟、連接關閉,設備通信中斷或其它異常事件消息。Trap的擴展機制,使設備生產商能為產品提供更豐富的Trap支持。
每種操作都有對應的PDU(協(xié)議數(shù)據(jù)單元),PDU是指在分層網絡結構中,為實現(xiàn)某個協(xié)議,各層對等實體間交換信息的數(shù)據(jù)單元。PDU被封裝在SNMP報文(消息)中傳送。
在MIB中描述的管理信息稱為被管理對象。每個對象都有其唯一的標識符OID(對象標識符)。MIB使用樹型結構來管理對象。廠商或者個人可以定義私有的MIB,來描述自己設備特有的管理信息。每臺支持SNMP的網絡設備,必須提供相應的MIB文件。依據(jù)這些MIB文件管理系統(tǒng)才能確定被管理設備中哪些信息能通過OID進行查詢或設置。
1.2 開發(fā)工具ICS
在Delphi開發(fā)環(huán)境下,目前有許多支持SNMP功能的第三方開發(fā)包,較有影響力的是Synapse、Indy和ICS。使用這些開發(fā)包,可以大大簡化WindowS環(huán)境下的SNMP編程工作。
ICS(Internet Component Suite)是Overbyte公司推出的為Delphi和 C++Builder開發(fā)者提供的網絡開發(fā)套件。包含了原生的sockets、TCP、UDP協(xié)議及更高層次的FTP、 SMTP、 POP3、NNTP、HTTP等協(xié)議的支持。
ICS采用非阻塞模式(異步模式),可以在單一的線程中同時處理上百個連接。ICS組件提供了大量的事件來控制程序的流向,在分配了事件句柄后,只要等待事件發(fā)生就行了。本文的對象不會超過50個結點/連接,完全可以在一個線程中處理,因此ICS是非常合適的SNMP應用的開發(fā)工具。ICS在提供了實現(xiàn)SNMP協(xié)議的3個類TSNMPMib、 TSNMPRec與TSnmpCli。
TSNMPMib類僅有三個屬性。OID:表示被管理對象的標識;Value: OID所指對象的數(shù)值;ValueType:數(shù)值的數(shù)據(jù)類型。
TSNMPRec類屬性中最為重要的是SNMPMibList,一個容納多個OID/值對的查詢隊列,其成員的數(shù)據(jù)類型為TSNMPMib。在TSNMPRec中由EncodeBuf方法負責Get/GetNext的編碼,DecodeBuf方法能同時處理SNMPv1和v2c兩種Trap。由MIBAdd、MIBDelete完成對查詢隊列中OID/值對的添加與刪除,即變量綁定工作;由MIBGet從隊列中獲取指定OID對象的值。
TSNMPCli是完成SNMP客戶端開發(fā)的類。TSNMPCli類的屬性Query負責存儲將要查詢的對象的OID/值對隊列;屬性Reply負責存儲接收到的應答中對象的OID/值隊列,兩者成員都是TSNMPRec類型。TSNMPCli的SendTo方法執(zhí)行Get操作,查詢對象可由Query屬性指定,可以進行批量查詢;Get方法執(zhí)行Get操作,查詢對象由OID屬性指定,一次只查詢一個對象;GetNext方法執(zhí)行GetNext操作,查詢起點由其OID參數(shù)指定。TSNMPCli事件OnRequestDone:查詢完成后觸發(fā)的事件。
2.1 輪詢(Polling)
查詢操作流程,如下圖:
圖1 查詢操作流程
開始查詢之前必須經過組態(tài),組態(tài)是構建PDU的必須過程,也是進行管理的一種手段。組態(tài)操作主要借助GUI來完成,操作的順序為:添加驅動,每種驅動對應一個MIB文件;添加UPS設備,指定代理的IP地址、本地監(jiān)聽端口、超時檢測、數(shù)據(jù)采集頻率等;建立分組,可以對要查詢的對象進行分組管理,如輸入信號編入一組,電池信號編為一組等;添加變量(被管理對象),包括變量名和實例ID(可以直接從MIB瀏覽器中拷貝粘貼)。組態(tài)信息通過TreeView和ListView顯示,組態(tài)數(shù)據(jù)全部由后臺組態(tài)數(shù)據(jù)庫進行維護。
圖2 組態(tài)的GUI
組態(tài)完成后就可以用InitSNMP方法為每個UPS創(chuàng)建一個SNMP連接并對其查詢PDU進行初始化。首先從數(shù)據(jù)庫中提取組態(tài)信息,將所有UPS結點信息存入以PNodeInfoRt類型變量為成員的NodeList,結點下的變量存入以PVarInfoRt類型變量為成員的VarList中。PNodeInfoRt和PVarInfoRt為運行時結點和變量的數(shù)據(jù)結構。
InitSNMP與SNMP相關的主要代碼如下:
for i := 0 to NodeList.Count - 1 do
begin
nInfo:=NodeList.Items[i];
SnmpCliList[i]:= TSnmpCli.Create(Self);
//PDU頭部
SnmpCliList[i].Version := SNMP_V1;
SnmpCliList[i].Community := nInfo.Community;
nmpCliList[i].Query.PDUType :=PDUGetRequest;
//PDU變量綁定
for j := 0 to VarList[i].Count - 1 do
begin
vinfo:=VarList[i].items[j];
SnmpCliList[i].Query.MIBAdd(AnsiString(vinfo.OID),'',ASN1_NULL);
end;
//指定接收到查詢響應時的處理事件
SnmpCliList[i].OnRequestDone := SnmpCliBatchRequestDone;
end;
執(zhí)行查詢操作是GetDateBatch,該方法將調用TSNMPCli類的SendTo發(fā)出查詢請求。主要流程是調用PostMessage,將FMsg_WM_LISTENING消息寄送到消息隊列里并返回。當應用程序窗體收到一條消息后,調用WndProc判斷是否為FMsg_WM_LISTENING,如果是,使用Query.EncodeBuf進行編碼,然后將存放在buffer中的查詢報文發(fā)送給代理。
在InitSNMP部分,我們?yōu)镾nmpCliList 的OnRequestDone事件分配了句柄——SnmpCliBatchRequestDone,該過程將對接收到的響應數(shù)據(jù)報文進行處理,從中提取出變量(被管理對象)的值,其定義如下:
procedure SnmpCliBatchRequestDone(Sender : TObject;
ReqType : TSnmpCliReq;
var Action : TSnmpCliAct;
ErrCode : Word);
在這個過程中,首先根據(jù)IP地址到NodeList中去查找對應結點在NodeList中的索引。在觸發(fā)OnRequestDone事件之前,TSNMPCli已經用Reply.DecodeBuf方法進行解碼,并將解碼的結果保存到Reply.SNMPMibList屬性中。現(xiàn)在只要通過索引就能將所有查詢的OID值對提取出來。
for i := 0 to NodeList.Count - 1 do
begin
nInfo:=NodeList.Items[i];
{利用Sender參數(shù)來判斷是哪一個結點的響應}
if nInfo.IP=(TSnmpCli(Sender).HostIP) then
begin
h:=i; // 匹配的索引值保存在h中
……
end;
end
……
if ReqType = srqGet then
begin
for j:=0 to SnmpCliList[h].Reply.SNMPMibList.Count -1 do
begin
vinfo:=VarList[h].items[j];
vinfo.Value:=TSNMPMib(SnmpCliList[h].Reply.SNMPMibList.Items[j]).Value;
end;
Msg:='Get Date Value OK!';
end;
2.2 陷阱(Trap)
TSNMPCli類不能接收Trap(此時管理系統(tǒng)是服務器,TSNMPCli類不支持服務器端開發(fā))。我們自己建立一個TSnmpTrap類,其中DecodeTrap方法參考了TSNMPRec類的Decode方法。
Trap的接收和處理,使用ICS提供的TWSocket組件的DataAvailable事件實現(xiàn),事件處理過程中調用TSnmpTrap類的方法進行報文解析和數(shù)據(jù)提取。
圖3 SNMP查詢日志
trap.DecodeTrap(s);
//--頭部
ti.Enterprise := trap.Enterprise; //企業(yè)標識
ti.TrapHost := trap.TrapHost; //代理的IP地址
ti.GenTrap := trap.GenTrap; //常規(guī)陷阱標識 ti.SpecTrap := trap.SpecTrap; //擴展陷阱標識 ti.TimeTicks := trap.TimeTicks; //時間戳
ti.ReceiveTime := now; //接收到trap的時間,不屬于報文的內容
//--變量綁定
if trap.SNMPMibList.Count > 0 then
begin
mib.Oid := TSNMPMib(trap.SNMPMibList.Items[0]).Oid; //名
mib.Value := TSNMPMib(trap.SNMPMibList.Items[0]).Value; //值
mib.ValueType := TSNMPMib(trap.SNMPMibList.Items[0]).ValueType; //類型
ti.SNMPMibList.Add(mib);
ti.Msg:=mib.Oid+':'+mib.Value;
end;
其中trap為TSnmpTrap類型、mib為TSNMPMib類型、ti為 PTrapInfo(指向一個對應于Trap PDU字段的記錄類型)。
2.3 SNMP數(shù)據(jù)采集性能測試
采用梅蘭日蘭Galaxy PW 100kVA UPS,配置Transverse 66074網卡,IP地址為172.17.244.154;APC Smart RC10000 UPS,配置AP9630網卡,IP地址為172.17.244.250;同時還選擇運行SNMP采集程序的主機,用于和UPS數(shù)據(jù)采集進行對比,主機IP地址為172.17.244.150。
圖4 監(jiān)聽到的Trap 及解析結果
實測當每個結點刷新頻率為1秒時,分別進行了不同數(shù)量采集數(shù)據(jù)的響應時間測試,測試結果如表1所示。從測試結果看,相同的采集數(shù)量單結點和多結點同時采集的響應時間相差不多,響應時間的長短還取決于網卡的處理性能,對單UPS每秒采集300個數(shù)據(jù)沒有壓力,已經能滿足要求。
表1 SNMP查詢性能測試結果
基于SNMP協(xié)議的UPS數(shù)據(jù)采集系統(tǒng)是完成了UPS網絡監(jiān)控系統(tǒng)的構建的基礎。本文所完成的數(shù)據(jù)采集系統(tǒng)可達到1秒同時采集7臺UPS共500左右個過程數(shù)據(jù)的性能。在此基礎上完成的監(jiān)控系統(tǒng)可以解決UPS電源數(shù)量多、品牌多、多地域網上巡檢、監(jiān)測和管理難題,不僅有效的降低UPS電源維保成本,而且通過隱患發(fā)現(xiàn)早、分析依據(jù)多、查清原因準,排除故障快等優(yōu)勢減少UPS電源沒有起到后備作用而引發(fā)的重大設備事故。
[1] 周 波,劉春玉,王 毅.UPS實時監(jiān)控系統(tǒng)的設計[J].武漢理工大學學報(信息與管理工程版),2013(1):32-35
[2] 孔彥虎.UPS在線遠程狀態(tài)監(jiān)測及報警技術的應用[C].石家莊:2014鋼鐵企業(yè)設備故障遠程診斷技術與無損檢測交流會論文集,2014(1):276-282
[3] 郭亞杰,相有桓,韓慧奇.UPS網絡集中監(jiān)控系統(tǒng)設計與實現(xiàn)[J].電子技術,2013(10):26-28
[4] 郭連強,譚敬華,胡曉林等.實現(xiàn)UPS遠端維護管理的方法[J].黑龍江科技信息,2010(26):106
[5] 何來坤.基于校園網內SNMP的UPS遠程監(jiān)控系統(tǒng)設計與實現(xiàn)[J].杭州師范大學學報(自然科學版),2009(1):62-65
[6] 王小維.基于SNMP的網絡監(jiān)控系統(tǒng)的設計與開發(fā)[D].北京:北京化工大學,2011-12-20
[7] 江偉石.網絡UPS之集中管理[J].UPS應用,2014(4):1-3
[8] 龔尚福,劉二恩,馮健.基于SNMP的MIB樹結構研究與實現(xiàn)[J].計算機應用與軟件,2013(12):163-166
Implementation of SNMP Protocol ups Data Acquisition Based on ICS SNMP
WU Juan
Based on the usage of UPS and maintenance situation of industrial and mining enterprises, the author comes up with an idea of surveillance and maintenance via network in order to solve the problems caused by inspection not in time and waste of manpower and material resource. The SNMP protocol is deeply researched, and on the basis of the detailed analysis of relevant technical theory and achievement method, The author has finished the demand analysis and module design of data acquisitiuon system and has developed the system by ICS component.. the system has achieved MIB load and analysis via MIB browser and has completed collecting UPS surveillance data through SNMP polling operation, Trap monitoring and analysis on the basis of UPS channel and variable configuration of SNMP protocol.
UPS data acquisitiuon, SNMP protocol, ICS component
2016-10-06
毋 娟(1980-),女,安徽馬鋼技師學院,安徽冶金科技職業(yè)學院,計算機系,講師,多年來一直從事計算機相關專業(yè)的教育教學工作。
TP311.138
A
1672-9994(2016)04-0034-05