1 SNMP网络管理模型
SNMP网络管理模型包括四个关键性部件:管理站、管理代理、管理信息库和网络管理协议,如图1所示。
(1)管理站(Manager)是一个独立的设备或者是一个共享网络中的一员,为管理者和网络管理系统提供接口。
(2)管理代理(Agent),一般厂家的网络产品如路由器、交换机等在出厂时都已配置好相关的SNMP管理代理,对于不支持SNMP协议的设备,可以开发委托代理(proxy agent)来支持SNMP协议。管理代理的功能是响应从网管站发出的读取请求(Get)和设置请求(Set),并且给网管站发送事件及告警信息(Trap)。
(3)管理信息库(MIB)存放了该设备上被管对象资源的所有信息,每个被管对象有一个惟一对象的对象标识符(OID)。
(4)SNMP网络管理协议主要具有以下三个功能:取值(Get)使网管站能够从代理处获取相关对象的值;设置值(Set)使网管站能够在代理上设置相关对象的值;告警信息(Trap)使代理能够通知管理站、代理端(Agent)的管理信息库MIB值的重大变化以及其他重要事件发出。
2 性能管理模块的设计
2.1 性能管理模块基本结构
根据上述对SNMP网络管理模型的讨论,设计了一种性能管理模块的基本结构,如图2所示。该性能管理模块主要包括性能数据采集、性能分析和数据管理存储三个部分。其中,数据管理存储主要是针对数据库管理的具体技术,这里主要讨论性能数据采集和性能分析技术及其实现问题。
2.2 性能数据采集
性能数据的采集方式主要有三种:循环定时模式、实时模式和事件驱动模式。
循环定时模式 预先配置好定时时间间隔,由服务器端进行采集,采集的数据存入数据库,也可以根据需要同时发往控制台,用于统计分析的性能参数主要采用该模式进行数据采集。
实时模式 由用户在控制台进行操作,用于采集被管设备的当前性能数据,采集的数据马上送回用户界面,控制台程序在判断其是否超过阈值后,将数据以某种形式实时呈现给用户,本类数据主要用于监测当前性能,一般不存储到数据库,不作为历史数据进行查询。事件驱动模式 通过对关键事件的预定义,Agent在这些事件发生时,向管理者发送Trap报文。事件驱动对监视状态变化不很频繁的对象时用处很大,并且可以在网络设备发生异常情况时,及时向管理者发出报警信息。
2.3 性能分析
性能分析一般分为历史性能分析和实时性能分析。历史性能分析包括对历史信息(如:性能日志及性能报告等)的查询、检索,从数据库提取性能历史数据,进行分析、计算性能指标,再经过统计和整理,以直观的图形显示和表数据来反映性能分析的结果,并生成性能日志,管理员可以设定时间范围,选择该时间段内设备的某种属性信息进行统计,还可以选用各种图形显示方式,直观地查看性能状态。实时性能分析 提供实时数据采集、分析和可视化的工具(如MIB浏览器),可以对流量、负载、丢包、设备温度、内存利用率、网络延迟等网络设备和线路的性能指标进行实时监控,并可设置数据采集的时间间隔。
3 性能管理模块的编程实现
在性能管理模块的开发过程中,可利用SNMP++类库来实现数据采集模块的开发,SNMP++是由HP公司提供的一个开放的软件包,它能够较好地实现SNMP协议,利用它的成员函数get(),getnext(),get-bulk(),set(),trap()可以编程实现对设备和主机性能数据的采集。SNMP++提供跨平台可移植的API。任何使用SNMP++编写的网络管理应用程序,不需要做任何改变就可以移植到其它平台。SNMP++在Target类中提供了超时和重传机制,直接设置参数就可以实现超时和重传功能。同时SNMP++可以运行在各种不同协议之上,它采用面向对象的设计方法,把WinSNMP的API函数封装成一个个相关的类,大大简化了SNMP网络管理软件开发的复杂性和开发难度。以下给出网络性能管理的部分关键对象(表1)和性能参数的计算公式。大多MIB组都提供性能数据变量。
端口状态ifOperStatus有三种取值,1(up)代表当前接口正处于使用状态;2(down)代表当前接口处于关闭状态;3(test)代表接口正处于测试状态。
端口当前状态保持时间=sysUpTime—if-LastChange
对于一段时间丁内,MIB变量值的变化:△(MIB-variable)=MIB-Value(t1)-MIB-Value(t0)
接口收到的包的总数:TOTAL_INPUT_PACK-ETS=△ifInUcastPkts+△ifInNUcastPkts
发出的包的总数:TOTAL_OUTPUT_PACK-ETS=△ifOutUcastPkts+△ifOutNUcastPkts
输入丢包率=△ifInDiscards/(△ifInUcastPkts+△ifInNUcastPkts)*100%
输出丢包率=△ifOutDiscards/(△ifInUcastPkts+△ifInNUcastPkts)*100%
输入差错率=△ifInErrors/(△ifInUcastPkts+△ifInNUcastPkts)*100%
输出差错率=△ifOutErrors/(△ifOutUcastPkts +△ifOutNUcastPkts)*100%
接口输入流量=ifInOctets*8/sysUpTime
接口输出流量=ifOutOctets*8/sysUpTime
接口利用率=((△ifInOctes+△ifOUtOetets)*8)/(T*ifSpeed)*100%
同样可以计算其他参数,如:
IP吞吐量=(△ipInRecieves+△ipOutRequests+△ipForwDatagrams)/T
UDP吞吐量=(△udpInDatagrams+△udpNoPorts+△udpInErrors+△udpOutDatagrams)/T
下面给出了SNMP++编程的关键步骤(标“*”):
4 结 语
基于目前广泛应用的SNMP设计了网络管理系统中的性能管理模块,采用HP公司提供的SNMP++类库和编程工具Visual C++进行了具体实现,该工具可以作为复杂通信网络管理系统设计和实现的参考。随着网络技术的进一步发展,开放、异构的复杂网络管理系统将成为进一步研究的重点。