張 格 代月川 韓躍龍
(鄭州大學西亞斯國際學院 河南 451150)
在互聯(lián)網(wǎng)高速發(fā)展的今天,以“校園網(wǎng)”為代表的園區(qū)型網(wǎng)絡已經(jīng)普遍應用于世界各個角落,對該類型網(wǎng)絡的監(jiān)控與管理已成為業(yè)界長期研究和實踐的一個重要方向。本文在對傳統(tǒng)“園區(qū)網(wǎng)監(jiān)控體系”實現(xiàn)的基礎之上,以增加主動預警機制來進一步拓展其可管理性及應用領域,整套系統(tǒng)以基于Python和PHP的開發(fā)環(huán)境設計并實現(xiàn)。
該系統(tǒng)整體上劃分為“核心業(yè)務層”和“業(yè)務表現(xiàn)層”兩個部分,核心業(yè)務層使用Python的NETSNMP模塊與受監(jiān)控設備(Agent)進行通信,根據(jù)業(yè)務需求獲取Agent相應數(shù)據(jù),如:單位時間內某端口流量、某端口狀態(tài)改變后Agent發(fā)送的Trap包等,所獲數(shù)據(jù)將根據(jù)類型進行分路處理,周期性監(jiān)控數(shù)據(jù)由Python的rrdtool模塊進行存儲及構圖,觸發(fā)式Trap數(shù)據(jù)將與“預設閥值”比對后傳遞給“業(yè)務表現(xiàn)層”以預警的方式展現(xiàn);業(yè)務表現(xiàn)層采用基于PHP的Codeignteri搭建,主要承擔系統(tǒng)管理,如:帳號管理、數(shù)據(jù)備份、用戶權限、設備屬性記錄、預警閥值設定等,同時也作為系統(tǒng)界面展現(xiàn)的基礎平臺。
SNMP(簡單網(wǎng)絡管理協(xié)議)由SNMP代理和SNMP管理者兩個部分組成。網(wǎng)絡中每個設備都運行著SNMP代理進程,它將偵聽端口上SNMP消息并隨時記錄者網(wǎng)絡上的各種情況。網(wǎng)絡管理程序發(fā)送到每個代理上的SNMP消息將包含有想要收集或者修改管理對象的列表,用來查詢或者修改代理所記錄的信息。SNMP共提供了5種操作來完成網(wǎng)絡管理,Get用于獲取特定的對象,Get-Next用戶獲取不知道確切名稱的對象,Set用于修改或者創(chuàng)建對象,Get-Response回答取操作,Trap可以查找特定的事件并檢測,發(fā)送一個Trap消息給預先配置好的管理工作站。
SNMP代理用Get-Response消息響應Get報文。如果需要查詢信息,則使用Get-Next獲取指定表中一個對象的下一個對象,以遍歷整個表。如果要求改變代理的配置,則使用Set報文,常用于對網(wǎng)絡設備的配置。SNMP Trap是SNMP代理發(fā)送給管理站的非請求消息,該消息通知管理站發(fā)生了某種特定的事件,該特性為主動預警提供了原始實現(xiàn)機制。
在使用Python實現(xiàn)核心層業(yè)務時,主要需解決三個問題。第一,如何獲取監(jiān)控對象的狀態(tài)數(shù)據(jù),如端口流量、CPU利用率、并發(fā)連接數(shù)、TRAP報文等;第二,用何種方式存儲所獲得的數(shù)據(jù);第三,如何將所獲數(shù)據(jù)計算并生成統(tǒng)計視圖。
Net-SNMP是操作SNMP協(xié)議的開源軟件,它提供包括了Python在內的多個編程語言的類庫,除安裝之外,在Ubuntu 12.04版本下我們需添加libsnmp-python關聯(lián)包:
Si as@s1:~$ sudo apt-get install libsnmp-python
為了獲取監(jiān)控數(shù)據(jù),我們首先需要獲得監(jiān)控對象的OID(對象識別符)或MIB值,以防火墻上“聚合鏈路端口”為例:
市面上支持MVC的開發(fā)框架比較多,之所以選擇CodeIgniter是因為其配置簡單, 全部的配置使用PHP腳本來配置, 執(zhí)行效率高; 具有基本的路由功能, 能夠進行一定程度的路由, 具有初步的Layout功能, 能夠制作一定程度的界面外觀; 數(shù)據(jù)庫層封裝的不錯, 具有基本的MVC 功能, 而且使用簡單方便, 分控制、模型、視圖3塊進行程序編寫, 控制負責在模型和視圖之間傳遞數(shù)據(jù), 模型負責讀取數(shù)據(jù)庫, 視圖負責收集和顯示數(shù)據(jù)。
SNMP Trap是SNMP代理自動發(fā)送給管理站的非請求消息。這些消息通知管理站被管網(wǎng)絡發(fā)生了一個特定的事件。由于其無需管理者干預的非請求性和事件驅動機制,Trap消息 的接收和處理是網(wǎng)絡自動監(jiān)控系統(tǒng)實現(xiàn)的關鍵環(huán)節(jié)。
SNMP約定網(wǎng)絡管理站采用PDU的162號端口作為通信端口接收Trap消息。每個SNMP Trap即為一個PDU數(shù)據(jù)包,其中一般陷阱在所有支持 SNMP的系統(tǒng)中都一致,該域為以下7 個值的1 個:
codestart:發(fā)送SNMP 的實體重新初始化自身,并改變代理的配置或協(xié)議實體的實現(xiàn)。這是由意外或嚴重錯誤引起的重起。
warmstart:發(fā)送SNMP 的實體重新初始化自身,但不改變代理的配置或協(xié)議實體的實現(xiàn)。這是一種常規(guī)的重起。
Link Down:告知一個代理的通信連接失敗,在variablebinding 的第一個元素是接口的ifIndex實例的名字和值。
authenticationFailure :告知管理站收到一個認證失敗的協(xié)議消息。
egpNeighborLoss : 告知管理站一個EGP(外部網(wǎng)關協(xié)議)鄰居(發(fā)送協(xié)議實體的EGP 對等實體)被標為down,對等關系不再存在。
enterpriseSpecific:告知管理站發(fā)生了某些廠商自定義的事件。特定陷阱指出陷阱的類型。
由上可見,Trap消息不僅可以提供網(wǎng)絡的故障信息,還可以提供網(wǎng)絡安全和性能信息。代理中Trap的發(fā)送是自動實現(xiàn)的,而在管理站,Trap的接收和解析需要編程實現(xiàn)。因此,在SNMP 管理站中,需要運行一個后臺進程,負責接收和確認SNMP請求及Trap信號、處理請求并返回結果、向配置文件中的所有主機發(fā)送Trap信號。
采用SNMPTrap機制進行網(wǎng)絡故障檢測,可以有效地減少網(wǎng)絡帶寬占用,及時發(fā)現(xiàn)問題。當管理站接受報告時,可以采取相應的行動,對報告的代理及附近的代理做輪詢,以獲得更多關于異常情況的詳細信息,從而實現(xiàn)主動預警機制。
[1] 洪英,孫亞民,SNMP Trap機制在網(wǎng)絡故障管理中的應用[J],”網(wǎng)絡縱橫”,2003,8
[2] 顧大剛,基于MVC模式的PHP開發(fā)框架Codeigniter[J] 江西科學,2009.10
[3] 區(qū)海平, 壽國礎,基于MIB定義的SNMP分析系統(tǒng)及實現(xiàn)[j]。計算機應用,2009.1
[4] 牟鵬至,基于SNMP的網(wǎng)絡故障管理功能的研究與實現(xiàn)[J]。電腦知識與技術,2012.1
[5] 史蒂文斯. TCP/IP 詳解(卷1:協(xié)議) [M]. 范建華,譯.北京:機械工業(yè)出版社,2007.
[6] 張蓉. 基于網(wǎng)絡拓撲的告警相關性分析[D].北京:北京郵電大學碩士學位論文,2008