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 - ph
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(c snmp-server community sery ro ,把社区字设成”sery”且属性为只读。
第三步:查找所有服务器的mac和ip地址对应值。linux自带了一个很好的网络工具nmap,登陆网内的某台服务器,运行命令 # nmap 202.100.x.1-254 > /tmp/ipsacn.txt,把扫描结果输出到文件/tmp/ipscan.txt,运行结束后,把它下载到自己的工作机上,以便于后面的分析工作。
在进行这个过程的时候,我遇到一个差异,就是有个网段扫描出来的结果没有mac这个值,而另外一个机房的网段却是有的。究其原因,是因为nmap的版本不同所致。没有mac是没有任何用处的,当然这不工作没有白做。运行命令 # nmap 202.100.x.1-254 ,等输出还没有全部显示的时候运行命令 # arp -a > /tmp/arpinfo.txt将显示所有服务器的ip和mac地址的信息,同样可以达到目的。注意:arp自动刷新完成后,再运行arp -a 这个命令将只有几行显示输出,所以一定要掌握好这个时间。
到这一步,我们可以得到一个ip与mac一一对应的关系文件,通过手动的办法把它挨个复制到excel表中。
第四步:查每个交换机端口学习来的服务器mac。登录每一个交换机,运行命令 # show mac-address-table 将输出mac与端口号对应的行。由于每个端口都与服务器直连,那么如果出现某个端口与多个mac相匹配,则此端口一定是上联端口或交换机间的连接端口。找出那些端口号与mac一一对应的行,把它复制到一个excel表中。重复这个操作直到完成所有的输出和复制工作。
第五步:根据第四和第五步的结果得出交换机端口与连接在端口上服务器的ip地址。这个过程全部依靠手工操作,所以需要耐心一点,并且多核对几次。
ip与 mac 对应表 mac与port对应表
000b.cdd3.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 mrtg-2.9.17-3.i386.rpm很容易就安装上去了。
2、 配置mrtg。在mrtg安装目录运行命令 # /usr/local/mrtg/bin/cfgmaker --global “workdir: /var/www/html/mrtg” --global “options:wright" --show-op-down --ifref=nr --output=/etc/mrtg/mrtg1.cfg
[email protected] ;每个交换机生成各自的一个配置文件,如 /etc/mrtg/mrtg2.cfg。
3、 生成访问交换机的页面文件。运行命令 # /usr/local/mrtg/bin/indexmaker /etc/mrtg/mrtg.cfg --output=/var/www/mrtg/index1.html ,依次生成5个页面文件。
4、 配置apache服务。通过编辑文件/etc/httpd/conf/httpd.c # htpasswd /var/www/html/.htpasswd sery 添加有效用户sery。
5、 把mrtg加入自动启动任务里。运行命令 # crontad -e ,把
*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg1.cfg --logging /var/log/mrtg1.log
*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg2.cfg --logging /var/log/mrtg95.log
*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg3.cfg --logging /var/log/mrtg123.log
*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg4.cfg --logging /var/log/mrtg186.log
*/5 * * * * /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg5.cfg --logging /var/log/mrtg187.log
加到文件中,保存后退出。
第六步:起用服务。
1、 启用apache服务:# service httpd start。
2、 启用mrtg: # /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg1.cfg。
第七步:手工修改页面文件。根据第五步得出的结果,把页面文件/var/www/html/mrtg/index1.html~index5.html的端口后标识其对应的服务器的ip地址。一个更好的改进就是再编辑一个页面文件 /var/www/html/mrtg/index.html,把五个页面文件链接在这个页面文件中,这样就更方便了。
在任意客户端的机器的浏览器里输入url : [url]http://<[/url]监控服务器的ip>/mrtg/index1.html,然后系统提示输入用户名和密码,就可以监控所有服务器的网络负载。 整个过程比较麻烦的事情就是确定交换机端口所连服务器的ip地址,在一个不太重要的环境中,通过拨网线的方式就可以从一大堆乱七八糟的双绞线找出端口另一头在哪个服务器上,而在本案中不能挺机,所以拔网线观望是万万不行的。同样,通过对比找出端口与所连服务器ip地址一一对应的手工操作方式也是比较无聊的事情。但不能如何,我还是在没有任何网络业务中断的情况下完成了这次任务。
通过这个个案,大家可以了解,在一项任务可能要涉及到很多方面,既有技术的,也有策略的。光从技术上讲,就涉及到交换机的配置和操作、linux系统的处理等等。