目前,电信运营商都已建立了IP综合网管系统,这个系统实现了基于IP的网络设备的拓扑管理、性能和告警等多项指标的管理,功能非常强大,但在实际使用过程中发现由于接入层设备种类繁杂,端口数量也非常多,如果全部由这套系统来管理,会加重系统的负荷,造成系统过于庞大,影响实际使用效果。当网络发生故障时,我们希望能最快地发现故障、定位故障并解决故障,因此,要对所有接人设备进行管理,要了解网络的详细运行情况,包括端口数据流量(如端口总速率、数据包速率)、设备运行性能(如CPU利用率)、网络健康状况(如网络时延)等各项指标,并将它们直观地表现出来。因此一款操作简单、功能齐全的流量监测软件将为网络管理提供更多的便利,解决网络管理人员面临的诸多技术问题。MRTG(Multi Router Traffic Grapher)是一个典型的流量监测工具,由于具有良好的可移植性、可扩展性和图形化界面,同时还是开放源代码的免费软件,因此在国际范围内得到了非常广泛的应用。
1 SNMP协议
简单网络管理协议(Simple Network ManagementProtocol,SNMP)是基于TCP/IP的互联网管理协议,它是由SGMP协议发展而来的。SNMP定义了传送管理信息的协议消息格式及管理站和设备代理之间进行消息传送的规程,能对互联网中不同类型的设备进行监控和管理。Internet上的SNMP运行在TCP/IP协议族之上,但是其传输层协议采用的是无连接的UDP而不是TCP。
基于SNMP的网络管理模型包括四个关键元素:网络管理站(NMS)、管理代理(Agent)、管理信息库(MIB)和网络管理协议。SNMP采用了C/S模型的特殊形式——代理/管理站模型,对于网络设备的管理是通过管理工作站与SNMP代理间的交互工作完成的。其工作原理如图1所示。
Agent是常驻在被管对象上的软件,它接收来自NMS的指令和发送响应信息,操作MIB并对网络设备进行监控和配置。NMS和Agent通过发送SNMP消息进行通信。SNMP协议提供了Get,Set和Trap三类操作。SNMP协议利用UDP协议的161/162端口进行通信。在SNMP中,采用了符合ASN.1(AbstractSyntax Notation)规范的对象标识方法OID(ObjectIdentifier),以此来惟一地标识网络所需管理的对象或对象组。如IP协议的OID为{1,3,6,1,2,1,4}。
SNMP从产生到现在一共发展有3个主版本,分别为SNMPv1,SNMPv2和SNMPv3。其中SNMPv2又分为若干个子版本,其中SNMPv2c应用最为广泛,它在计数时使用了64位字长,而SNMPv1使用的是32位。
2 MRTG的工作原理及组成
MRTG(多路由器流量图示器)是一个基于SNMP协议的监控网络流量和主机资源的开放源代码的管理工具。它通过SNMP请求得到被监控对象的流量信息,将这些流量信息以PNG格式的图形表示,并将包含这些图形的HTML文档通过Web方式显示给用户,非常直观地显示流量负载。
MRTG是用Per1和C编写的,可以工作在Unix和Windows NT环境下。MRTG的Perl脚本用以使用SNMP来读取路由器的流量信息,性能高的C程序则用来记录负载数据,创建代表被监控网络连接的图形,这些图嵌入在Web页面中。除了获得每天的详细信息之外,MRTG还可以创建前7天、前4个星期甚至前12个月内网络流量的直观表示。
MRTG主要由4个模块组成:
基础模块 包括定义SMI要求的数据结构,并提供相应的方法通过SNMP操作获取被管对象信息的SNMP模块和MRTG支持模块。
日志文件 MRTG使用的日志文件以ASCII文本形式来记录测得的流量数据,日志文件由Rate Up模块进行更新。
日志更新和绘图工具 在该模块中,MRTG使用C语言程序来完成日志文件的更新和统计图形的生成,与原来用Perl实现相比,大大提高了效率。
配置和网页组织工具 MRTG提供了相关的配置文件生成工具cfgmaker和网页组织工具indexmaker。通过运行cfgmaker,利用SNMP协议读取被管设备中的对象信息,自动生成该设备的框架配置文件。Index-maker通过读取配置文件中的Target描述获得对象信息,并用这些信息组织成该对象的HTML页。
3基于MRTG的流量监测的实现与分析
3.1 MRTG的安装
MRTG是用Perl编写的,它的运行需要Perl的支持,所以在安装MRTG之前必须下载并安装Perl语言。由于MRTG的流量监测是基于Web页面的,必须安装Web服务器软件,在这里选择了运用非常广泛的Apache。在安装MRTG时,选择了目前比较稳定的版本MRTG-2.12.2。
3.2 MRTG的配置
MRTG的配置是实现对网络流量监测的关键,而MRTG的配置信息都保存在mrtg.cfg文件中,对MRTG的配置实际上就是生成和配置mrtg.cfg文件。
在配置系统之前,需要收集以下信息:被监控设备的IP地址或主机名;如果还想监测除字节流量以外的其他信息,需要知道设备的SNMP OID;最后还要知道所监控设备的SNMP共同体认证名(community string)信息,缺省值是public。
MRTG的配置信息都是保存在mrtg.cfg文件中的,创建该文件并且在其中定义希望的监控特性。一般不需要直接手工编辑该配置文件,因为MRTG软件包提供有cfgmaker配置工具,根据运行参数可以自动生成mrtg.cfg配置文件。
首先在www服务器的Document Root目录下创建一个子目录用来存放MRTG生成的统计文件,这里假设apache是默认安装,因此Document Root在/var/www/html目录下创建子目录mrtg。下面就生成MRTG配置文件:
这里的一global参数表示后面的选项是对后面指定的设备都是有效的(如果希望对多个设备进行监控时,该参数就会发生作用)。WorkDir用来指示MRTG的工作目录;Options用来指定一些特定的选项,这里的grow-right,bits是用来指定默认options配置的,对于常见的应用来说默认options配置就可以满足需求了。
3.3设备端口流量监控
可以手工生成配置文件,但对于一般情况,可以使用MRTG自带的脚本来生成配置文件,如:
前面提到,SNMPv1是使用32位字长进行计数,因此如果采集间隔是5 min,所能正确表示的最大流量应该是:
因此,如果链路流量在接近或超过此数值时,计算出来的结果不再准确,这时候便只能使用SNMPv2计数器,在配置MRTG脚本,可以使用public@x.x.x.x.:::::2来指定读取SNMPv2的MIB值。
3.4 PING时延监控
在进行PING时延监控时,我们使用了另一个Perl脚本mrtg-ping,同时也可以监控丢包率,配置文件如下:
从以上例子可以看出,MRTG的监控对象就是Target语句后的内容,这里可以是SNMP的MIB对象,也可是执行脚本得到的数值。由此可以看到,MRTG监控的可扩充性非常好,可以自己编写脚本来获得感兴趣的数据,如服务器CPU利用率、内存利用率、磁盘空间、DNS服务器查询次数、Cache服务器Hit次数、甚至CPU温度等,MRTG都可将它们用直观图表呈现出来。
4结语
综上所述,MRTG在网络管理中的应用是非常有效的。我们只要灵活运用SNMP查询工具、系统状态检测工具,配合Per1编写传回字符串处理程序,即可完成MRTG的外挂程序,最后再搭配合适的MRTG配置命令即可产生另类实时流量统计图表。因此,对MRTG的应用和持续开发,不但可以帮助网络管理员随时掌握网络系统和设备运行状态,还可以降低企业或组织的网络设备维护成本。