張萬輝


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