資料庫伺服器、圖片伺服器、提供FTP伺服器等網卡的流量,一般都會比較大,為此我們非常有必要進行必要的監控措施,以便知曉網卡是否會成為瓶頸,以及可以建立網卡流量基準線,方便對比查看流量是否有異常。
通過shell指令碼編寫一小段代碼實現查看網卡連接埠流量的效果:
1) 查看指定的某網卡連接埠的流量
2) 查看連接埠的流入值/流出值/總量值;
3) 指定二次觀察連接埠流量的間隔時間和觀察次數;
shell指令碼network_top.sh實現的三種效果,:
1) 執行network_top.sh指令碼無傳遞任何參數的錯誤提示資訊
圖1-1
2) 執行network_top.sh指令碼傳遞錯誤參數的錯誤提示資訊
圖1-2
3) 執行network_top.sh指令碼正確傳遞參數的採集資料
圖1-3
shell指令碼network_top.sh的程式碼片段
#!/bin/bash#Name: network_top.sh#Usage: sh network_top.sh --network-port=eth0 --interval-time=1 --repeat-total=10#Description: monitor the network interface's flow#WebSite: www.mysqlops.comusage(){cat <<EOFUsage: $0 [OPTIONS] --network-port=ethN Show which network port,For Example --network-port=eth0. --interval-time=N Every twice that need interval time,For Example --interval-time=1. --repeat-total=N We need to see a continuous flow of card number,For Example --repeat-total=10.EOFexit 1}if [ "$#" -lt 1 ] ; then usagefifor INPUT_DATA in $*do INPUT_DATA_1=$1 Val=`echo "$INPUT_DATA_1" | sed -e "s;--[^=]*=;;"` case "$INPUT_DATA_1" in --network-port=*) ETH_PORT="$Val" ;; --interval-time=*) INTERVAL_TIME="$Val" ;; --repeat-total=*) REPEAT_TOTAL="$Val" ;; *) echo -e "\n ERROR VARIABLES: $INPUT_DATA_1 \n" usage exit 1 ;; esac shiftdoneinfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$ETH_PORT'/{print $2}')outfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$ETH_PORT'/{print $10}')echo "$ETH_PORT" "in_bytes/sec" "out_bytes/sec" "total_bytes/sec" |awk '{printf("%10s %16s %16s %16s\n",$1,$2,$3,$4)}'sleep $INTERVAL_TIME"s"i=0while [ "$i" -lt "$REPEAT_TOTAL" ]do inend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$ETH_PORT'/{print $2}') outend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$ETH_PORT'/{print $10}') sumin=$((($inend-$infirst)/$INTERVAL_TIME)) sumout=$((($outend-$outfirst)/$INTERVAL_TIME)) sum=$(($sumin+$sumout)) echo "$ETH_PORT" $sumin $sumout $sum |awk '{printf("%10s %16s %16s %16s\n",$1,$2,$3,$4)}' infirst=$inend outfirst=$outend i=$(($i+1)) sleep $INTERVAL_TIME"s"done