作者:邓卫华 http://dengweihua1.blog.51cto.com
2010.9.28
近段时间准备XX集团数据中心准备迁移到专用的数据中心公司为集团提供更好的公共服务及互联网速度。期间需要对各家公司测试与我集团各公司之间的网络带宽性能。因为我这边刚才有一台LINUX服务器暂时未使用我就直接写了一个SHELL脚本来实现,但是因为各分公司无LINUX的条件所以还得在WINDOWS也能实现流量收集。
设计思路:
1、 windows通过性能计数器每秒收集一次网络数据。写一批处理文件,实现循环文件FTP上传,并在批处理中启动或停止“性能计数器”。
2、 LINUX: 写二个脚本,一个脚本每秒收收集一次网卡数据并写入文件,另一脚本实现FTP功能自动上传/下载。
最后完成的报告如下:
作者:邓卫华 http://dengweihua1.blog.51cto.com
第一部份:windows
一、开始、运行,输入“perfmon”打开性能计数器。
二、增加计数器
1、增加数据收集器集,注意收集器的名字,以后面的处理处会用到。
2、增加网络流量的计数器:进入用户定义,在系统监视器日志点点名键。
选择“Network Interface->Bytes Total/sec”,选定对像的实例处选择你的实际网卡。点“添加”
作者:邓卫华 http://dengweihua1.blog.51cto.com
3、设置收集间格时间为1s一次。文件格式为cvs.
三、完成批处理自动循环上传FTP数据。
批处理循环10次上传文件到FTP,在上传之前会自动启动“计数器收集器集”,完成后自动停止“计数器收集器集”,注意第二次启动测试之前一定要删除或移走之前生成的性能数据,或设置文件名生成规则。
@echo off
echo open your.ftpserver.com>ftp.txt
echo ftp-account>>ftp.txt
echo ftp-password>>ftp.txt
echo send g:\tddownload\test.rar 06.rar >>ftp.txt
echo bye>>ftp.txt
logman start "新的数据收集器集"
for /L %%a in (1,1,10) do ftp -i -s:c:\users\dengwh\desktop\ftp.txt
logman stop "新的数据收集器集"
作者:邓卫华 http://dengweihua1.blog.51cto.com
四、处理收集到的数据。
数据处理过程
作者:邓卫华 http://dengweihua1.blog.51cto.com
第二部份LINUX:
收集流量数据并写入文件的脚本:
[root@mail-bk ~]# cat test_bandwidth/test_bandwidth.sh
#!/bin/sh
OUTPUTFILE=bandw.txt
TAB='\t'
LINE=""
if [ -n "$1" ]; then
eth_name=$1
else
eth_name="eth0"
fi
i=0
send_o=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`
recv_o=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`
send_n=$send_o
recv_n=$recv_o
echo -e "Time $TAB SendRate $TAB RecvRate $TAB TotalRate $TAB avgsend $TAB avgrecv $TAB avgtotal"> $OUTPUTFILE
while [ 1 ]; do
send_l=$send_n
recv_l=$recv_n
sleep 1
send_n=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`
recv_n=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`
i=`expr $i + 1`
send_r=`expr $send_n - $send_l`
recv_r=`expr $recv_n - $recv_l`
total_r=`expr $send_r + $recv_r`
send_ra=`expr \( $send_n - $send_o \) / $i`
recv_ra=`expr \( $recv_n - $recv_o \) / $i`
total_ra=`expr $send_ra + $recv_ra`
sendn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $3}' | awk -F \) '{print $1}'`
recvn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $2}' | awk -F \) '{print $1}'`
echo -e `date +%T` $TAB $send_r $TAB $recv_r $TAB $total_r $TAB $send_ra $TAB $recv_ra $TAB $total_ra >> $OUTPUTFILE
clear
echo "=================================================="
echo "Last second : Send rate: $send_r Bytes/sec Recv rate: $recv_r Bytes/sec Total rate: $total_r Bytes/sec"
echo "Average value: Send rate: $send_ra Bytes/sec Recv rate: $recv_ra Bytes/sec Total rate: $total_ra Bytes/sec"
# echo "Total traffic after startup: Send traffic: $sendn Recv traffic: $recvn"
echo "=================================================="
done
[root@mail-bk ~]#
作者:邓卫华 http://dengweihua1.blog.51cto.com
2、 FTP自动上传/下载文件的脚本
[root@mail-bk ~]# cat test_bandwidth/test_ftp.sh
#!/bin/sh
i=1
LOGFILE=bandw.txt
ACTIVE=$1
if [ -z $ACTIVE ]; then
echo "usage ./test_ftp.sh [put or get]"
exit 1
fi
#SERVER=58.64.131.68
#USERNAME=nwttest3
#PASSWORD=BesT70Cr
SERVER=ftp.server.address
USERNAME=your.ftp.account
PASSWORD=your.ftp.password
while [ $i -le 10 ]; do
echo $LOGFILE$i.txt
sleep 10
echo ">>>>>>>>>>>>>>>FTP START: the $i >>>>>>>>>>>" >> $LOGFILE
ftp -n $SERVER <<END
user $USERNAME $PASSWORD
lcd /data/testdata
binary
verbose
$ACTIVE 07.rar
close
quit
END
echo ">>>>>>>>>>>>>>>>FTP END>>>>>>>>>>>>" >> $LOGFILE
i=`expr $i + 1`
done