2024年4月29日发(作者:)

MRTG(multi router traffic grapher)是一款比较流行的网络流量监控工具,很多ISP都喜欢用它来监

控接口负载。本文侧重描述在复杂环境下,部署MRTG网络监控的一次经历,希望对大家的工作有所帮助。

总共300来台在线服务器,托管在3个不同的IDC机房,所有的服务器都是连接在cisco交换机上,

交换机支持网络管理。为了方便管理和减少单点故障的影响,所有的服务器和交换机都设置全球唯一单播

ip地址,另外,所有的服务器的操作系统都是RedHat linux或 sun solaris。但是,有这样一些困难:1、连

接交换机与服务器的双缴线没有做标记,这意味着你不知道某个服务器具体连接到哪个交换机的哪个端口。

2、网络绝对不能中断,因为这是商业运营。3、不清楚交换机间的连接拓扑。所以,即便配置好MRTG,

也是不可能知道每个端口究竟是哪个服务器产生的流量,跟没有部署MRTG没有两样。所幸的是,每个服

务器都贴了本机ip地址的标签。要在这样的情况下部署网络流量监控,压力和风险还是很大的。下面我就

把这次处理过程按部就班的讲述开来。

第一步:确认服务器的IP标签是否与实际的机器IP一致。

把一台服务器接上显示器和键盘,登录系统查看一下本机的ip地址,用命令 # ifconfig –a就可以

了。接着使用ssh工具登录到另外的服务器,运行命令# eject 弹出光驱来确定是那台机器,验证一下IP

地址是否跟贴在上面的标签相符。随机测试几个服务器,发现都是相符的。顺便把网关确认一下,运行命

令 # ip route,就知道整个网络的上联网关的IP地址。

第二步:确定交换机的连接拓扑。手里有交换机的配置信息,知道每一个交换机的IP的,现在要做

的是弄清楚同一个网段5个交换机(在不同的楼层,不能通过观察知道连线)之间的连接情况。这个其实

不难,登录某个交换机,进入特权模式,运行命令 # show cdb neighbors 显示邻居。看下面的一个输出

信息:

sw_185# show cdp neighbors

Capability Codes: R - Router,

T - Trans Bridge, B - Source Route Bridge

S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone

Device ID Local Intrfce Holdtme Capability Platform

Port ID

wj_waiwang02 Gig 0/1 138 S I

WS-C2950G-Gig 0/2

我们可以清晰的看出,交换机的Gig0/1与交换机 wj_waiwang02的端口Gig0/2端口直连。用笔把

这个连接用草图画出来,接着登录其邻居交换机wj_waiwang02,重复这个步骤直到把所有交换机的邻接

状态查完,这样就可以得到一个详细的交换机端口间的连接状况,不难画出连接拓扑。

因为MRTG需要交换机的SNMP支持,把每个交换机的SNMP功能启用。运行配置命令

sw_185(config)# snmp-server community sery ro ,把社区字设成”sery”且属性为只读。

第三步:查找所有服务器的mac和IP地址对应值。Linux自带了一个很好的网络工具Nmap,登陆网

内的某台服务器,运行命令 # nmap 202.100.X.1-254 > /tmp/,把扫描结果输出到文件

/tmp/,运行结束后,把它下载到自己的工作机上,以便于后面的分析工作。

在进行这个过程的时候,我遇到一个差异,就是有个网段扫描出来的结果没有mac这个值,而另外

一个机房的网段却是有的。究其原因,是因为Nmap的版本不同所致。没有mac是没有任何用处的,当然

这不工作没有白做。运行命令 # nmap 202.100.X.1-254 ,等输出还没有全部显示的时候运行命令 # arp

–a > /tmp/将显示所有服务器的ip和mac地址的信息,同样可以达到目的。注意:arp自动刷新

完成后,再运行arp –a 这个命令将只有几行显示输出,所以一定要掌握好这个时间。

到这一步,我们可以得到一个ip与mac一一对应的关系文件,通过手动的办法把它挨个复制到excel

表中。

第四步:查每个交换机端口学习来的服务器mac。登录每一个交换机,运行命令 # show

mac-address-table 将输出mac与端口号对应的行。由于每个端口都与服务器直连,那么如果出现某个端

口与多个mac相匹配,则此端口一定是上联端口或交换机间的连接端口。找出那些端口号与mac一一对

应的行,把它复制到一个excel表中。重复这个操作直到完成所有的输出和复制工作。

第五步:根据第四和第五步的结果得出交换机端口与连接在端口上服务器的IP地址。这个过程全部

依靠手工操作,所以需要耐心一点,并且多核对几次。

IP与 mac 对应表 Mac与port对应表

3.e0c3

202.100.X.31 00:0b:cc:d3:e0:c3 Fa0/12

以手工的方式查这两个表,以mac为桥梁,就能把ip与端口port一一对应了。把这个结果做成一个

excel文件。

第六步:安装、配置MRTG.在网内拨一台linux服务器来做监控服务。

1、 安装:redhat linux安装光盘附带mrtg rpm安装包,运行命令 # rpm –ivh

很容易就安装上去了。

2、 配置mrtg。在mrtg安装目录运行命令 # /usr/local/mrtg/bin/cfgmaker –global “WorkDir:

/var/www/html/mrtg” –global “options[]:growright,bits” –show-op-down –ifref=nr

–output=/etc/mrtg/ sery@202.100.X..254 ;每个交换机生成各自的一个配置文件,如

/etc/mrtg/。

3、 生成访问交换机的页面文件。运行命令 # /usr/local/mrtg/bin/indexmaker /etc/mrtg/

--output=/var/www/mrtg/ ,依次生成5个页面文件。

4、 配置apache服务。通过编辑文件/etc/httpd/conf/文件,启用apache验证,然后运行

命令 # htpasswd /var/www/html/.htpasswd sery 添加有效用户sery。

5、 把mrtg加入自动启动任务里。运行命令 # crontab –e ,把

*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/

--logging /var/log/

*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/

--logging /var/log/

*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/

--logging /var/log/

*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/

--logging /var/log/

*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/

--logging /var/log/

加到文件中,保存后退出。

第六步:起用服务。

1、 启用apache服务:# service httpd start。

2、 启用mrtg: # /usr/local/mrtg/bin/mrtg /etc/mrtg/。

第七步:手工修改页面文件。根据第五步得出的结果,把页面文件

/var/www/html/mrtg/~的端口后标识其对应的服务器的IP地址。一个更好的改进就

是再编辑一个页面文件 /var/www/html/mrtg/,把五个页面文件链接在这个页面文件中,这样就更

方便了。

在任意客户端的机器的浏览器里输入url : <监控服务器的IP>/mrtg/,然后系统提示

输入用户名和密码,就可以监控所有服务器的网络负载。 整个过程比较麻烦的事情就是确定交换机端口所

连服务器的IP地址,在一个不太重要的环境中,通过拨网线的方式就可以从一大堆乱七八糟的双绞线找出

端口另一头在哪个服务器上,而在本案中不能挺机,所以拔网线观望是万万不行的。同样,通过对比找出