張 格 代月川 韓躍龍
(鄭州大學西亞斯國際學院 河南 451150)
在互聯網高速發展的今天,以“校園網”為代表的園區型網絡已經普遍應用于世界各個角落,對該類型網絡的監控與管理已成為業界長期研究和實踐的一個重要方向。本文在對傳統“園區網監控體系”實現的基礎之上,以增加主動預警機制來進一步拓展其可管理性及應用領域,整套系統以基于Python和PHP的開發環境設計并實現。
該系統整體上劃分為“核心業務層”和“業務表現層”兩個部分,核心業務層使用Python的NETSNMP模塊與受監控設備(Agent)進行通信,根據業務需求獲取Agent相應數據,如:單位時間內某端口流量、某端口狀態改變后Agent發送的Trap包等,所獲數據將根據類型進行分路處理,周期性監控數據由Python的rrdtool模塊進行存儲及構圖,觸發式Trap數據將與“預設閥值”比對后傳遞給“業務表現層”以預警的方式展現;業務表現層采用基于PHP的Codeignteri搭建,主要承擔系統管理,如:帳號管理、數據備份、用戶權限、設備屬性記錄、預警閥值設定等,同時也作為系統界面展現的基礎平臺。
SNMP(簡單網絡管理協議)由SNMP代理和SNMP管理者兩個部分組成。網絡中每個設備都運行著SNMP代理進程,它將偵聽端口上SNMP消息并隨時記錄者網絡上的各種情況。網絡管理程序發送到每個代理上的SNMP消息將包含有想要收集或者修改管理對象的列表,用來查詢或者修改代理所記錄的信息。SNMP共提供了5種操作來完成網絡管理,Get用于獲取特定的對象,Get-Next用戶獲取不知道確切名稱的對象,Set用于修改或者創建對象,Get-Response回答取操作,Trap可以查找特定的事件并檢測,發送一個Trap消息給預先配置好的管理工作站。
SNMP代理用Get-Response消息響應Get報文。如果需要查詢信息,則使用Get-Next獲取指定表中一個對象的下一個對象,以遍歷整個表。如果要求改變代理的配置,則使用Set報文,常用于對網絡設備的配置。SNMP Trap是SNMP代理發送給管理站的非請求消息,該消息通知管理站發生了某種特定的事件,該特性為主動預警提供了原始實現機制。
在使用Python實現核心層業務時,主要需解決三個問題。第一,如何獲取監控對象的狀態數據,如端口流量、CPU利用率、并發連接數、TRAP報文等;第二,用何種方式存儲所獲得的數據;第三,如何將所獲數據計算并生成統計視圖。
Net-SNMP是操作SNMP協議的開源軟件,它提供包括了Python在內的多個編程語言的類庫,除安裝之外,在Ubuntu 12.04版本下我們需添加libsnmp-python關聯包:
Si as@s1:~$ sudo apt-get install libsnmp-python
為了獲取監控數據,我們首先需要獲得監控對象的OID(對象識別符)或MIB值,以防火墻上“聚合鏈路端口”為例:


市面上支持MVC的開發框架比較多,之所以選擇CodeIgniter是因為其配置簡單, 全部的配置使用PHP腳本來配置, 執行效率高; 具有基本的路由功能, 能夠進行一定程度的路由, 具有初步的Layout功能, 能夠制作一定程度的界面外觀; 數據庫層封裝的不錯, 具有基本的MVC 功能, 而且使用簡單方便, 分控制、模型、視圖3塊進行程序編寫, 控制負責在模型和視圖之間傳遞數據, 模型負責讀取數據庫, 視圖負責收集和顯示數據。
SNMP Trap是SNMP代理自動發送給管理站的非請求消息。這些消息通知管理站被管網絡發生了一個特定的事件。由于其無需管理者干預的非請求性和事件驅動機制,Trap消息 的接收和處理是網絡自動監控系統實現的關鍵環節。
SNMP約定網絡管理站采用PDU的162號端口作為通信端口接收Trap消息。每個SNMP Trap即為一個PDU數據包,其中一般陷阱在所有支持 SNMP的系統中都一致,該域為以下7 個值的1 個:
codestart:發送SNMP 的實體重新初始化自身,并改變代理的配置或協議實體的實現。這是由意外或嚴重錯誤引起的重起。
warmstart:發送SNMP 的實體重新初始化自身,但不改變代理的配置或協議實體的實現。這是一種常規的重起。
Link Down:告知一個代理的通信連接失敗,在variablebinding 的第一個元素是接口的ifIndex實例的名字和值。
authenticationFailure :告知管理站收到一個認證失敗的協議消息。
egpNeighborLoss : 告知管理站一個EGP(外部網關協議)鄰居(發送協議實體的EGP 對等實體)被標為down,對等關系不再存在。
enterpriseSpecific:告知管理站發生了某些廠商自定義的事件。特定陷阱指出陷阱的類型。
由上可見,Trap消息不僅可以提供網絡的故障信息,還可以提供網絡安全和性能信息。代理中Trap的發送是自動實現的,而在管理站,Trap的接收和解析需要編程實現。因此,在SNMP 管理站中,需要運行一個后臺進程,負責接收和確認SNMP請求及Trap信號、處理請求并返回結果、向配置文件中的所有主機發送Trap信號。
采用SNMPTrap機制進行網絡故障檢測,可以有效地減少網絡帶寬占用,及時發現問題。當管理站接受報告時,可以采取相應的行動,對報告的代理及附近的代理做輪詢,以獲得更多關于異常情況的詳細信息,從而實現主動預警機制。
[1] 洪英,孫亞民,SNMP Trap機制在網絡故障管理中的應用[J],”網絡縱橫”,2003,8
[2] 顧大剛,基于MVC模式的PHP開發框架Codeigniter[J] 江西科學,2009.10
[3] 區海平, 壽國礎,基于MIB定義的SNMP分析系統及實現[j]。計算機應用,2009.1
[4] 牟鵬至,基于SNMP的網絡故障管理功能的研究與實現[J]。電腦知識與技術,2012.1
[5] 史蒂文斯. TCP/IP 詳解(卷1:協議) [M]. 范建華,譯.北京:機械工業出版社,2007.
[6] 張蓉. 基于網絡拓撲的告警相關性分析[D].北京:北京郵電大學碩士學位論文,2008