网络流量监测与管理(一):MRTG

日期: 2007-12-26 作者:邵喻美 来源:TechTarget中国

        过去几年来,因特网已经成为越来越重要的需求。不过 面对日益复杂的网络联机及逐渐增加的网络流量,系统管理者必须花费更多时间精力来了解这些网络设备的运作状况,以维持一个系统的正常运作。

        一般来说,网络管理者所需要了解的是各个网段的使用情形,频宽的使用率,网络问题的瓶颈发生于何处。当网络问题发生时,必须能够很快 地区隔出问题的发生原因,可能是线路问题、网络设备问题、或者是路由器的设定问题。一个有经验的管理者要回答这些问题并不难,但是如 果所管理的网络范围过于庞大,那么就可能需要一个有效率的网管系统了。透过网管系统可以协助网络架构管理,并显示网络上目前发生的各种流量与运作情形。若发生问题时,也能够减少许多处理时间。

        以牵涉的节点数量以及能够在节点上执行的协议组合而言,网络都是一个复杂的系统。即使将范围局限在单一行政范围内,例如校园,还是可能包含数十个路由器及数百、甚至数千台主机。如果考虑在任一节点上保存及处理的所有状态,例如地址转译表、路由表、TCP连接状态等,那 么很容易就陷入充满各种数据的茫茫大海中。

        我们很容易了解为何需要知道哪些放置在不同节点上各协议的状态。举例来说,我们可能想要监控被中断的IP数据段重组数量,以便判断资源回收部分重组数据段的逾时机制是否需要调整。再举另一个例子,我们可能想要观测各节点上的负载(亦即,传送或接收的封包数),以便判断是否需要为网络增加新的路由器或连结。除此之外,我们也必须注意硬件发生故障及软件失误的征兆。

        在这里,我们先介绍一个用于网络流量监测与管理的工具:MRTG(Multi Router Traffic Grapher)。

(一) MRTG简介

MRTG(Multi Router Traffic Grapher)是一种用来监测网络连结上之流量的工具。MRTG会产生包含PNG图形的HTML网页,可为网络流量提 供生动的视觉呈现效果。

MRTG软件中包含一个perl程序,利用SNMP读取路由器等网络设备的流量计数,以及一个C程序可将流量数据记录下来,并为所监控之网络连 结上的流量产生图形式表现。这些图形会被包含在网页中,并可从任何网页浏览器读取。

MRTG除了能够提供详细的每日流量记录,同时也能够以相同的视觉呈现方式产生过去七天,过去四周,以及过去12个月的流量记录。能够做 到这点是因为MRTG把从路由器取得的所有数据都记录下来。这些记录会自动合计,所以不至于随着时间成长地太大,不过仍保留足够提供过去 两年来流量趋势的信息。这些程序以很有效率的方式进行,因此我们能够从任何UNIX系统监测200段或更多网络连结。

MRTG并不仅限于监测流量,我们也可以利用MRTG来监测任何SNMP参数。我们甚至可以运用外部程序来收集想要用MRTG进行监控的数据,例如 系统负载、登入数量等,或者将二或多项数据来源结合在单一图形内以利观察。

(二)MRTG使用方式

1. 取得程序

最新版本的MRTG程序可从http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/ 处下载, 其中包含Unix原始程序代码、编译好的Win32程序、以及MRTG Linux RPM,目前最新版本是mrtg-2.9.18。

2. 编译MRTG程序(以Unix版本为例)

在编译Unix版MRTG原始程序代码之前,必须先确定机器上已安装GCC编译程序及perl程序。除此之外,由于MRTG会产生PNG格式的图形文件, 因此必须先安装几种链接库:

¨ gd:这是一套绘图链接库,用来处理PNG格式的图形文件,可从http://www.boutell.com/gd/ 处下载。

¨ libpng:这是gd在产生PNG图形文件时需要的链接库,可从http://www.libpng.org/pub/png/src/ 处取得。

¨ zlib:这是libpng压缩图形文件时需要的链接库,可从http://www.gzip.org/zlib 处下载。

当上述链接库都安装好了之后,便可开始编译MRTG程序。首先解开原始码压缩档,并切换至该目录下:

gunzip –c mrtg-2.9.18.tar.gz | tar xvf –

cd mrtg-2.9.18

接下来便可编译程序代码:

./configure –prefix=/usr/local/mrtg-2

或者也可以指定各必要程序的路径:

./configure – -prefix=/usr/local/mrtg-2

– -with-gd=/usr/local/src/gd

– -with-z=/usr/local/src/zlib

– -with-png=/usr/local/src/libpng

configure程序可确认系统环境已适合安装MRTG程序,如果都没有问题,目录下便会增加一个专为该系统产生的Makefile。接下来便可执行:

make

此动作会建立rateup程序,并修改scripts中的所有路径名称。现在便可安装mrtg程序:

make install

到此为止,mrtg需要的所有软件都已经安装在/usr/local/mrtg-2目录下了。

3. 产生MRTG设定档

当mrtg程序安装完成后还无法立刻开始监测网络设备,因为我们必须给予mrtg程序适当的组态设定,方能让mrtg程序执行针对特定网络设备 收集特定数据、将数据存放于特定路径、以所指定的格式输出图形文件及网页等动作,而这些特殊设定都定义在mrtg.cfg档案中。 MRTG软件中提供一个cfgmaker程序,可针对所欲监测的路由器产生必要的设定档:

cfgmaker –global ‘WorkDir: /home/httpd/mrtg’

–global ‘Options[_]: bits,growright’

–output /home/mrtg/cfg/mrtg.cfg

community@router.abc.xyz

上述范例会对router.abc.xyz这台网络设备收集流量数据,并对输出图形设定bits及growright选项,同时在/home/mrtg/cfg目录下产生 mrtg.cfg设定文件,而所有产生的图形及网页都会放置在 /home/httpd/mrtg 目录下。

MRTG软件包中还有一个程序indexmaker,可将mrtg.cfg组态档中每个Target的website做个简单的index file,例如:

indexmaker –enumerate –columns=2 –section=title –output index.html mrtg.cfg

4. 修改MRTG设定档

利用cfgmaker产生的mrtg.cfg便能够产生基本的mrtg流量图数据,但是如果想要得到较特别的输出数据,便必须修改mrtg设定档。在mrtg设 定档中可分为Global及个别Target的定义部分,以Global而言,可定义多种选项,例如下列:

¨ WorkDir:指定所产生之logfile及网页之存放路径(此设定优先于

¨ HtmlDir:指定所产生之HTML档案存放路径

¨ ImageDir:指定所产生之Image档案存放路径

¨ LogDir:指定logfile存放路径

¨ Refresh:设定浏览器重新加载网页的时间间隔(以秒计),默认值为300秒。

¨ Interval:执行mrtg程序的时间间隔,默认值为5分钟

若针对各Target可设定下列选项:

¨ Target:此设定告诉mrtg应该监测哪一台机器。此参数的格式相当多样,例如:

n 最常见的基本格式为 ”port:community@router”,此设定会让mrtg程序针对”router”这台主机(dns名称或IP)的”port”接 口产生流量图,并且以”community”作为community(snmp password)进行snmp query。

Example: Target[test]: 2:public@router.ntu.edu.tw

n 在Target叙述之前加一个负号(”-“)可将incoming及outgoing的流量反过来

Example: Target[test]: -2:public@router.ntu.edu.tw

n 可在叙述中明确指定所欲取得信息的OID,语法为 ”OID_1&OID_2:community@router.ntu.edu.tw”。由于mrtg必须为两项变 量绘图,所以指定两个OID,如下例所示:

Target[test]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:public@myrouter

n MRTG能够辨认数种SNMP变量名称,所以可能在叙述中直接指定名称(全部名称可参阅 http://people.ee.ethz.ch/~oetiker/webtools/mrtg/mibhelp.html),例如:

Target[ezwf]: ifInErrors.1&ifOutErrors.1:public@myrouter

n 有时为了确定mrtg抓到正确接口的数据,我们可在Target中指定IP地址:

Target[ezwf]: /1.2.3.4:public@myrouter

Target[ezci]: -/1.2.3.4:public@myrouter

Target[ezwf]: .3.6.1.2.1.2.2.1.14/1.2.3.4&1.3.6.1.2.1.2.2.1.14/1.2.3.4:public@myrouter

Target[ezwf]: ifInErrors/1.2.3.4&ifOutErrors/1.2.3.4:public@myrouter

n 如果不能使用IP地址,也可指定接口名称:

Target[ezwf]: My-Interface2:public@myrouter

Target[ezci]: -My-Interface2:public@myrouter

Target[ezwf]: 1.3.6.1.2.1.2.2.1.14My-Interface2&1.3.6.1.2.1.2.2.1.14My-Interface3:public@myrouter

Target[ezwf]: ifInErrorsMy-Interface2&ifOutErrorsMy-Interface3:public@myrouter

n 如果为了避免因接口index变动造成mrtg图数据错误,可在Target中指定接口的硬件地址。Mrtg软件包中提供一个指定” cfgmaker_phys”,可将接口index或IP地址转换成硬件地址:

cfgmaker_phys old.cfg > new.cfg

cfgmaker public@router | cfgmaker_phys > new.cfg

在Target设定中的格式如下:

Target[ezwf]: !0a-0b-0c-0d:public@wellfleet-fddi.ethz.ch

Target[ezci]: -!0-f-bb-05-71-22:public@ezci-ether.ethz.ch

Target[ezwf]: 1.3.6.1.2.1.2.2.1.14!0a-00-10-23-44-51&!0a-00-10-23-44-51:public@myrouter

Target[ezwf]: ifInErrors!0a-00-10-23-44-51&ifOutErrors!0a-00-10-23-44-51:public@myrouter

n 在community@router后面,可以加上其它SNMP沟通用的参数,其语法如下:

community@router[:[port][:[timeout][:[retries][:[backoff][:version]]]]]

n 如果要监测非透过SNMP提供的数值,可利用外部程序收集数据。外部程序必须传回四行输出数据。

第一行:第一个参数值,例如”incoming bytes count”

第二行:第二个参数值,例如”outgoing bytes count”

第三行:表示系统uptime的字符串

第四行:表示Target名称的字符串

例如:

Target[ezwf]: `/usr/local/bin/df2mrtg /dev/dsk/c0t2d0s0`

n 我们也可以将多个叙述式组合成一个数学式,表示将多笔资料加总起来,如下所示:

Target[ezwf]: 2:public@wellfleetA + 1:public@wellfleetA * 4:public@ciscoF

MRTG组态文件中的设定选项相当多,可参考MRTG设定说明(http://people.ee.ethz.ch/~oetiker/webtools/mrtg/config.html) ,其中提供各选项的说明及范例。

5. 测试MRTG输出

当mrtg组态档修改完成后,可执行mrtg mrtg.cfg,如果一切正确的话,应该会在WorkDir目录下产生HTML文件及一些png图档,便可开启这 些HTML档检查产生的输出是否如预期结果。

6. 自动执行MRTG程序

一般透过MRTG要观察的是长期趋势,因此必须将MRTG设定为连续定期执行,方能将收集到网络信息描绘成连续图形。以Unix系统为例,通常 以编写crontab达到此效果,例如执行:

crontab –e

并在crontab中加入类似下面这行设定:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /mrtg/bin/mrtg /mrtg/conf/mrtg.cfg

如此便会每5分钟执行一次mrtg程序而得到网络流量图。

(三)利用MRTG监看其它系统资源

其实MRTG的原理就是将收集到的数据绘成图形以便于观察实时状况及长期趋势,因此不论是让MRTG透过SNMP向远程网络设备取得接口数 据,或者透过外部程序产生数据,都可以达到相同的效果。接下来要介绍几种从网络上取得可以与MRTG结合的外部程序,系统管理者也可以自 行撰写程序,只要程序输出结果符合MRTG程序读取数据的格式即可。

1. mrtg-ping-probe

可利用此程序测量与其它网络设备之间的来回时间及封包遗失率。mrtg-ping-probe程序可从网络上直接下载,其网址为 ftp://ftp.pwo.de/pub/pwo/mrtg/mrtg-ping-probe/,目前最新的版本是mrtg-ping-probe-2.0.2。mrtg-ping-probe的执行方式是:

mrtg-ping-probe

mrtg-ping-probe –o

-p /

执行后会输出两行数据,分别为maximum和minimum的来回时间。”-p”选项,可指定想要程序传回的数值,此项目可为,,,,或一个整数, 其中每个项目都可乘上某个倍数。如果没有指定”-p”选项,默认值为/。因此如果要取得两点之间的packet loss数值,便可执行:

mrtg-ping-probe –p loss/loss host.domain.name

一旦mrtg-ping-probe可产生数值,便可将此程序纳入mrtg组态文件中的Target选项,让mrtg程序将其输出值绘成图形,例如:

Target[yahoo.com]: ‘/usr/local/mrtg/mrtg-ping-probe www.yahoo.com’

2. 系统CPU Load

除了网络流量及状况可利用MRTG观测状况之外,我们也可以针对服务器的运作状况收集数据,让MRTG程序将之绘成图形以利监测。在 http://perso.wanadoo.fr/sebastien.godard/ 提供的sysstat软件包,可用来收集系统CPU信息。Sysstat将会安装crontab,让系统定期(默 认值为一小时)执行Unix系统提供的sa1指令。Sysstat中还包含一个perl程序,从sa1定期收集到的数据中取出最近的数据。接下来,我们便可 在mrtg组态档的Target处设定:

Target[server]: ‘/the/path/of/perl.script’

3. DNS Load

除了系统整体的CPU负载之外,我们有时也会想针对某种特定应用的负荷量进行观测,例如DNS服务器的统计数据。MRTG软件包中便附带一个 perl程序可帮助我们取得相关信息,contrib/stat/stat.pl(MRTG的contrib目录下提供许多很有用的统计数据收集程序)。在将stat.pl程序 加入mrtg组态文件之前,必须先在crontab中加入一个script,让DNS服务器定期产生named.stats档,并将旧的named.stats档删除:

#!/bin/sh

rm /var/named/named.stats

/usr/local/sbin/ndc stats

至于stat.pl档案中,$HOSTNAME,$LOG,$RUN等参数必须根据系统环境修改,之后便可设定在mrtg组态当的Target定义中:

Target[dns]: ‘/usr/local/mrtg/stat.pl’

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

邵喻美
邵喻美

暂无

相关推荐