最近要为公司的项目增加新功能,要求在Linux网关上能够获取内部主机的当前流量大小,当然是指访问internet的流量,不包括局域网内的互相访问。这样,也就要求流量大小最好是从网关上获取,而不是从各内部主机上获取。google看了一些关于流量监控的资料,大多数是运用某些开源软件实现流量监控的。暂且不管这些软件能否达到我们的要求,先将这些软件安装起来,看看功能上有没有可以借鉴的地方。
流量监控工具1——iptraf
iptraf的安装比较顺利,首先从FTP服务器上下载安装包——ftp://iptraf.seul.org/pub/iptraf/iptraf-3.0.1.tar.gz
解压后,进入目录,可以直接运行./setup,也可以进入src目录,make make install。
安装成功后,直接在src目录下就可以执行./iptraf -h,查看帮助。
iptraf运行时是字符界面,在网关上运行时我们只需要数据,而且iptraf只能监控某个IP的流量,但是他的实现机制可以参考。
流量监控工具2——ntop
ntop的安装相对繁琐一些,碰到的问题也多一些,但是只要有耐心,还是可以顺利完成的。
tar -zxvf ntop-3.3.tar.gz
cd ntop-3.3
./autogen.sh
这里就碰到问题:configure: error: Unable to find RRD at /usr/local/rrdtool: please use --with-rrd-home=DIR
没办法,接着先安装rrdtool:
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.27.tar.gz
tar -zxvf rrdtool-1.2.27.tar.gz
cd rrdtool-1.2.27
./configure --prefix=/usr/local/rrdtool
又有问题,少了几个包:
wget http://oss.oetiker.ch/rrdtool/pub/libs/libart_lgpl-2.3.17.tar.gz
wget http://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.3.5.tar.gz
wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz
tar -zxvf libart_lgpl-2.3.17.tar.gz
cd libart_lgpl-2.3.17
./configure
make;make install
cd
tar -zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5
./configure
make ;make install
cd
tar -zxvf libpng-1.2.18.tar.gz
libpng-1.2.18
./configure
make ;make install
安装完后,继续安装rrdtool,竟然还是有问题,又查资料,将libart-2.0.pc和freetype2.pc复制到/usr/lib/pkgconfig/目录中,这下,安装rrdtool成功,然后安装ntop也顺利完成了。
接着,
cp ntop-3.3/packages/RedHat/ntop.conf.sample /usr/local/ntop/etc/ntop/ntop.conf
/usr/local/ntop/bin/ntop -P /usr/local/ntop/share/ntop -u root -A
然后设置两次密码,/usr/local/ntop/bin/ntop -u root运行即可。
通过http://IP:3000访问。
但是,这个工具获取的是各主机网卡上的流量,而不是访问internet的流量,直接使用是不现实的,但是有一定的参考价值。
流量监控工具3——iftop
wget http://www.sfr-fresh.com/unix/privat/iftop-0.17.tar.gz/
解压,cd iftop-0.17,./configure make make install
运行iftop -h
发现iftop能够在网关上运行,而且能够获取内部主机在网关上的流量情况,虽然他也是基于主机对,也就是每个连接上的流量显示,但是可以通过修改代码,将相同内部主机IP的连接的流量加起来就是单独一台主机的当前流量。终于找到了一个可以利用的工具,我只需要将他获取连接流量的模块取出来加以利用就能够实现我们要求的功能了。