简介 mrtg(multi router traffic grapher,mrtg)是个监视网络链路流量负载的工具软件,他通过snmp协议从设备得到设备的流量信息,并将流量负载以包含png格式的图像的html文件方式显示给用户,以非常直观的形式显示流量负载(能在网站http://www.stat.ee./mrtg/得到mrtg的输出结果示例)。
关于mrtg的最周详的信息能从http://people.ee./~oetiker/webtools/mrtg得到。 mrtg具有以下特色: 可移植性:目前能运行在大多数unix系统和windows nt之上。 mrtg兼容性 mrtg软件能运行在以下的操作系统上: linux 1.2.x, 2.0.x, 2.2.x, 2.4.x (intel and alpha and sparc and powerpc) 能通过mrtg监视的设备(目前市场上绝大多数产品都支持snmp协议,只要支持snmp协议的设备就都能使用mrtg来监视): 3com netbuilders, lanplex 6012 and 2500 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中定义,该版本采用了基于一起体名的安全机制; 运行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的安装设置 安装支持软件 我们这里以rehat7.2为例子讨论mrtg的设置和安装。要安装mrtg需要安装以下软件包:gcc、perl、gd、libpng和zlib。能使用下面的命令来判断系统是否安装有这些软件包: [root@mail doc]# rpm -qa|grep gd [root@mail doc]# rpm -qa|grep perl [root@mail doc]# rpm -qa|grep libp [root@mail doc]# rpm -qa|grep zlib 如果发现哪个软件包没有安装,只需直接从redhat安装盘安装对应的rpm包即可,例如: mrtg的安装 目前mrtg的最新版本为2.9.17: [root@mail src]# tar xvfz mrtg-2.9.17.tar.gz 到目前我们就已正确地安装了mrtg系统。 设置snmp服务 对于不同的设备,设置snmp支持的方法是不一致的,具体请参考设备的随机文件,一般里面都有周详的介绍。这里我们讨论在linux环境下设置snmp服务器,以实现对本机流出流入数据的分析和报表(我的应用环境是使用linux带动一个小型局域网上网,监视本机进出流量)。 在linux环境下安装snmp软件包是非常容易的,只需要安装相应的软件包即可: [root@mail doc]# rpm -qa|grep snmp 这时候运行下面的命令: [root@mail doc]# /etc/rc.d/init.d/snmpd start 如果命令输出如上所示,就表示snmp服务器启动正常。 为了配合mrtg使用,还要修改snmpd的设置,以使其允许mrtg读取其interface(网络接口)流量数据。 vi /etc/snmp/snmpd.conf 将 #view systemview included mib2 的内容修改为: view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc 然后将 access notconfiggroup "" any noauth exact systemview none none 修改为: access notconfiggroup "" any noauth exact mib2 none none 然后再重新启动snmpd: /etc/rc.d/init.d/snmpd restart 设置mrtg 下一步就是要设置mrtg,实现对网络设备的监视。mrtg的设置信息都是保存在mrtg.cfg文件中的,创建该文件并且在其中定义希望的监视特性。幸运的是一般不必直接手工编辑该设置文件,因为mrtg软件包提供有cfgmaker设置工具,这是个脚本文件,根据运行参数能自动生成mrtg.cfg设置文件。在mrtg源码目录的bin子目录下你能得到该工具。 首先在www服务器的documentroot目录下创建一个子目录用来存放mrtg生成的统计文件,这里假设apache是默认安装,因此documentroot在/var/www/html目录下,我们在该目录下创建子目录mrtg: mkdir /var/www/html/mrtg 这里的/var/www/html/mrtg就是mrtg的工作目录。下面就生成mrtg设置文件: cfgmaker --global "workdir: /var/www/html/mrtg" 这里的--global参数表示后面的选项是对后面指定的设备都是有效的(如果希望对多个设备进行监视时,该参数就会发生作用)。workdir用来指示mrtg的工作目录;options用来指定一些特定的选项,这里的growright,bits是用来指定默认options设置的,对于常见的应用来说默认options设置就能满足需求了。ifref用来指示用什么选项来标识设备接口,这里指定使用ip地址来标识网络设备接口。ifref能指定为nr、ip、eth、descr、name。nr表示用接口在mibii库中interface接口的ifindex来识别接口;ip表示使用ip地址识别接口;eth表示使用接口的物理地址标识接口;descr表示使用接口的描述信息来标识接口;name表示使用接口名来标识接口。一般来说ip地址是唯一的,不过有些情况下接口是没有ip地址的,例如交换机就会出现这种情况。对于接口来说nr(接口号)是唯一的,因此对于一般情况使用ip地址就能了,而对于其他一些情况则需要采用nr了。"--output /etc/mrtg.cfg"标识将生成的设置文件存放在/etc/目录下。"public@192.168.0.1"表示监视ip地址为192.168.0.1的设备,采用public作为一起体名通过snmp协议来监视设备192.168.0.1。 对于希望使用mrtg来对多个设备进行监视的情况,举例如下: cfgmaker --global "workdir: /var/www/html/mrtg" 这里指示监视四个设备:router1.place.xyz、router2.place.xyz、switch1.place.xyz 对于我这里的应用环境来说,生成的mrtg.cfg内容如下: # created by
# for unix # or for nt ### global defaults # to get bits instead of bytes and graphs growing to the right workdir: /var/www/html/mrtg ######################################################################
# # maintainer: root (configure /etc/snmp/snmp.local.conf) # description: lo # iftype: softwareloopback (24) # ifname: # max speed: 10.0 mbits/s # ip: 127.0.0.1 (localhost) #
target[192.168.0.1_211.99.43.158]: /211.99.43.158:public@192.168.0.1:
system: 192.168.0.1 in unknown (edit /etc/snmp/snmpd.conf) maintainer: root (configure /etc/snmp/snmp.local.conf) description: eth0 iftype: ethernetcsmacd (6) ifname: max speed: 10.0 mbits/s ip: 211.99.43.158 (192.168.0.1)
target[192.168.0.1_192.168.0.1]: /192.168.0.1:public@192.168.0.1: system: 192.168.0.1 in unknown (edit /etc/snmp/snmpd.conf) maintainer: root (configure /etc/snmp/snmp.local.conf) description: eth1 iftype: ethernetcsmacd (6) ifname: max speed: 10.0 mbits/s ip: 192.168.0.1 (192.168.0.1)
运行mrtg 一旦生成正确的设置文件,就运行下面的命令: /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg 这将查询被监视的设备并在工作目录下创建初始的流量图和web页面,在前三次运行时可能会报告遗失日志文件的告警信息,不要理睬这些信息,只需要连续运行三次以后再运行就不会产生告警信息了。如果仍然出现告警那么就需要察看问题出在哪里了。 使用手工运行mrtg并不能定时产生适当的统计信息,因此最佳还是定时自动运行mrtg来生成统计信息,默认为五分钟运行一次。作为root身份crontab -e进入编辑状态,添加内容如下: */5 * * * * /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg 然后就能通过浏览器访问地址http://192.168.0.1/mrtg/选择适当的接口地址察看流量信息了。如果希望生成类似于http://www.stat.ee./mrtg/的信息,就需要自己手工编辑一个index.html文件存放在/var/www/html/mrtg目录下,内容为接口说明及该接口的日统计信息的图即可。 |
|