MRTG 能做什么

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MRTG 能做什么
MRTG 是一套适用范围广泛的流量统计工具,与一般Server的流量分析不同,后者是对Server 产生的log 档进行分析。

而MRTG 则需以SNMP 或外挂程式的方式来收集资料,产生即时统计图。

进一步的比较,Server 的流量分析程式,因为资料内容资讯量较大,比较耗费系统资源,因此通常无法提供即时的统计结果,而是设定成一天执行一次(一般状况而言)。

MRTG 仅只统计2~4个量,资讯相对较为简略,所以系统资源负荷轻,可以提供即时统计,一般是设定成五分钟执行一次。

MRTG 在Linux平台上,已经利用来做以下各式各样的统计(反观Windows平台,因为Microsoft并未开放系统,资讯整合困难,开发的人也不多):
系统资源负荷量统计,例如:磁碟空间、CPU用量、记忆体用量......等等Server流量统计,例如:Mail、News、DNS、Web、BBS、IRC、MUD......等等网路设备流量统计,例如:防火墙、Router、Switch、拨接终端机、ATM交换机......等等
另类统计,例如:Modem流量、Login人数、雷神之槌连线游戏人数......等等
以MRTG 的机制来说,它会以SNMP 通讯协定去询问Router,然后将传回来的数值画成统计图。

或者去执行一支外挂程式,该程式将要统计的数值传回来,然后MRTG 只负责将它画成统计图。

上面所提各种场合的应用,除了Router、Switch 之外都是利用外挂程式的方式,来达成目的。

在此我将不详叙如何撰写外挂程式,而把重点放在安装与Router 流量统计的建立。

如果您不是很熟悉Router 或者不太了解网路机制无法独立侦错,请不要贸然在对外提供服务的机器上安装测试。

MRTG 哪里来
您可以到取得最新版本,该站台上也有讨论群组及FAQ等诸多技术文件可供参考,所下载的压缩档解开后,也附有与网站内容相同的网页文件。

您也可以直接在这里取得我改版的中文版本,此版本同时也附有我修改过的范例组态档。

执行MRTG 需要先安装Perl ,Windows版的Perl 已经支援windows 2000,您可以在/找到,该套装是直接以windows installer 打包成Msi 档案,所以安装时,还必须到微软公司取得最新版的windows inst aller,这支程式虽然已经随着Office 2000 发行,但是Office 2000 所附的版本无法安装Perl。

请您按这里取得上述两个套件。

注意:这个版本不支援Win 9 x,如果您要在Win 9x上面执行MRTG ,请另行从Active Perl 官方网站ht tp:///下载。

从市网中心下载的MRTG,解压缩后内含三个ZIP档,分别是MRTG-2.8.12 主程式、95MRTGscheduler 是一支排程程式,以VB撰写的,很可惜只能在W in9x上面执行、fiveminute 则是DOS批次档,也是用来排程功能与95MRTGsc heduler 相同,但可以在Win 9x、NT、2000里执行。

设定SNMP(Simple Network Management Protocol)
MRTG 统计Router 流量时,是透过SNMP来取得资讯,由MRTG 送出SN MP 查询要求给Router,这时候我们称此工作站叫做SNMP Agent,而把Rou ter 称为SNMP Server 。

SNMP 查询要求是使用TCP 161 Port,SNMP Serve r 收到要求后会将要求的资讯以UDP 1024 以后的Port 传送回SNMP Agen t。

由于每一种Router所支援的功能不同,而且即使是相同功能,也可能是用不同机制开发完成的。

因此要让SNMP通讯协定来应付所有Router的需求,必须设计的相当有弹性才行。

这个弹性就是MIB 模组,MIB 模组是Router上所提供功能的定义集合,已尽量涵盖所有Router 功能,不足部分仍可由开发Rout er的厂商自行来制定,以Cisco公司来说,甚至是让不同型号的Router 都有自己专用的一组MIB 模组。

当然MIB 模组也涵盖非Router 的其他各种网管机制,例如:防火墙、Radius、Novell、各种Server ......等等。

MIB 模组将Rout er 的功能以tree 架构来分类,每项功能都有一个功能名称和一个OID 号码,与DNS 和IP 的关系一样,功能名称是给人看的,OID 号码则是给机器辨识用的,有些OID 可以用来读取状态,有些则只用来当分类项目用,另外还有少数的OID 可以设定指定的值。

想知道Router 的MIB 资讯,可以查看购买R outer 时厂商所附的文件光碟,如果已经找不到该光碟,您也可以直接从该公司网页查询。

有一个站台已经将各厂商所支援的MIB 表列出来(只有大的分类项,
没有详细内容),您也可以参考看看,网址是http://www.ibr.cs.tu-bs.de/cgi-bin/sb rowser.cgi。

要让MRTG 能够读取流量资讯,首先必须把Router 上的SNMP Server 功能打开,如果您要监测学校对外流量,由于学校端是以Router 连上ATU-R,所以只要监测Router 就可以了,不要去管ATU-R(ATU-R是中华电信租给学校的设备,除非中华电信同意,否则不能在上面做任何调整,以免触犯法律)。

其实学校对外流量已经由市网中心监测了,所以在学校端另行监测没有什么用处。

如果利用MRTG 来监测各单位的流量,如:电脑教室、各处室......等等,相信对学校来说,更为有用。

首先Telnet 到Router 上,进入enable 指令层。

进入config 指令层,并以snmp ? 来查看详细指令语法。

这里是以Cisco Rou
ter 当范例,如果您购买的Router 品牌不一样,从这个步骤以后,都会不太一样,请自行依照Router 说明来操作。

我们看到说明里面,community 是用来将SNMP Enable。

如果还是不知道下一步的做法,可以用snmp community ? 来查看进一步的说明。

community string 就是SNMP 的连线密码,一般是设成public,如果您不希望
别人也来监测您的Router 的MIB,可以将此字串改为您自定的密码。

当然待会儿设定MRTG 时,也要修改。

我们将此密码设定为RO,也就是允许知道密码的人,可以来读取Router 上的MIB 状态。

如果是设定成RW,那就是允许可以设定或重置Router 状态,由于MRTG 只需要读取,所以只设RO 就够用了。

如果您觉得这样还不够安全,还可以指定ACL Rule,通常是用编号来表示。

A CL 主要功能为过滤来源IP,只有特定IP 的SNMP 要求,Router 才会回应,其余的IP 来源不予理会。

设定方法这里就不详述,请自行参考说明设定。

设定好了以后,先以exit 退回到enable 指令层,然后以sh run 来查看设定是否成功,检查没有问题后,以copy run start 将设定值备份到flash ROM 上面,以免停电重开机后,设定值遗失。

安装Perl 和MRTG
假设您已经安装过Webalizer NT版,应该对解压缩、安装、设定PATH路径.....等工作很熟悉了,这里就简单以文字来说明。

首先是安装Windows Installer,直接在解开的InstMsi.exe 上面按两下执行。

安装完毕后,以同样方法把ActivePerl-5.6.0.613 装起来。

Perl 在安装时,会自动增加PATH 环境变数的设定,同时会自动设定应用程式的相关性,并将IIS 或PWS Server上的CGI 设定也一起设好,这些工作都不需要我们操心。

(如果您抓到的是旧版本,那可就累了。

)
MRTG 主程式解开后,放在c:\mrtg 目录中,其中run 目录里面所摆放的,就是mrtg 几支主要程式与相关组态档。

由于这些程式都是Perl 程式,执行方式是在命令列下指令:
C:\>perl mrtg mrtg.cfg
或者将该档案改名为mrtg.pl 就可以直接在Windows 里面点两下执行。

其余程式也是如此。

修改MRTG 主程式
现在我们先来修改MRTG 主程式,使它可以在Windows 下面执行。

先探讨一下在Windows 环境写Perl 程式的问题。

Perl 只接受UNIX 的纯文字格式,所以换行符号与Windows 系统不同。

在U NIX 下面按Enter 换行会产生内码为0A 的字元(也就是写程式时的\n 字元),但是在Windows 下面按Enter 则会产生0A 和0D 两个字元(也就是写程式时的\n\r 字串)。

由于这个缘故,写Perl 程式时,可千万不能按Enter。

另外写Perl 程式时,不要用记事本来写,因为它不知道0A 也是换行的意思,通常我们会用WordPad来写,以下就是两者的比较。

当然如果您有更好的工具,例如:UtraEdit。

拿来写Perl 程式是最好用的了。

通常写Perl 程式时的第一行要指定Perl 的所在路径,但在Windows 下面,这项工作已经由PATH 环境变数代劳了,所以第一行只要写#!Perl 就可以了。

当然如果不去改它,也是可以执行,不过比较容易造成误解就是了。

MRTG 主程式要修改主要是中文显示的问题,和以下这一个变数设定:
$main::OS = 'UNIX';
#$main::OS = 'NT';
#$main::OS = 'VMS';
改为
#$main::OS = 'UNIX';
$main::OS = 'NT';
#$main::OS = 'VMS';
如果您的主程式是我修改过的版本,那么就不需要自己改了,我已经将它改为中文版了,可以直接使用。

设定MRTG 组态
MRTG 的使用流程是这样:首先执行cfgmaker 来送出SNMP 封包,侦测Ro uter 上所支援的OID 号码,并建立组态档。

这项工作可以使用以下指令来完成:
c:\mrtg\run>perl cfgmaker public@163.21.236.254> mrtg.cfg
以上指令是用来建立163.21.236.254 这个Router 的组态,使用public 来当S NMP community string,建立好的组态则是放在mrtg.cfg 组态档中(记得前面改
Router 时,曾经设定过community string 吗?如果您不是设public,这里可别照着做)。

如果是在Linux 的平台上,这个步骤应该可以很容易就完成。

但是在Windows 平台上你可能会遇到程式执行过久(感觉很像程式当掉),或是做出完全空白的组态档,以Netxray 来监看封包可以找出原因,如下图:
我们可以发现,当163.21.236.71 (SNMP Agent) 从163.21.236.254 (SNMP Se rver) 取得OID 号码后,找到一个路由介面IP 是163.21.158.254 ,接着Wi ndows 对该IP 进行反查,向DNS Server 163.21.236.4 查询(图上反白的那一行),反查成功后,SNMP Agent 继续询问SNMP Server,结果得到第二个路由介面IP 是163.21.234.254 ,一样对此IP 进行反查,结果查不到,于是Win dows 继续以NetBios Name 进行「广播找人」,但也查不到.......最后什么组态也做不出来。

由于在Linux 上执行cfgmaker 时,不会去反查IP,所以一切都很顺利。

在Windows 上就没那么幸运了。

解决方法是什么呢?其实很简单,只要为Router 上的每一个IP 都做好DNS 纪录就可以了。

如果你有Linux 的机器已经装好Perl,也可以拷贝cfgmaker 到Linux 上,利用Linux 来做组态档,然后再将做好的组态档拷贝回Windows,这样也可以。

否则还有第三个方法,就是手动来建立组态档。

在市网中心所提供的MRTG 套件中,内含有我修改过的范例组态档mrtg.cfg,我们就以此档案为例,来了解一下组态档参数的意义。

以下就是该档案内容(前面已经说过,使用WordPad 来编辑,记得千万不要按Enter):
WorkDir: e:\Inetpub\wwwroot\mrg
以上这一行是设定MRTG 流量统计图的摆放位置,当然要摆放在网页所在的目录里
#################################################################### ##
# Description: Cisco Internetwork Operating System Software IOS (tm) C2600 Software (C2600-IS56I-M), Version 12.0(2a), RELEASE SOFTWARE (fc1) C opyright (c) 1986-1999 by cisco Systems, Inc. Compiled Fri 01-Jan-99 16:32 b y phanguye
# Contact:
# System Name: Router
# Location: #.....................................................................
以上是Router 上的SNMP Server 讯息,其实都是注解行,如果觉得讨厌可以直接将它移除。

Target[g_point]: 1:public@163.21.204.254
这是定义资料来源,前面说过资料来源有两类:如果是以OID : Community st ring 来定义,则来源由SNMP Server 提供;如果要由外挂程式提供资料,则会定义成
Target[上线人数]: `perl myfinger.pl`
注意:中括弧里面是定义做出来的网页的档名,在这里会做出g_point.html 的统计网页。

MaxBytes[g_point]: 1250000
这是定义流量的最大值,用来计算目前流量的百分比。

如果只设定一笔,就表示流入流出的频宽相同。

Title[g_point]: 本校总流量统计
网页的抬头。

Options[g_point]: growright,bits
定义统计图的方向(由左至右)以及统计的单位(以bits 来计算,而不是bytes)
PageTop[g_point]: <H1>本校总流量统计(Ethernet0/0)</H1>
网页显示时第一行的内容
#---------------------------------------------------------------
Target[a_point]: 6:public@163.21.204.254
这里的OID 号码是6,这并不是完整的OID。

完整的OID 应该是1.3.6.1.2.
1.2.1.6,在MIB 里的定义是IF-MIB!ifDescr,也就是指定Router 上面的介面编号,要注意的是该编号是浮动式的,每次Enable 或Disable 一个介面,该编号都会有异动。

所以当MRTG 执行后,会产生mrtg.ok 档案,此档案会纪录目前哪一个编号对应到哪一个介面,当发生错误时,必须要自行核对此档案,然后手动去修改介面编号的正确值。

MaxBytes1[a_point]: 187500
MaxBytes2[a_point]: 48000
以上也是在定义最大流量,以方便计算百分比。

分开写成两行是因为流入与流出频宽不同,MaxBytes1 是流入的上限量,而MaxBytes2 则是流出的上限量。

Title[a_point]: 本校对市网中心流量统计
Options[a_point]: growright,bits
PageTop[a_point]: <H1>本校对市网中心流量统计(Ethernet0/1)</H1>
#---------------------------------------------------------------
关于组态设定更详细的资讯,可以在MRTG 的doc/config.html 找到。

许多微调选项在Windows 环境里面并不能使用,请自行参考测试。

建立MRTG 统计网页
使用indexmaker 来建立目录网页,使用下列指令:
c:\mrtg\run>perl indexmaker -o e:\inetpub\wwwroot\mrtg\default.htm mrtg.cfg
更详细的说明请直接打c:\mrtg\run>perl indexmaker 查询。

在建立目录网页之前,必须先修改indexmaker 主程式,请将
$title = '台北市教育网路中心流量分析';
改为贵校名称。

关于95MRTGscheduler
由于Windows 环境里的排程设计的不够理想,只能排定每日一次,无法设定成五分钟执行一次,因此MRTG 的排程工作,必须要用变通方法。

这支程式是以VB 所撰写的排程程式,必须要常驻在记忆体里面执行,而且因为开发时的VB 版本较旧,所以只能给Win 9x 的作业系统执行。

如果您的MRTG 刚好也是在Win 98 上面执行,那么请您把它装起来吧!
这个设定介面非常一目了然,所以我就不再详细说明。

如果您装了这支程式,以后的步骤您都不需要再去理会。

有一个细节要特别注意,当您设定好以上三个路径后,千万不要再去搬移,否则这支程式会执行不起来,出现系统错误讯息,而且重新安装也没用。

当然是有办法补救,我用的办法是直接以Regedit 去修改系统登录档,将该三个机码的值,档名去除,只留下路径。

这样可以将该程式救回来。

修改系统登录有很高的风险,请务必照图操作。

机码的位置在\HKEY_CURRENT_USER\Software\VB and VBA Program Setti ngs\MRTGScheduler\Parameters
执行排程批次档
在Win NT(包括Win 2000) 中,MRTG 排程只好使用NT 系统提供的at 指令(auto task,在Resource kit 里面,请自行安装)。

请将fiveminute.zip 解开到c:\mrtg 目录中,总共有六支批次档,现在逐一说明其功能:
mrtgkick.bat 是最底层的批次档,主要是执行mrtg 主程式
@echo off
c:\perl\bin\perl c:\mrtg\run\mrtg c:\mrtg\run\mrtg.cfg
exit
A.bat、
B.bat、
C.bat 这三支批次档是为了避免连续呼叫mrtgkick.bat 造成Recu rsive(递回,也就是说前一个执行实体尚未执行完毕,还未释放系统资源,下一个执行实体又建立,而资源被使用中无法取得,造成死结),因此这三支批次档内容都相同。

@echo off
start c:\mrtg\mrtgkick.bat
exit
2.bat 的内容只有一行,主要是参数传递方式设定at 自动排程,第一个参数(% 1)是执行时间,第二个参数(%2)是执行的程式内容。

at %1 /every:m,t,w,th,f,s,su "%2"
注意:/every:m,t,w,th,f,s,su 中m 是指monday,其余依此类推。

也就是说每周的星期一到星期日都要执行,换句话说就是每天执行的意思。

3a.bat 是最上层的批次档,也是将来要做排程设定的对象。

这支批次档是呼叫2.bat 并且传入两个参数,参考上面的说明,我们可以了解其实就是按时去轮流执行 A.bat、B.bat、C.bat 三支批次档,轮流执行的原因是为了避免造成Recur sive。

call 2.bat 0:00 C:\mrtg\A.BAT
call 2.bat 0:05 C:\mrtg\B.BAT
call 2.bat 0:10 C:\mrtg\C.BAT
call 2.bat 0:15 C:\mrtg\A.BAT
call 2.bat 0:20 C:\mrtg\B.BAT
call 2.bat 0:25 C:\mrtg\C.BAT
..........
了解了排程的原理以后,现在我们就将它执行起来:
c:\mrtg>3a
这支批次档只要执行一次就可以了。

它会在at 清单上建立288 个执行项目,也就是每天每小时的五分、十分、十五分、二十分.........各执行一次MRTG。

我完成MRTG 流量统计了
现在让我们来欣赏一下成果吧!在画面最右边,已经可以看到流量跑出来了!
下一步是什么?
学会安装和使用MRTG,并不是这个主题的结束,而仅仅是开始。

前面提过透过外挂程式的方式,可以做到特殊应用系统的即时统计,如果您需要这方面的资料,可以参考c:\mrtg\contrib 目录里面的文件与原始程式码。

我在这里要再提醒大家一次,那里面的原始码是为UNIX 或特定系统开发的,在Winodws 上面不可直接拿来执行。

至于Windows 下面,MRTG 可以拿来做哪些应用,这个主题留待下回分解。

相关文档
最新文档