zoukankan      html  css  js  c++  java
  • 查看网卡流量shell脚本工具:network_top.sh

           数据库服务器、图片服务器、提供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.com
    
    usage()
    {
    cat <<EOF
    Usage: $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.
    EOF
    exit 1
    }
    
    if [ "$#" -lt 1 ] ; then
       usage
    fi
    
    for 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
        shift
    done
    
    infirst=$(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=0
    while [ "$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
  • 相关阅读:
    HDU 2955 Robberies(01背包)
    HDU 2602 Bone Collector(01背包)
    HUST 1352 Repetitions of Substrings(字符串)
    HUST 1358 Uiwurerirexb jeqvad(模拟解密)
    HUST 1404 Hamming Distance(字符串)
    HDU 4520 小Q系列故事――最佳裁判(STL)
    HDU 2058 The sum problem(枚举)
    【破解】修改程序版权、添加弹窗
    HDU 1407 测试你是否和LTC水平一样高(枚举)
    HDU 1050 Moving Tables(贪心)
  • 原文地址:https://www.cnblogs.com/ylqmf/p/2217561.html
Copyright © 2011-2022 走看看