童辰+陳慧+季海

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