mrtg是一款用于监控服务器网络流量的小软件,它能以图形的方式显示网卡每5分钟(可自定义)、每天、每周、每月、每年的数据吞吐量和速度,并生成html格式的报告。报告图如下:
在windows 2003上安装了mrtg稍微罗嗦一些,所以贴这篇文章出来给初次使用mrtg的用户多一个参考。
一、服务器网络结构
一般访问量比较大的网站都会由几台服务器分担各项工作,例如将防火墙、web服务、数据库服务、文件服务各由一台或多台服务器运行,如下图:
现在准备在192.168.0.10这台服务器上,用mrtg监控 192.168.0.10/20/30这3台(windows 2003)服务器的网络流量。
二、在被监控的windows 2003服务器上安装SNMP服务
windows 2003本身带有snmp服务,从控制面板->添加删除程序->添加删除windows组件->网络监视工具->简单网络管理协议。
添加了snmp服务之后,需要设置安全选项,否则控制端将连接不了snmp服务。在 计算机管理->服务 列表里可以找到 "snmp服务" 一项。从服务的”属性“进入,选择”安全“标签页,添加一个接受团体的名称,一般添加”public-只读“,我这里添加的是”linsaw-只读“,然后在”接受来自这些主机的snmp数据包“里加入控制端服务器的ip地址——192.168.0.10。
设置好安全选项之后,还要在windows防火墙中打开snmp的服务端口: udp-161和 udp-162,如下图:
三、在控制端服务器中安装MRTG软件。
mrtg是用perl写的脚本程序,所以需要先下载并安装ActivePerl,安装过程一路”Next“即可,安装路径我选择的是 c:\perl。
下载MRTG压缩包:http://oss.oetiker.ch/mrtg/ 解压到硬盘的一个目录,如 c:\mrtg_root。
现在需要为每一台被监控的服务器生成一个配置文件,用如下的命令:
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.10 --global "WorkDir: c:\mrtg_www" --output mrtg_10.cfg
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.11 --global "WorkDir: c:\mrtg_www" --output mrtg_11.cfg
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.12 --global "WorkDir: c:\mrtg_www" --output mrtg_12.cfg
命令中的 cfgmaker是 mrtg的配置文件生成器, linsaw是刚才在”snmp服务“安全设置里的接收团队名称, WorkDir是等一下生成报告的位置,--output mrtg_10.cfg 是生成的配置的文件名。
用记事本打开 mrtg_10.cfg 等配置文件,在文件的最末尾加上:
RunAsDaemon: yes
加上这行之后,监控端就可以一直地对被监控端每隔5分钟检查一次,否则每次检查都需要运行一次命令。
检查的命令是:
c:\perl\bin\perl mrtg --logging eventlog10 mrtg_10.cfg
其中 mrtg_cfg是刚才生成的配置文件的名称,而 eventlog10 是监控的日志文件,名字可以根据自己需要改变。
要监控另外两台服务器的命令就是:
c:\perl\bin\perl mrtg --logging eventlog11 mrtg_11.cfg
c:\perl\bin\perl mrtg --logging eventlog12 mrtg_12.cfg
至此流量监控就架设好了,运行成功之后会在 c:\mrtg_www目录里看到一些报告文件,如:
192.168.0.10_65539.html
192.168.0.11_65538.html
192.168.0.12_65540.html
为了方便在远程查看,可以用iis将 c:\mrtg_www目录做一个虚拟目录,这样就可以在远程通过浏览器查看报告了。
另外,如果不想再运行监控程序时看到黑乎乎的控制台窗口(防止有时意外关闭掉了),还可以用 wperl命令启动监控程序:如下
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog10 mrtg_10.cfg
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog11 mrtg_11.cfg
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog22 mrtg_12.cfg
最后也说一下网关的配置。该示例的网关是用linux构建的,为了让外网能访问内部网的web和邮件服务,需要做端口转发(NAT)或者用软件做tcp端口重定向(例如 balance,http://www.inlab.de/balance.html)。使用balance的优点是配置很简单,敲一个命令指明需要转发哪个tcp端口到哪台计算机的哪个端口就行了,如:
/usr/sbin/balance -b 222.222.222.123 80 192.168.0.10:80
不过在实际使用过程当中发现,如果服务器的访问量比较大,例如并发连接数达到2000左右(一般还会发现有5000多个tcp连接处于 TIME_WAIT状态,一般是下载软件疯狂连接造成的),balance就会造成死机。所以使用linux的iptables做的nat比较可靠,命令如下:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth2 -d 222.222.222.123 --dport 80 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 80 -j SNAT --to-source 222.222.222.123:2000-20000
在windows 2003上安装了mrtg稍微罗嗦一些,所以贴这篇文章出来给初次使用mrtg的用户多一个参考。
一、服务器网络结构
一般访问量比较大的网站都会由几台服务器分担各项工作,例如将防火墙、web服务、数据库服务、文件服务各由一台或多台服务器运行,如下图:
现在准备在192.168.0.10这台服务器上,用mrtg监控 192.168.0.10/20/30这3台(windows 2003)服务器的网络流量。
二、在被监控的windows 2003服务器上安装SNMP服务
windows 2003本身带有snmp服务,从控制面板->添加删除程序->添加删除windows组件->网络监视工具->简单网络管理协议。
添加了snmp服务之后,需要设置安全选项,否则控制端将连接不了snmp服务。在 计算机管理->服务 列表里可以找到 "snmp服务" 一项。从服务的”属性“进入,选择”安全“标签页,添加一个接受团体的名称,一般添加”public-只读“,我这里添加的是”linsaw-只读“,然后在”接受来自这些主机的snmp数据包“里加入控制端服务器的ip地址——192.168.0.10。
设置好安全选项之后,还要在windows防火墙中打开snmp的服务端口: udp-161和 udp-162,如下图:
三、在控制端服务器中安装MRTG软件。
mrtg是用perl写的脚本程序,所以需要先下载并安装ActivePerl,安装过程一路”Next“即可,安装路径我选择的是 c:\perl。
下载MRTG压缩包:http://oss.oetiker.ch/mrtg/ 解压到硬盘的一个目录,如 c:\mrtg_root。
现在需要为每一台被监控的服务器生成一个配置文件,用如下的命令:
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.10 --global "WorkDir: c:\mrtg_www" --output mrtg_10.cfg
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.11 --global "WorkDir: c:\mrtg_www" --output mrtg_11.cfg
C:\Perl\bin\perl cfgmaker linsaw@192.168.0.12 --global "WorkDir: c:\mrtg_www" --output mrtg_12.cfg
命令中的 cfgmaker是 mrtg的配置文件生成器, linsaw是刚才在”snmp服务“安全设置里的接收团队名称, WorkDir是等一下生成报告的位置,--output mrtg_10.cfg 是生成的配置的文件名。
用记事本打开 mrtg_10.cfg 等配置文件,在文件的最末尾加上:
RunAsDaemon: yes
加上这行之后,监控端就可以一直地对被监控端每隔5分钟检查一次,否则每次检查都需要运行一次命令。
检查的命令是:
c:\perl\bin\perl mrtg --logging eventlog10 mrtg_10.cfg
其中 mrtg_cfg是刚才生成的配置文件的名称,而 eventlog10 是监控的日志文件,名字可以根据自己需要改变。
要监控另外两台服务器的命令就是:
c:\perl\bin\perl mrtg --logging eventlog11 mrtg_11.cfg
c:\perl\bin\perl mrtg --logging eventlog12 mrtg_12.cfg
至此流量监控就架设好了,运行成功之后会在 c:\mrtg_www目录里看到一些报告文件,如:
192.168.0.10_65539.html
192.168.0.11_65538.html
192.168.0.12_65540.html
为了方便在远程查看,可以用iis将 c:\mrtg_www目录做一个虚拟目录,这样就可以在远程通过浏览器查看报告了。
另外,如果不想再运行监控程序时看到黑乎乎的控制台窗口(防止有时意外关闭掉了),还可以用 wperl命令启动监控程序:如下
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog10 mrtg_10.cfg
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog11 mrtg_11.cfg
start /D c:\mrtg_root\bin c:\perl\bin\wperl mrtg --logging eventlog22 mrtg_12.cfg
最后也说一下网关的配置。该示例的网关是用linux构建的,为了让外网能访问内部网的web和邮件服务,需要做端口转发(NAT)或者用软件做tcp端口重定向(例如 balance,http://www.inlab.de/balance.html)。使用balance的优点是配置很简单,敲一个命令指明需要转发哪个tcp端口到哪台计算机的哪个端口就行了,如:
/usr/sbin/balance -b 222.222.222.123 80 192.168.0.10:80
不过在实际使用过程当中发现,如果服务器的访问量比较大,例如并发连接数达到2000左右(一般还会发现有5000多个tcp连接处于 TIME_WAIT状态,一般是下载软件疯狂连接造成的),balance就会造成死机。所以使用linux的iptables做的nat比较可靠,命令如下:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth2 -d 222.222.222.123 --dport 80 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 80 -j SNAT --to-source 222.222.222.123:2000-20000