房永興,孫曉瑜,宮利輝
(遼河油田信息工程公司網管維護中心,盤錦 124010)
為了解決網管維護中心人工流量統計效率低下的問題,決定自己動手開發一個流量統計系統,完成數據自動采集和生成報表的功能。要實現流量統計系統,需要有一臺主機用來運行數據采集程序,并且主機到各交換機的網絡必須可達,所以先要為主機分配一個IP地址,然后在網絡設備上配置相應的路由,以保證主機可以訪問所有交換機。需要一臺數據庫服務器,程序采集到的數據需要寫入數據庫中。最后開發一個客戶端程序讀取數據庫生成報表,如果使用B/S架構,還需要一臺WEB服務器。圖1為系統結構圖:

圖1 系統結構圖
該系統需要具備如下功能:數據的采集、數據入庫、生成報表。需要生成的報表有以下幾種:流量實時曲線報表、流量峰值報表和圖表、流量分析報表。
SNMP是在TCP/IP協議棧之上的應用層協議,由三個部分組成:管理信息結構(SMI)、管理信息庫(MIB)和SNMP協議。本文主要使用V2版本的SNMP協議,對OID進行讀取。
(1)編程語言:本系統服務器端使用JAVA語言進行開發。(2)協議開發工具:SNMP4J它是用JAVA來實現SNMP協議的開源項目。(3)WEB服務器:JBOSS它是一個基于J2EE的開放源代碼的應用服務器。(4)MVC框架:SSH為struts+spring+hibernate的一個輕量級集成框架,是目前較流行的一種Web應用程序開源框架。(5)報表工具:JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫,本系統使用此工具在WEB頁面上生成曲線報表。(6)數據庫:本系統使用的是SQLSERVER2000數據庫。(7)輔助工具:MIBBrowser是一個免費的工具,可以利用SNMP協議讀取設備的MIB。
本系統需要采集的流量有用戶數和數據流量。其中用戶流量主要針對BAS認證設備。用戶數的采集比較簡單,對于華為的MA5200F設備,用戶流量的OID是.1.3.6.1.2.1.31.1.1.1.6.161071923 1,可以參考CACTI中的OID值,也可以利用MIBBrowser進行數據遍歷,同時使用交換機命令display access-user來進行數據的核對。
把流量采集的代碼包裝成JAVA對象,并實現Runnable方法。另外把所有的網絡設備以自定義的格式寫到文本文件里,用來做配置文件,里面記錄每個設備的IP地址、共同體、OID等。使用程序讀取配置文件,每個設備生成一個Runnable對象,就可以使用多線程的方式進行流量采集了。

圖2 流量采集監視
數據庫使用的是SQLSERVER2000,最主要的表有兩個,分別記錄了所有的設備端口流量和在線用戶數。這兩個表都有要設備類型、設備名稱和采集時間等字段。為了加速統計每日的流量峰值,還需要增加一個記錄每日峰值的表,定時的把每日的峰值錄入表中。系統5分鐘記錄一次數據,運行時間久了數據量也是很大的,所以還要為數據庫增加索引,以提高查詢速度。
流量的數據采集入庫完成以后,剩下的就是報表或圖表的生成了??梢愿鶕枰筛鞣N樣式的圖表,以下是使用Delphi和JAVA生成的報表。

圖3 Delphi曲線報表

圖4 JFreeChart流量報表

圖5 JFreeChart帶寬分析曲線報表
(1)在程序測試運行階段,定時觀察程序的運行內存,發現內存占用隨著運行時長而變大,最后程序崩潰,說明程序使用的資源未及時釋放,在代碼中發現有部分使用過的資源沒有釋放,導致內存泄漏。排除了BUG后,程序運行正常。
(2)在WEB報表查詢過程中,多次點擊查詢導致WEB程序卡死。這由于每次查詢都要讀取數據庫并生成報表,這個過程需要時間,如果過于頻繁就容易造成服務癱瘓。于是使用AJAX和緩存技術,減少頁面刷新和查詢重復提交的次數,解決了此問題。
(1)注意區分端口入流量和出流量;
(2)采集流量時,使用Counter64數據類型(無符號64位)的OID,有更大的取值范圍;
(3)采集到的流量是端口的累積流量,而不是每秒的流量,需要取兩次流量取差值,再除以時間差;
(4)采集設備時鐘和流量時,要注意數據歸零的問題,由于取值范圍有限,設備的運行時間和累積流量達到最大時,會重新開始計數。所以在取流量差值和時間差值是,如果差值小于0,就需要再加上當前數據類型的最大值。
(5)用過的資源要及時關閉,以免內存泄漏導致系統崩潰。
(6)保證數據庫支持的并發數,避免在數據寫庫時出現瓶頸。
本文以在遼河油田信息工程公司網管維護中心工作期間開發的項目為基礎,設計了這個利用SNMP協議實現的流量統計系統,并在實際使用中對設備在線用戶數和端口流量進行采集、入庫,最后用WEB和客戶端的方式生成統計報表,各項功能均能實現。由于SNMP協議被廣泛的應用在網絡設備上,還可以根據需要對系統進行擴展,用來對其他支持此協議的設備進行統計。