基于SNMP数据采集模块的设计和实现
,但是这里就存在一个采集频率的问题。
数据采集频率的确定,是一个与网络带宽权衡的过程。采集频率过低,占用网络资源相对较少,但是数据的更新周期相对较大,不能反映参数的真实变化情况;采集频率过高,数据更新自然较快,但是在采集周期内所占用的网络资源就会很大,增加网络设备的负担,甚至有可能会影响到正常的网络通信。因此在确定数据采集的频率时,必须根据实际的网络带宽资源进行考虑,同时还要考虑被管设备中被管对象的数量。
在动态信息的访问过程中,还存在另一个问题。如果按照串行操作,依次访问所有设备的被管对象,由于对象数目众多,将会占用很长的处理时间(甚至超出既定的采集周期,这个问题也是确定采集频率需要考虑的),导致访问工作不能正常进行。为了保证管理进程能够在采集周期内完成对所有被管对象的访问,这里采用多线程技术来完成对象的访问工作。对于同一被管设备,采用独立的子线程进行访问,这样一来既可以保证在一定周期内完成对所有被管对象的访问,也使得各个子线程保持相对的独立性,互不干扰。
在对象访问过程中,为减少管理进程和代理进程之间报文交换的次数,可以将不同对象绑定到同一个协议数据单元(PDU)的变量列表中,或是采用SNMPv2中新增加的GetBulkRequeST-PDU。文献[5]和[6]中还讨论了有效获取MIB对象的方法。
3 数据采集模块的设计和实现
针对不同的数据采集方式,采用不同线程来完成数据采集工作。
3.1 告警信息接收线程
对于告警信息的被动接收,管理进程单独开启一个线程用来专门监听陷阱端口,接收并处理所有来自网管代理的告警(Trap)消息。在网络管理过程中,无论在性能管理、故障管理、还是安全管理等功能域,告警功能都是很重要的。这里主要利用SNMP Trap机制实现实时告警功能。
3.2 静态信息获取线程
对于静态信息的采集,管理进程同样为他单独开启一个线程来进行静态信息的收集。由于静态信息不随设备的运行而变化(一般不进行手工设置,静态信息保持不变),就没有必要重复地访问这类信息。本线程就是依据这一点,在对所有静态对象访问一次之后,将采集到的管理信息入库存储。应用程序对这类数据的操作只需访问本地数据库即可。如此就减少了对非实时变化信息的访问,同时也减少了冗余信息的存储。要指出一点,静态信息的改变一般是由于手工配置引起的,因此需要跟踪配置操作对相应的信息做出及时的更新。
3.3 动态信息轮询线程
对于动态信息的采集,管理进程也开启一个主线程用来专门负责动态信息的轮询工作。为了保证数据的实时性,就需要按照一定的时问间隔定时访问被管对象以获取最新的数据。对有关数据进行统计和分析,就能掌握动态信息的变化趋势,为故障管理、性能管理、计费管理等网络管理功能提供必要的数据支持。
为了使访问工作在规定的时间间隔内完成,避免串行执行带来的长周期问题,采用多个轮询子线程各自负责属于自己的管理对象子集。所有轮询子线程的工作结束后,这一次的访问工作便完成,即轮询主线程进入等待,直到下一次轮询点的到来或是接收到终止轮询主线程的命令。
4 结语
数据采集模块是网管系统对整个网络实时有效、可靠管理的前提和基础。本文首先分析了利用SNMP++开发包实现MIB对象访问的方法。在此基础上,根据不同的数据采集对象性质,对数据采集策略进行了探讨,提出了面向不同对象类型采用多线程技术进行数据采集的方法。最后,结合实际开发工作,对数据采集模块(特别是其中的动态信息轮询线程)做了详细的介绍。本文提供了一个高效、稳定的数据采集方案,并已在实际的网管系统中得到应用,取得了较好的效果。
- 基于SNMP的电源设备管理无线传输系统的框架组成(11-17)
- 基于SNMP的通信网络性能管理模块设计(08-30)
- 基于SNMP的校园网管理系统设计(10-14)
- SNMP协议在WAGO工业以太网系统中的应用(11-04)
- 论计算机时间与NTP时间一致的重要性(09-05)
- 基于计算机的测量仪器的内部和外部校准(10-08)