张 格 代月川 韩跃龙
(郑州大学西亚斯国际学院 河南 451150)
在互联网高速发展的今天,以“校园网”为代表的园区型网络已经普遍应用于世界各个角落,对该类型网络的监控与管理已成为业界长期研究和实践的一个重要方向。本文在对传统“园区网监控体系”实现的基础之上,以增加主动预警机制来进一步拓展其可管理性及应用领域,整套系统以基于Python和PHP的开发环境设计并实现。
该系统整体上划分为“核心业务层”和“业务表现层”两个部分,核心业务层使用Python的NETSNMP模块与受监控设备(Agent)进行通信,根据业务需求获取Agent相应数据,如:单位时间内某端口流量、某端口状态改变后Agent发送的Trap包等,所获数据将根据类型进行分路处理,周期性监控数据由Python的rrdtool模块进行存储及构图,触发式Trap数据将与“预设阀值”比对后传递给“业务表现层”以预警的方式展现;业务表现层采用基于PHP的Codeignteri搭建,主要承担系统管理,如:帐号管理、数据备份、用户权限、设备属性记录、预警阀值设定等,同时也作为系统界面展现的基础平台。
SNMP(简单网络管理协议)由SNMP代理和SNMP管理者两个部分组成。网络中每个设备都运行着SNMP代理进程,它将侦听端口上SNMP消息并随时记录者网络上的各种情况。网络管理程序发送到每个代理上的SNMP消息将包含有想要收集或者修改管理对象的列表,用来查询或者修改代理所记录的信息。SNMP共提供了5种操作来完成网络管理,Get用于获取特定的对象,Get-Next用户获取不知道确切名称的对象,Set用于修改或者创建对象,Get-Response回答取操作,Trap可以查找特定的事件并检测,发送一个Trap消息给预先配置好的管理工作站。
SNMP代理用Get-Response消息响应Get报文。如果需要查询信息,则使用Get-Next获取指定表中一个对象的下一个对象,以遍历整个表。如果要求改变代理的配置,则使用Set报文,常用于对网络设备的配置。SNMP Trap是SNMP代理发送给管理站的非请求消息,该消息通知管理站发生了某种特定的事件,该特性为主动预警提供了原始实现机制。
在使用Python实现核心层业务时,主要需解决三个问题。第一,如何获取监控对象的状态数据,如端口流量、CPU利用率、并发连接数、TRAP报文等;第二,用何种方式存储所获得的数据;第三,如何将所获数据计算并生成统计视图。
Net-SNMP是操作SNMP协议的开源软件,它提供包括了Python在内的多个编程语言的类库,除安装之外,在Ubuntu 12.04版本下我们需添加libsnmp-python关联包:
Si as@s1:~$ sudo apt-get install libsnmp-python
为了获取监控数据,我们首先需要获得监控对象的OID(对象识别符)或MIB值,以防火墙上“聚合链路端口”为例:
市面上支持MVC的开发框架比较多,之所以选择CodeIgniter是因为其配置简单, 全部的配置使用PHP脚本来配置, 执行效率高; 具有基本的路由功能, 能够进行一定程度的路由, 具有初步的Layout功能, 能够制作一定程度的界面外观; 数据库层封装的不错, 具有基本的MVC 功能, 而且使用简单方便, 分控制、模型、视图3块进行程序编写, 控制负责在模型和视图之间传递数据, 模型负责读取数据库, 视图负责收集和显示数据。
SNMP Trap是SNMP代理自动发送给管理站的非请求消息。这些消息通知管理站被管网络发生了一个特定的事件。由于其无需管理者干预的非请求性和事件驱动机制,Trap消息 的接收和处理是网络自动监控系统实现的关键环节。
SNMP约定网络管理站采用PDU的162号端口作为通信端口接收Trap消息。每个SNMP Trap即为一个PDU数据包,其中一般陷阱在所有支持 SNMP的系统中都一致,该域为以下7 个值的1 个:
codestart:发送SNMP 的实体重新初始化自身,并改变代理的配置或协议实体的实现。这是由意外或严重错误引起的重起。
warmstart:发送SNMP 的实体重新初始化自身,但不改变代理的配置或协议实体的实现。这是一种常规的重起。
Link Down:告知一个代理的通信连接失败,在variablebinding 的第一个元素是接口的ifIndex实例的名字和值。
authenticationFailure :告知管理站收到一个认证失败的协议消息。
egpNeighborLoss : 告知管理站一个EGP(外部网关协议)邻居(发送协议实体的EGP 对等实体)被标为down,对等关系不再存在。
enterpriseSpecific:告知管理站发生了某些厂商自定义的事件。特定陷阱指出陷阱的类型。
由上可见,Trap消息不仅可以提供网络的故障信息,还可以提供网络安全和性能信息。代理中Trap的发送是自动实现的,而在管理站,Trap的接收和解析需要编程实现。因此,在SNMP 管理站中,需要运行一个后台进程,负责接收和确认SNMP请求及Trap信号、处理请求并返回结果、向配置文件中的所有主机发送Trap信号。
采用SNMPTrap机制进行网络故障检测,可以有效地减少网络带宽占用,及时发现问题。当管理站接受报告时,可以采取相应的行动,对报告的代理及附近的代理做轮询,以获得更多关于异常情况的详细信息,从而实现主动预警机制。
[1] 洪英,孙亚民,SNMP Trap机制在网络故障管理中的应用[J],”网络纵横”,2003,8
[2] 顾大刚,基于MVC模式的PHP开发框架Codeigniter[J] 江西科学,2009.10
[3] 区海平, 寿国础,基于MIB定义的SNMP分析系统及实现[j]。计算机应用,2009.1
[4] 牟鹏至,基于SNMP的网络故障管理功能的研究与实现[J]。电脑知识与技术,2012.1
[5] 史蒂文斯. TCP/IP 详解(卷1:协议) [M]. 范建华,译.北京:机械工业出版社,2007.
[6] 张蓉. 基于网络拓扑的告警相关性分析[D].北京:北京邮电大学硕士学位论文,2008