童辰+陳慧+季海
摘要
本文分析歸納了SNMP協(xié)議查詢網(wǎng)絡(luò)設(shè)備MIB的共性模式,提出一套通用的MIB信息采集流程,隔離了不同網(wǎng)絡(luò)設(shè)備0ID號不一致的差異性。設(shè)計(jì)基于消息隊(duì)列的Trap消息處理流程,在性能和能耗之間取得較好的平衡。最后使用Java語言基于B/S架構(gòu)實(shí)現(xiàn)了該系統(tǒng)。
【關(guān)鍵詞】SNMP Trap 通用數(shù)據(jù)采集 消息隊(duì)列 線程池
簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)是由IETF定義的一套網(wǎng)絡(luò)管理協(xié)議,常見的網(wǎng)絡(luò)傳輸設(shè)備均支持該協(xié)議。利用該協(xié)議,網(wǎng)絡(luò)管理程序可以獲取網(wǎng)絡(luò)傳輸設(shè)備的基本信息、內(nèi)部模塊運(yùn)行狀態(tài)、端口流量、告警事件等信息,是網(wǎng)絡(luò)管理軟件的核心功能。而網(wǎng)絡(luò)設(shè)備不同種類、不同品牌、不同型號提供的信息獲取索引均有所差異,單獨(dú)為每一個(gè)網(wǎng)絡(luò)設(shè)備編寫數(shù)據(jù)采集程序必然費(fèi)時(shí)費(fèi)力,所以亟需一套通過的數(shù)據(jù)采集框架,可以極大的減少網(wǎng)絡(luò)設(shè)備數(shù)據(jù)獲取的成本。
1SNMP協(xié)議分析
SNMP協(xié)議的使用者為網(wǎng)絡(luò)管理軟件,操作對象為網(wǎng)絡(luò)設(shè)備中的代理程序,包括兩種使用方式。查詢式。程序通過SNMP協(xié)議的snmpget和snmpwalk命令查詢代理程序,代理程序?qū)ν獗┞兜慕涌跒橐粋€(gè)MIB,這是一個(gè)多叉樹,每個(gè)樹節(jié)點(diǎn)用一個(gè)數(shù)字表示。上報(bào)式。代理程序發(fā)現(xiàn)有如鏈路故障、部件故障等信息時(shí)可主動(dòng)將該信息進(jìn)行上報(bào),又稱為trap。
2通用數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
2.1功能描述
通用數(shù)據(jù)采集系統(tǒng)支持查詢式和上報(bào)式兩種網(wǎng)絡(luò)設(shè)備信息獲取模式,包含兩個(gè)模塊實(shí)現(xiàn)以上兩種方式的信息獲取。查詢式獲取網(wǎng)絡(luò)設(shè)備中的MIB節(jié)點(diǎn)值,對查詢的方式分析總結(jié)形成通用模板,進(jìn)行簡單配置即可使網(wǎng)絡(luò)管理軟件接入新設(shè)備的查詢信息。上報(bào)式通過消息隊(duì)列緩存各類trap信息,并啟用多線程格式化、過濾并交網(wǎng)絡(luò)管理軟件顯示。
2.2通用MIB查詢模塊
snmpget和snmpwalk命令均查詢MIB節(jié)點(diǎn)值來獲取信息,MIB是一個(gè)多叉樹。每個(gè)節(jié)點(diǎn)有一個(gè)數(shù)字標(biāo)識,節(jié)點(diǎn)的唯一標(biāo)識為從根節(jié)點(diǎn)到該節(jié)點(diǎn)的數(shù)字序列。雖然每個(gè)OID號對應(yīng)的值均有實(shí)際意義,但是不同設(shè)備該意義的OID號不一致,每一類設(shè)備寫一套MIB信息采集代碼,工作量大,這是MIB信息采集的困難所在。下面將MIB表示的實(shí)際含義與MIB號的映射關(guān)系整理為4種典型情況。
2.2.1單節(jié)點(diǎn)
通常該節(jié)點(diǎn)為mib樹的葉子節(jié)點(diǎn),使用snmpget命令,輸入節(jié)點(diǎn)OID號即可獲得某設(shè)備該節(jié)點(diǎn)的信息。新增設(shè)備時(shí),只需要修改OID值,程序即可自動(dòng)獲取信息。
2.2.2—組節(jié)點(diǎn)
如果獲取的節(jié)點(diǎn)自身有一層子節(jié)點(diǎn),且子節(jié)點(diǎn)標(biāo)識同一種類型部件,如圖1所示,fan標(biāo)識風(fēng)扇,可以使用snmpwalk命令,輸入fan節(jié)點(diǎn)oid號,獲取fanl、fan2、fan3—組值。2.2.3多組節(jié)點(diǎn)
如圖1所示,對于端口信息,多個(gè)端口會(huì)有多組值,首先需要獲取端口數(shù)目,即節(jié)點(diǎn)portNum值為3。Port節(jié)點(diǎn)的所有屬性均有與節(jié)點(diǎn)數(shù)目相同的子節(jié)點(diǎn)數(shù),使用snmpwalk命令掃描port節(jié)點(diǎn)得到各自屬性混雜在一起,對需要提取的屬性可以針對其OID號特征設(shè)置篩選條件。
2.2.4多節(jié)點(diǎn)邏輯處理
一些網(wǎng)絡(luò)參數(shù)需要進(jìn)行邏輯運(yùn)算才能得到,運(yùn)算的過程無共性,需要單獨(dú)函數(shù)處理,則在配置文件中建立參數(shù)名稱和處理函數(shù)的映射關(guān)系。
2.3Trap上報(bào)處理模塊
Trap消息是網(wǎng)絡(luò)設(shè)備在檢測到自身意外情況時(shí)利用SNMP協(xié)議主動(dòng)上報(bào)的信息。若發(fā)生故障Trap消息數(shù)量會(huì)短時(shí)間內(nèi)呈指數(shù)級增長,為保證每一條Trap消息均得到處理,使用消息緩存隊(duì)列,在消息數(shù)量暴增時(shí)先緩存下來,處理使用線程池技術(shù)根據(jù)隊(duì)列長度動(dòng)態(tài)計(jì)算需要開辟的線程數(shù)量,既保證了消息劇增時(shí)計(jì)算機(jī)最大運(yùn)算能力處理,也在正常情況下使計(jì)算機(jī)處于合適功耗。
3通用數(shù)據(jù)采集系統(tǒng)實(shí)現(xiàn)
系統(tǒng)使用Java語言開發(fā),通用MIB查詢模塊中使用List