張萬(wàn)輝
摘 要:為了滿足工作需求,本文從網(wǎng)絡(luò)監(jiān)控的原理出發(fā),介紹了SNMP協(xié)議的工作方法和一些簡(jiǎn)單實(shí)用的開(kāi)源工具,利用此協(xié)議和工具進(jìn)行開(kāi)發(fā),實(shí)現(xiàn)了一個(gè)完整的流量統(tǒng)計(jì)系統(tǒng)。簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)是由一組網(wǎng)絡(luò)管理的標(biāo)準(zhǔn)組成,用來(lái)監(jiān)控各種網(wǎng)絡(luò)設(shè)備的運(yùn)行,是網(wǎng)絡(luò)維護(hù)工作中廣泛應(yīng)用的網(wǎng)絡(luò)協(xié)議。另外還用到了SNMP協(xié)議的開(kāi)源工具SNMP4J、JAVA編程語(yǔ)言和DELPHI編程工具以及相關(guān)的輔助工具。本文主要介紹了流量數(shù)據(jù)采集的基本原理、系統(tǒng)的組成和設(shè)計(jì)的實(shí)現(xiàn)。
關(guān)鍵詞:網(wǎng)絡(luò)維護(hù);SNMP協(xié)議;流量統(tǒng)計(jì);JAVA;DELPHI
1.前言
隨著互聯(lián)網(wǎng)用戶數(shù)量的迅速增長(zhǎng),網(wǎng)管維護(hù)人員需要維護(hù)的設(shè)備數(shù)量也越來(lái)越多,為了保障網(wǎng)絡(luò)的穩(wěn)定運(yùn)行,借助一些網(wǎng)絡(luò)監(jiān)控軟件是很有必要的。網(wǎng)管維護(hù)中心一直在使用CACTI這個(gè)開(kāi)源的軟件來(lái)對(duì)所有的網(wǎng)絡(luò)交換機(jī)和路由器進(jìn)行監(jiān)控。CACTI的實(shí)時(shí)監(jiān)控和畫(huà)圖的功能還是很不錯(cuò)的,但是由于CACTI的數(shù)據(jù)存儲(chǔ)使用的是RRD數(shù)據(jù)庫(kù),這是一種環(huán)型數(shù)據(jù)庫(kù),數(shù)據(jù)的存儲(chǔ)不具有持久性,新的數(shù)據(jù)會(huì)覆蓋舊的數(shù)據(jù),這樣不利于工作人員對(duì)網(wǎng)絡(luò)的運(yùn)行趨勢(shì)進(jìn)行分析。因此維護(hù)人員一直使用人工的方式,每天記錄下核心設(shè)備的運(yùn)行參數(shù),包括在線用戶數(shù)和端口流量峰值,把數(shù)據(jù)輸入到EXCEL表格中以形成流量統(tǒng)計(jì)報(bào)表。這種方式不但費(fèi)時(shí),而且費(fèi)力,每天要花去幾個(gè)小時(shí)的時(shí)間,人工的方式還容易出錯(cuò)。
1.1設(shè)計(jì)目的
為了解決人工流量統(tǒng)計(jì)效率低下的問(wèn)題,決定自己動(dòng)手開(kāi)發(fā)一個(gè)流量統(tǒng)計(jì)系統(tǒng),完成數(shù)據(jù)自動(dòng)采集和生成報(bào)表的功能。
1.2設(shè)計(jì)思路
一臺(tái)主機(jī)用來(lái)運(yùn)行數(shù)據(jù)采集程序,并且主機(jī)到各交換機(jī)的網(wǎng)絡(luò)必須可達(dá),這是前提條件。
一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,程序采集到的數(shù)據(jù)需要寫(xiě)入數(shù)據(jù)庫(kù)中。
最后開(kāi)發(fā)一個(gè)客戶端程序讀取數(shù)據(jù)庫(kù)生成報(bào)表,如果使用B/S架構(gòu),還需要一臺(tái)WEB服務(wù)器。
如果程序占用資源不大,也可以把采集、數(shù)據(jù)庫(kù)和WEB服務(wù)部署在一臺(tái)服務(wù)器上。
在流量統(tǒng)計(jì)系統(tǒng)中,最關(guān)鍵的環(huán)節(jié)就是設(shè)備流量數(shù)據(jù)的采集,只要有了數(shù)據(jù),無(wú)論需要生成什么樣的報(bào)表,都可以實(shí)現(xiàn)。端口流量的采集,可以利用流量差除以時(shí)間差來(lái)得出端口流量,兩次采集的時(shí)間間隔越長(zhǎng),對(duì)系統(tǒng)的資源占用也越高,得到的流量數(shù)據(jù)也越平均;時(shí)間間隔越短,就越容易抓取端口流量的峰值,但是流量誤差也越大。在本程序中,兩次流量采集的間隔時(shí)間準(zhǔn)備設(shè)為10秒鐘。
下圖為系統(tǒng)結(jié)構(gòu)圖:
2.系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2.1需求分析
該系統(tǒng)需要具備如下功能:數(shù)據(jù)的采集、數(shù)據(jù)入庫(kù)、生成報(bào)表。需要的報(bào)表有:流量實(shí)時(shí)曲線報(bào)表、流量峰值報(bào)表和圖表、流量分析報(bào)表。
2.2SNMP協(xié)議介紹
SNMP是在TCP/IP協(xié)議棧之上的應(yīng)用層協(xié)議,由三個(gè)部分組成:管理信息結(jié)構(gòu)(SMI)、管理信息庫(kù)(MIB)和SNMP協(xié)議。SMI用于定義通過(guò)網(wǎng)絡(luò)管理協(xié)議可訪問(wèn)的對(duì)象的規(guī)則,在MIB中,SMI定義了數(shù)據(jù)類型及網(wǎng)絡(luò)資源在MIB中的名稱或表示。MIB是由網(wǎng)絡(luò)管理協(xié)議訪問(wèn)的管理對(duì)象數(shù)據(jù)庫(kù),樹(shù)型結(jié)構(gòu),每個(gè)節(jié)點(diǎn)(OID)代表一個(gè)變量。本文主要使用V2版本的SNMP協(xié)議OID進(jìn)行讀取,
2.3相關(guān)工具的選擇
1、編程語(yǔ)言:本系統(tǒng)服務(wù)端使用JAVA語(yǔ)言進(jìn)行開(kāi)發(fā)。客戶端使用Delphi編寫(xiě)。
2、協(xié)議開(kāi)發(fā)工具:SNMP4J它是用JAVA來(lái)實(shí)現(xiàn)SNMP協(xié)議的開(kāi)源項(xiàng)目,它支持以命令行的形式進(jìn)行管理與響應(yīng)。
3、WEB服務(wù)器:WEB服務(wù)采用一個(gè)基于J2EE的開(kāi)放源代碼的應(yīng)用服務(wù)JBOSS。
4、MVC框架:SSH 為 struts+spring+hibernate的一個(gè)輕量級(jí)集成框架,是目前較流行的一種Web應(yīng)用程序開(kāi)源框架。
5、報(bào)表工具:JFreeChart是JAVA平臺(tái)上的一個(gè)開(kāi)放的圖表繪制類庫(kù)。本系統(tǒng)使用此工具在WEB頁(yè)面上生成曲線報(bào)表。
6、數(shù)據(jù)庫(kù):本系統(tǒng)使用SQLSERVER2000數(shù)據(jù)庫(kù)
7、輔助工具:MIBBrowser是一個(gè)免費(fèi)的工具,可以利用SNMP協(xié)議讀取設(shè)備的MIB,非常適合輔助開(kāi)發(fā)。
2.4流量采集功能的實(shí)現(xiàn)
本系統(tǒng)需要采集的流量有用戶數(shù)和數(shù)據(jù)流量。其中用戶流量主要針對(duì)BAS認(rèn)證設(shè)備。用戶數(shù)的采集比較簡(jiǎn)單,對(duì)于華為的MA5200F設(shè)備,用戶流量的OID是.1.3.6.1.2.1.31.1.1.1.6.1610719231,可以利用MIBBrowser進(jìn)行數(shù)據(jù)遍歷,同時(shí)使用交換機(jī)命令display access-user來(lái)進(jìn)行數(shù)據(jù)的核對(duì)。
把流量采集的代碼包裝成JAVA對(duì)象,并實(shí)現(xiàn)Runnable方法。另外把所有的網(wǎng)絡(luò)設(shè)備以自定義的格式寫(xiě)到文本文件里,用來(lái)做配置文件,里面記錄每個(gè)設(shè)備的IP地址、共同體、OID等。使用程序讀取配置文件,每個(gè)設(shè)備生成一個(gè)Runnable對(duì)象,就可以使用多線程的方式進(jìn)行流量采集了。
2.5數(shù)據(jù)庫(kù)的設(shè)計(jì)
數(shù)據(jù)庫(kù)使用的是SQLSERVER2000,最主要的表有兩個(gè),分別記錄了所有的設(shè)備端口流量和在線用戶數(shù)。這兩個(gè)表都有要設(shè)備類型、設(shè)備名稱和采集時(shí)間等字段。為了加速統(tǒng)計(jì)每日的流量峰值,還需要增加一個(gè)記錄每日峰值的表,定時(shí)的把每日的峰值錄入表中。系統(tǒng)5分鐘記錄一次數(shù)據(jù),運(yùn)行時(shí)間久了數(shù)據(jù)量也是很大的,所以還要為數(shù)據(jù)庫(kù)增加索引,以提高查詢速度。
2.6 報(bào)表、圖表的展示
流量的數(shù)據(jù)采集入庫(kù)完成以后,剩下的就是報(bào)表或圖表的生成了。可以根據(jù)需要生成各種樣式的圖表,以下是使用Delphi和JAVA生成的報(bào)表。
2.7系統(tǒng)試運(yùn)行時(shí)解決的問(wèn)題
1、 在程序測(cè)試運(yùn)行階段,定時(shí)觀察程序的運(yùn)行內(nèi)存,發(fā)現(xiàn)內(nèi)存占用隨著運(yùn)行時(shí)長(zhǎng)而變大,最后程序崩潰,說(shuō)明程序使用的資源未及時(shí)釋放,在代碼中發(fā)現(xiàn)有部分使用過(guò)的資源沒(méi)有釋放,導(dǎo)致內(nèi)存泄漏。排除了BUG后,程序運(yùn)行正常。
2、在WEB報(bào)表查詢過(guò)程中,多次點(diǎn)擊查詢導(dǎo)致WEB程序卡死。這由于每次查詢都要讀取數(shù)據(jù)庫(kù)并生成報(bào)表,這個(gè)過(guò)程需要時(shí)間,如果過(guò)于頻繁就容易造成服務(wù)癱瘓。于是使用AJAX和緩存技術(shù),減少頁(yè)面刷新和查詢重復(fù)提交的次數(shù),解決了此問(wèn)題。
3.開(kāi)發(fā)時(shí)的注意事項(xiàng)
1、注意區(qū)分端口入流量和出流量;
2、采集流量時(shí),使用Counter64數(shù)據(jù)類型(無(wú)符號(hào)64位)的OID,有更大的取值范圍;
3、采集到的流量是端口的累積流量,而不是每秒的流量,需要取兩次流量取差值,再除以時(shí)間差;
4、采集設(shè)備時(shí)鐘和流量時(shí),要注意數(shù)據(jù)歸零的問(wèn)題,由于取值范圍有限,設(shè)備的運(yùn)行時(shí)間和累積流量達(dá)到最大時(shí),會(huì)重新開(kāi)始計(jì)數(shù)。所以在取流量差值和時(shí)間差值是,如果差值小于0,就需要再加上當(dāng)前數(shù)據(jù)類型的最大值。
5、用過(guò)的資源要及時(shí)關(guān)閉,以免內(nèi)存泄漏導(dǎo)致系統(tǒng)崩潰。
6、保證數(shù)據(jù)庫(kù)支持的并發(fā)數(shù),避免在數(shù)據(jù)寫(xiě)庫(kù)時(shí)出現(xiàn)瓶頸。
4.結(jié)束語(yǔ)
作者以在遼河油田信息工程公司網(wǎng)管維護(hù)中心工作期間開(kāi)發(fā)的項(xiàng)目為基礎(chǔ), 設(shè)計(jì)了這個(gè)利用SNMP協(xié)議實(shí)現(xiàn)的流量統(tǒng)計(jì)系統(tǒng), 并在實(shí)際使用中對(duì)設(shè)備在線用戶數(shù)和端口流量進(jìn)行采集、入庫(kù),最后用WEB和客戶端的方式生成統(tǒng)計(jì)報(bào)表, 各項(xiàng)功能均能實(shí)現(xiàn)。由于SNMP協(xié)議被廣泛的應(yīng)用在網(wǎng)絡(luò)設(shè)備上,還可以根據(jù)需要對(duì)系統(tǒng)進(jìn)行擴(kuò)展,用來(lái)對(duì)其它支持此協(xié)議的設(shè)備進(jìn)行統(tǒng)計(jì)。希望本論文所寫(xiě)的設(shè)計(jì)方案對(duì)相關(guān)方面的開(kāi)發(fā)設(shè)計(jì)有所借鑒。
參考文獻(xiàn):
[1]陳海蓉,張玉明. SNMP 協(xié)議及其應(yīng)用開(kāi)發(fā). 華北電力大學(xué)學(xué)報(bào). 2001,28(3)
[2]邵 旭,劉 紅,傅海陽(yáng). SNMP Agent 和嵌入式 Web網(wǎng)管系統(tǒng)的研究與綜合設(shè)計(jì). 北京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版). 2001,24(4)
(遼河油田信息工程公司 ?遼寧 盤錦 ?124010)