一、MRTG的简介

Mrtg(Multi Router Traffic Grapher,MRTG)是一个监控网络链路流量负载的工具软件,它通过snmp协议从设备得到设备的流量信息,并将流量负载以包含PNG格式的图形的 HTML文档方式显示给用户,以非常直观的形式显示流量负载(可以在网站http://www.stat.ee.ethz.ch/mrtg/)得到 mrtg的输出结果示例。

关于mrtg的最详细的信息可以从http://people.ee.ethz.ch/~oetiker/webtools/mrtg 得到。

mrtg具有以下特色:

可移植性:目前可以运行在大多数Unix系统和Windows NT之上。

源码开放:Mrtg是用perl编写的,源代码完全开放。

高可移植性的SNMP支持:Mrtg采用了Simon Leinen编写的具有高可移植性的SNMP实现模块,从而不依赖于操作系统的SNMP模块支持。

支持SNMPv2c:MRTG可以读取SNMPv2c的64位的记数器,从而大大减少了记数器回转次数。

可靠的接口标识:被监控的设备的接口可以以IP地址、设备描述、SNMP对接口的编号及Mac地址来标识。

常量大小的日志文件:MRTG的日志不会变大,因为这里使用了独特的数据合并算法。

自动配置功能:MRTG自身有配置工具套件,使得配置过程非常简单。

性能:时间敏感的部分使用C代码编写,因此具有很好的性能。

PNG格式图形:图形采用GD库直接产生PNG格式。

可定制性:MRTG产生的web页面是完全可以定制的。

mrtg的主页是http://www.mrtg.org,可以从这里下载软件。

二、SNMP的简介

一 个网络管理系统一般要包含以下几个元素:①若干个(可能很多个)需要被管理的网络设备节点,如路由器、服务器等设备,每个节点上都运行着一个称为设备代理 (agent)的应用进程,其实现对被管理设备的各种被管理对象的信息如流量等的搜集和对这些被管对象的访问的支持;②至少一个管理工作站,该管理站运行 着管理平台应用系统,实现为管理员提供对被管设备的可视化的图形界面,从而使管理员可以方便的进行管理;③一个管理协议,用来定义设备代理和管理工作站之 间管理信息传送的规程。其中管理协议的操作是在管理框架下进行的,管理框架定义了和安全相关的认证,授权,访问控制和加密策略等各种安全防护框架。

在运行TCP/IP协议的互联网环境中,管理协议标准是简单网络管理协议(Simple Network Management Protocol,SNMP),其定义了传送管理信息的协议消息格式及管理站和设备代理相互之间进行消息传送的规程。

出 于业界对网络管理协议标准化的迫切要求的驱动,IETF于1990发布了SNMPv1的正式RFC文档;其设计思想重点放在保证协议的简单性、灵活性和可 扩展性上,并希望把SNMP作为一个过渡性的网管协议来作为实现对互连的网络设备进行管理时遵循的标准,待OSI的网络管理协议—CMIP的开发、实现和 标准化成熟和完善到可以在业界推广之后,再用CMIP来替换SNMP。但是由于各种的原因,CMIP并没有替代SNMP,而SNMP发展为业界的标准。

SNMP一共发展有3个主版本,分别为SNMPv1 ,SNMPv2和SNMPv3。其中SNMPv2又分为若干个子版本,其中SNMPv2c应用最为广泛:

SNMPv1: 是第一个正式协议版本,在RFC1155-RFC1158中定义,该版本采用了基于共同体名的安全机制;

SNMPv2c: 这个版本被称为基于共同体名的SNMPv2,使用基于共同体名的安全机制和SNMPv2p做出的协议操作方面的扩充,由RFC1901-RFC1906定义;

SNMPv3: 该协议版本采用基于用户的安全机制,其安全机制是在SNMPv2u和SNMPv2*基础上进行大量的评议以后进行了更新,并且对协议机的逻辑功能模块的进行了划分而保证了良好的可扩充性,由RFC2271-RFC2275所定义。

运行SNMP管理系统的原理及SNMP协议

使 用SNMP协议的网络管理系统管理结构工作一般包括:管理进程通过定时向各个设备的设备代理进程发送查询请求消息(以轮询方式),来跟踪各个设备的状态; 而当设备出现异常事件如设备冷启动等时,设备代理进程主动向管理进程发送陷阱消息,汇报出现的异常事件。这些轮询消息和陷阱消息的发送和接受规程及其格式 定义都是由SNMP协议定义的;而被管理设备将其各种管理对象的信息都存放在一个称为管理信息库(Management Information Base)库结构中。

其中SNMP协议是运行在UDP协议之上,它利用的是UDP协议的161/162端口。其中161端口被设备代理监听,等待接受管理者进程发送的管理信息查询请求消息;162端口由管理者进程监听等待设备代理进程发送的异常事件报告陷阱消息,如Trap。

设备的所有的需要被管理的信息被看作一个各种被管理对象的集合,这些被管理对象由OSI定义在一个被称作管理信息库(Management Information Base,MIB)的虚拟的信息库中。

管理对象库MIB

MIB 是一个按照层次结构组织的树状结构(定义方式类似于域名系统),管理对象为定义为树中的相应叶子节点。管理对象是按照模块的形式组织,每个对象的父节点表 示该种对象属于上层的哪一个模块。而且OSI为树中每一层的每个节点定义唯一的一个数字标识,每层中的该数字标识从1开始递增,这样树中的每个节点都可以 用从根开始到目的节点的相应的标识对应的一连串的数字来表示,如1.3.6.1.2.1.1表示了MIBII中系统组子树,而 1.3.6.1.2.1.1.1.0表示系统组中的系统描述(sytem Descrption)对象。每个对象的一连串数字表示被称为对象标识符(Object Indentifier,OID)。

相关的一组对象的集合被定义为一个MIB模块。这些模块使用OSI的抽象语法标记(Abstract Syntax Notation One,ASN.1)的一个子集写成。该子集被定义为管理信息结构(Management Information,SMI)。

SNMP的消息在发送和传输时消息是采用基本编码规则(BER)对消息进行编码。

SNMP基本的标准MIB库是MIBII,具体请参考RFC 1213。

SNMP协议操作

SNMP提供有三类操作,分别为Get,Set和Trap。

Get操作实现对被管理对象所表示的管理信息的读操作。在SNMPv1中,GET操作具体一共有两种形式

Get 和GetNext操作: Get操作指示直接读取操作参数指定的OID所表示的被管理对象的管理信息值。GetNext操作指示读取操作参数指定的OID所表示的被管理对象在 MIB树中按照字典顺序的下一个被管理对象的管理信息的值。在SNMPv2中,增加了一种GetBulk操作,其是Get和GetNext的综合,是为了 提高对被管理信息的访问的效率而增加的。

Set操作实现对被管理对象的管理信息进行写操作,其实现直接对操作参数指定的OID所表示的被管理对象对应的管理信息的值的设置。

前 面几种消息是由管理工作站主动实现对被管理设备进行轮询访问时发出以得到被管理设备的各种信息;而在被管理设备出现异常事件需要及时向管理工作站报告时, 就需要Trap操作,该操作实现被管理设备向管理工作站报告设备上出现的异常事件,如网络接口出现故障或恢复工作,设备重新启动等信息。另外在 SNMPv2中新增加了一种Inform操作来实现管理站与管理站之间的通信。

其中上述操作的消息都可以在操作参数中一次指定一个或多个管理对象OID信息,也就是说一个消息一次可以实现对多个被管理对象的操作。

SNMPv1和SNMPv2c采用了一种简单的基于共同体名的安全机制:

管 理站和被管设备上都存储有该充当密码作用的共同体名;消息发送者(一般是管理者)在要发送的消息中的共同体名字段中填入对应于接收者的共同体名,然后以明 文方式在网络上发送消息,接收方(被管理设备)接收到消息以后,如果消息格式是正确的,则读取该字段,与自身保存的共同体名相比较,来实现对发送消息者的 认证。在一些实现中,对应于每个共同体名还有一个机器地址列表,来表示只有地址在这个列表中的机器使用该共同体名发送的消息才认为是可信的。这里的共同体 名就担任密码的作用。同时对应于每个共同体名都有一个访问控制权限,可能值为读或读写。只有请求的操作和使用的共同体名的权限一致才允许进行。

详细情况请参考RFC 1157、RFC 1902、RFC 2273、RFC 2274。

三、配置MRTG+SNMP

1、检查软件包(都在RHEL5光盘中)

gd-2.0.33-9.4.el5
gd-devel-2.0.33-9.4.el5
perl-5.8.8-18.el5
mod_perl-2.0.4-6.el5
libpng-1.2.10-7.1.el5
libpng-devel-1.2.10-7.1.el5
gcc-4.1.2-44.el5
gcc-c++-4.1.2-44.el5
zlib-1.2.3-3
zlib-devel-1.2.3-3
httpd-2.2.3-22.el5
net-snmp-5.3.2.2-5.el5
mrtg-2.11.1.tar.gz 这个我们用源代码包
检查装有没有上面rpm包,没安装的话使用yum安装

2、配置SNMP

被管理站地址为:192.168.0.5

[root@localhost Server]# vi /etc/snmp/snmpd.conf

把文件89行的#去掉

view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc

在修改文件62

access notConfigGroup "" any noauth exact systemview none none

改成

access notConfigGroup "" any noauth exact mib2 none none

在文件最后添加

rocommuntity public

3、配置MRTG

配 置mrtg,实现对网络设备的监控。mrtg的配置信息都是保存在mrtg.cfg文件中的,创建该文件并且在其中定义希望的监控特性。幸运的是一般不需 要直接手工编辑该配置文件,因为mrtg软件包提供有cfgmaker配置工具,这是一个脚本文件,根据运行参数可以自动生成mrtg.cfg配置文件。 在mrtg源码目录的bin子目录下你可以得到该工具。

[root@localhost media]# tar -zxvf mrtg-2.11.1.tar.gz -C /usr/local/src/

[root@localhost media]# cd /usr/local/src/mrtg-2.11.1/

[root@localhost mrtg-2.11.1]# ./configure --prefix=/usr/local/mrtg

[root@localhost mrtg-2.11.1]# make && make install

首先在www服务器的DocumentRoot目录下创建一个子目录用来存放mrtg生成的统计文件,这里假设apache是默认安装,因此DocumentRoot在/var/www/html目录下,我们在该目录下创建子目录mrtg:

[root@localhost Server]# mkdir /var/www/html/mrtg

再/var/www/html/mrtg下建一个images目录

[root@localhost ~]# mkdir /var/www/html/mrtg/images

[root@localhost ~]# cd /usr/local/src/mrtg-2.11.1/

[root@localhost mrtg-2.11.1]# cp ./images/* /var/www/html/mrtg/images/

然后需要创建一个配置文件:

[root@localhost mrtg-2.11.1]# /usr/local/mrtg/bin/cfgmaker

public@192.168.0.5 --global "WorkDir: /var/www/html/mrtg"

--output=/var/www/html/mrtg/lxy.cfg

修改配置文件:已在root目录下

[root@localhost mrtg-2.11.1]# vi /var/www/html/mrtg/lxy.cfg

将#Options[_]: growright, bits前面的#去掉,在最后加上Language: GB2312
下来运行程序

# /usr/local/mrtg/bin/mrtg /var/www/html/mrtg/lxy.cfg

# env LANG=C /usr/local/mrtg/bin/mrtg /var/www/html/mrtg/lxy.cfg


如果有警告错,多运行几次次,警告错不再出现就ok了。
制作首页:

#/usr/local/mrtg/bin/indexmaker --output=/var/www/html/mrtg/index.html --title="CrazyLinux's mrtg server" /var/www/html/mrtg/lxy.cfg

设定5分钟运行一次:
#crontab -e 编辑模式输入

[root@localhost Server]# crontab -e

*/5 * * * * /usr/local/mrtg/bin/mrtg /var/www/html/mrtg/lxy.cfg

4、启动服务

[root@localhost Server]# service snmpd start

[root@localhost Server]# service http start

http://192.168.0.5/mrtg 你应该就可以看到网络使用情况的曲线了。

本人出自恩师之博客链接地址:

http://crazylinux.blog.51cto.com/259244/159571