童辰+陈慧+季海
摘要
本文分析归纳了SNMP协议查询网络设备MIB的共性模式,提出一套通用的MIB信息采集流程,隔离了不同网络设备0ID号不一致的差异性。设计基于消息队列的Trap消息处理流程,在性能和能耗之间取得较好的平衡。最后使用Java语言基于B/S架构实现了该系统。
【关键词】SNMP Trap 通用数据采集 消息队列 线程池
简单网络管理协议(SNMP)是由IETF定义的一套网络管理协议,常见的网络传输设备均支持该协议。利用该协议,网络管理程序可以获取网络传输设备的基本信息、内部模块运行状态、端口流量、告警事件等信息,是网络管理软件的核心功能。而网络设备不同种类、不同品牌、不同型号提供的信息获取索引均有所差异,单独为每一个网络设备编写数据采集程序必然费时费力,所以亟需一套通过的数据采集框架,可以极大的减少网络设备数据获取的成本。
1SNMP协议分析
SNMP协议的使用者为网络管理软件,操作对象为网络设备中的代理程序,包括两种使用方式。查询式。程序通过SNMP协议的snmpget和snmpwalk命令查询代理程序,代理程序对外暴露的接口为一个MIB,这是一个多叉树,每个树节点用一个数字表示。上报式。代理程序发现有如链路故障、部件故障等信息时可主动将该信息进行上报,又称为trap。
2通用数据采集系统设计
2.1功能描述
通用数据采集系统支持查询式和上报式两种网络设备信息获取模式,包含两个模块实现以上两种方式的信息获取。查询式获取网络设备中的MIB节点值,对查询的方式分析总结形成通用模板,进行简单配置即可使网络管理软件接入新设备的查询信息。上报式通过消息队列缓存各类trap信息,并启用多线程格式化、过滤并交网络管理软件显示。
2.2通用MIB查询模块
snmpget和snmpwalk命令均查询MIB节点值来获取信息,MIB是一个多叉树。每个节点有一个数字标识,节点的唯一标识为从根节点到该节点的数字序列。虽然每个OID号对应的值均有实际意义,但是不同设备该意义的OID号不一致,每一类设备写一套MIB信息采集代码,工作量大,这是MIB信息采集的困难所在。下面将MIB表示的实际含义与MIB号的映射关系整理为4种典型情况。
2.2.1单节点
通常该节点为mib树的叶子节点,使用snmpget命令,输入节点OID号即可获得某设备该节点的信息。新增设备时,只需要修改OID值,程序即可自动获取信息。
2.2.2—组节点
如果获取的节点自身有一层子节点,且子节点标识同一种类型部件,如图1所示,fan标识风扇,可以使用snmpwalk命令,输入fan节点oid号,获取fanl、fan2、fan3—组值。2.2.3多组节点
如图1所示,对于端口信息,多个端口会有多组值,首先需要获取端口数目,即节点portNum值为3。Port节点的所有属性均有与节点数目相同的子节点数,使用snmpwalk命令扫描port节点得到各自属性混杂在一起,对需要提取的属性可以针对其OID号特征设置筛选条件。
2.2.4多节点逻辑处理
一些网络参数需要进行逻辑运算才能得到,运算的过程无共性,需要单独函数处理,则在配置文件中建立参数名称和处理函数的映射关系。
2.3Trap上报处理模块
Trap消息是网络设备在检测到自身意外情况时利用SNMP协议主动上报的信息。若发生故障Trap消息数量会短时间内呈指数级增长,为保证每一条Trap消息均得到处理,使用消息缓存队列,在消息数量暴增时先缓存下来,处理使用线程池技术根据队列长度动态计算需要开辟的线程数量,既保证了消息剧增时计算机最大运算能力处理,也在正常情况下使计算机处于合适功耗。
3通用數据采集系统实现
系统使用Java语言开发,通用MIB查询模块中使用List