论文部分内容阅读
摘 要:为了满足工作需求,本文从网络监控的原理出发,介绍了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)
关键词:网络维护;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)