返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1805|回复: 0

[原创] 【原创】监测实时网络流量脚本模块

[复制链接]
发表于 2021-2-20 11:10:05 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
#! /bin/bash
#ver 1.0
#By swztdza-2020.12.30
#适用于centos、redhat6版本


        netcard="eth5"
        #修改此项为实际使用网卡地址,使用ifconfig查看

        s=1

        netdisk1=$(ifconfig eth5 | grep 'RX bytes' | awk '{print $2}' | sed s/bytes://)
        #获取网络流量总量-上传
        netdisk2=$(ifconfig eth5 | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
        #获取网络流量总量-下载

        ptime=0 #程序时间,用于使用程序初始化

        while [ $s -ge 0 ] #死循环
        do

        #echo $ptime

        #sz13=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
        #sz13=$(#获取最高的cpu数
        #sz13=$(
        #sz13=$(sz14=$(top -n 1 | sed -n '8p' | awk '{print $13}')
        #sz13=$(#获取当前消耗cpu最高的进程

        if [ $ptime -gt 0 ];then   #检测是否为程序初始化状态

        echo "----------------服务器状态监测,每 1 秒检测一次 ctrl+c可以退出程序----------------"

        date +"%Y-%m-%d %T  %A"

        echo -e "\e[43m----------------cpu  status----------------\e[0m"

        pd1=$(uptime | awk '{print $6}')
        if [ $pd1 == "min," ];then

                #echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print ($11,$12,$13)}')  "\e[1;32m ● \e[0m"

                #新设定监控值为3
                sz4=$(echo $(uptime | awk '{print $11}')| sed s/,// | awk '{if($0 < 3)

                #使用awk工具判断浮点数,并赋值给sz4
                        print "0"
                else
                        { print "1"  } }')

                if [ $sz4 == "0" ];then
                        echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;32m ● \e[0m"
                        echo '负载正常'
                        #echo "min"  #调试行
                else
                        sz13=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
                        #获取最高的cpu数
                       
                        sz14=$(top -n 1 | sed -n '8p' | awk '{print $(NF-1)}')
                        #获取当前消耗cpu最高的进程
                        echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;5;31m ● \e[0m"

                        echo -e "当前单个进程cpu损耗最高百分比:" $sz13 "进程名:" $sz14

                        echo -e '\e[1;31m当前负载过高警告!当前负载过高警告\e[0m'

                fi

               
                sz5=$(whoami)
                #获取当前登陆用户用户名


                sz6=$(who | grep $sz5 | sed -n '1p' | awk '{print $5}' | sed 's/(//' | sed 's/)//')
                #获取当前登陆用户ip

                if [ -z $sz6 ];then
                        echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($7)}') "\e[1;34m当前登陆用户:\e[0m"$sz5 "\e[1;34mIP address:\e[0m" "su 用户无法获取"

                else

                if [[ $2 == '1' ]];then

                        sz11=$(curl -s http://ip.tool.chinaz.com/$sz6 | grep "w50-0" | sed -n '2p' | awk '{print $3,$4}' | sed 's/w50-0">//' | sed 's/<\/span>//')
                #获取当前登陆用户ip现实地址,外网接口http://ip.tool.chinaz.com/【IP地址】,如程序变慢,请尝试注释此行配置再次运行。
                #添加第二个位置参数,为1时才执行ip地址解析!!
                fi

                        echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($7)}') "\e[1;34m当前登陆用户:\e[0m"$sz5 "\e[1;34mIP address:\e[0m"$sz6 $sz11

                fi


                echo -e "\e[1;34m服务器已运行 \e[0m" $(uptime | awk '{print ($3)}') "\e[1;34m天\e[0m"
                echo -e "\e[0m"
        else
               
                #echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print ($10,$11,$12)}') "\e[1;32m ● \e[0m"


                sz1=$(echo $(uptime | awk '{print $10}')| sed s/,// | awk '{if($0 < 3)

                #使用awk工具判断浮点数,并赋值给sz1
                        print "0"
                else
                        { print "1"  } }')

                if [ $sz1 == "0" ];then
                        echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;32m ● \e[0m"
                        #echo -e "当前单个进程cpu损耗最高百分比:" $sz13 "进程名:" $sz14
                        echo '负载正常'
                        #echo "no min"  #调试行
                else
                        sz15=$(top -n 1 | sed -n '8p' | awk '{print $(NF-4)}')
                        #获取最高的cpu数
                       
                        sz16=$(top -n 1 | sed -n '8p' | awk '{print $(NF-1)}')
                        #获取当前消耗cpu最高的进程
                        echo -e "\e[1;34m分别为1分钟,5分钟,15分钟cpu负载:\e[0m"  $(uptime | awk '{print $(NF-2),$(NF-1),$(NF)}') "\e[1;5;31m ● \e[0m"

                        echo -e "当前单个进程cpu损耗最高百分比:" $sz15 "进程名:" $sz16

                        echo -e '\e[1;31m当前负载过高警告!当前负载过高警告!\e[0m'

                fi



                sz9=$(whoami)
                #获取当前登陆用户用户名

                sz10=$(who | grep $sz9 | sed -n '1p' | awk '{print $5}' | sed 's/(//' | sed 's/)//')
                #获取当前登陆用户ip

                if [ -z $sz10 ];then
                        echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($6)}') "\e[1;34m当前登陆用户:\e[0m"$sz9 "\e[1;34mIP address:\e[0m" "su 用户无法获取"
                else

                if [[ $2 == '1' ]];then
                        sz12=$(curl -s http://ip.tool.chinaz.com/$sz10 | grep "w50-0" | sed -n '2p' | awk '{print $3,$4}' | sed 's/w50-0">//' | sed 's/<\/span>//')
        #获取当前登陆用户ip现实地址,外网接口http://ip.tool.chinaz.com/【IP地址】,如程序变慢,请尝试注释此行配置再次运行。
        #添加第二个位置参数,为1时才执行ip地址解析!!
                fi

                        echo -e "\e[1;34m登陆用户数:\e[0m"$(uptime | awk '{print ($6)}') "\e[1;34m当前登陆用户:\e[0m"$sz9 "\e[1;34mIP address:\e[0m"$sz10 $sz12

                fi
                #echo -e "\e[1;34m登陆用户数:\e[0m" $(uptime | awk '{print ($6)}')
                echo -e "\e[1;34m服务器已运行 \e[0m" $(uptime | awk '{print ($3)}') "\e[1;34m天\e[0m"
                echo -e "\e[0m"
        fi

        echo -e "\e[43m----------------disk status----------------\e[0m"
        #df -h | sed -n "1,2p"
        df -h
        echo -e "\e[43m----------------MEM status----------------\e[0m"
        free -m
        echo -e "\e[43m----------------Net  status----------------\e[0m"
        #ifconfig eth0 | grep bytes

        if [ $c -gt 3000 ];then
                c2=$(echo -e "\e[1;31m下载负载超限,已生成警告日志文件:/root/LTlog/warning.txt\e[0m")
        elif [ $c -gt 1600 ];then
                c2=$(echo -e "\e[1;34m下载负载过高\e[0m")
        elif [ $c -lt 1600 ];then
                c2=$(echo "下载负载正常")
        fi 2> /dev/null

        if [ $c1 -gt 200 ];then
                c3=$(echo -e "\e[1;31m上传负载超限,已生成警告日志文件:/root/LTlog/warning.txt\e[0m")
        elif [ $c1 -gt 160 ];then
                c3=$(echo -e "\e[1;34m上传负载过高\e[0m")
        elif [ $c1 -lt 160 ];then
                c3=$(echo "上传负载正常")
        fi 2> /dev/null

        #网络模块初始化段,删除会出现赋值前字符异常
        if [ $ptime -lt 2 ];then
                bl1=0
                bl2=0

                c="null"
                C="null"

                c1="null"
                C1="null"

                D1="null"
                D3="null"

                D2="null"
                D4="null"

                echo "网络模块初始化中。。。"
        fi


        echo "下载实时流量:" $c " kb/s" "下载实时数据包:" $C " 个" $c2  2> /dev/null
        echo "上传实时流量:" $c1 " kb/s" "上传实时数据包:" $C1 " 个" $c3  2> /dev/null

        if [ $bl1 -gt 0 ];then
                echo "程序运行至现在的下载流量总量:" $D1 "KB" $D3 "MB"  2> /dev/null
        else
                echo "程序运行至现在的下载流量总量:" $D1 "KB"  2> /dev/null
        fi

        if [ $bl2 -gt 0 ];then  
                echo "程序运行至现在的上传流量总量:" $D2 "KB" $D4 "MB"  2> /dev/null
        else
                echo "程序运行至现在的上传流量总量:" $D2 "KB"  2> /dev/null
        fi



        A=$(ifconfig $netcard | grep 'RX pack' | awk '{print $2}' | sed s/packets://)
        a=$(ifconfig $netcard | grep 'RX bytes' | awk '{print $2}'| sed s/bytes://)
        A1=$(ifconfig $netcard | grep 'TX pack' | awk '{print $2}' | sed s/packets://)
        a1=$(ifconfig $netcard | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
        #将网络实时流量放在最后是因为需要计时的原因,方便查看!
        #获取前一秒的总上传下载数据包和字节数
       

        #此段以下为程序的下半段
        sleep 1

        ptime=$((ptime+1))

        #netcard="eth5"

        B=$(ifconfig $netcard | grep 'RX pack' | awk '{print $2}' | sed s/packets://)
        b=$(ifconfig $netcard | grep 'RX bytes' | awk '{print $2}'| sed s/bytes://)
        B1=$(ifconfig $netcard | grep 'TX pack' | awk '{print $2}' | sed s/packets://)
        b1=$(ifconfig $netcard | grep 'TX bytes' | awk '{print $6}' | sed s/bytes://)
        #获取下一秒的总上传下载数据包和字节数

        c=$(((b-a)/1024))  #下一秒的字节数与上一秒的字节数相减,获得当前网络流量(kb/s)
        c1=$(((b1-a1)/1024))  #下一秒的字节数与上一秒的字节数相减,获得当前网络流量(kb/s)
        #上传和下载网络即时流量获取         

        C=$((B-A))  #下一秒的数据包和上一秒的数据包相减,获得当前数据包数量
        C1=$((B1-A1))        #下一秒的数据包和上一秒的数据包相减,获得当前数据包数量
        #上传和下载网络即时数据包获取

        bl1=0
        bl2=0


        D1=$(((b-netdisk1)/1024))
        if [ $D1 -gt 1024 ];then
                bl1=1
                D3=$((D1/1024))
        fi

        #统计程序开始时网络流量总量-下载


        D2=$(((b1-netdisk2)/1024))
        if [ $D2 -gt 1024 ];then
                bl2=1
                D4=$((D2/1024))
        fi

        #统计程序开始时网络流量总量-上传


        else  #程序初始化状态的if循环段落的else语句
                clear
                echo "程序初始化中。。。"

                #pd3=$(pstree -ps | grep LTlogserver)
        #检测进程中是否存在LTlogserver进程并赋值给pd1

        #if [ -z "${pd3}" ];then  #判断pd3变量中是否存在字符(没有进程则不会有字符)
        ##注意判断时,如果是字符串类型要用引号引起来,不然会报错

        #        echo -e '程序初始化中。。。。'
        #        ptime3=1
        #       
        #else
        #        sz7=$(pstree -ps | grep LTlogserver | sed -n "1p" | awk -F -LTlogserver.sh '{print $2}' | sed 's/(//' | sed 's/).*$//')
        #        echo -e '程序初始化中。。。。'
        #        ptime3=1

        #fi

        #pd4=$(systemctl status httpd > /dev/null && echo $?)
        ##检测服务中是否存在httpd服务并赋值给pd2
        #if [ -z "${pd4}" ];then  #判断pd2变量中是否不等于0(服务有启动则为0)
        #        echo -e '程序初始化中。。。。。'
        #        ptime4=1
        #else
        #        sz8=$(systemctl status httpd | grep Main | awk '{print $3}')
        #        echo -e '程序初始化中。。。。。'
        #        ptime4=1
        #
        #fi
        #        if [ $ptime4 -gt 0 ];then
        #                ptime=1
        #        else
        #                exit
        #        fi

                #ptime变量为程序初始值变量,不能删除,否则会执行错误
                ptime=1       

                clear
       
        fi    #程序初始化状态的if循环段落的结束语句

        #clear
        #done
#fi


#        a=$(ifconfig eth1 | grep 'RX pack' | awk '{print $5}')
#        A=$(ifconfig eth0 | grep 'RX pack' | awk '{print $3}')
#        a1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $5}')
#        A1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $3}')
#        #将网络实时流量放在最后是因为需要计时的原因,方便查看!
#
#        sleep $1
#
#        b=$(ifconfig eth0 | grep 'RX pack' | awk '{print $5}')
#        B=$(ifconfig eth0 | grep 'RX pack' | awk '{print $3}')
#        b1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $5}')
#        B1=$(ifconfig eth0 | grep 'TX pack' | awk '{print $3}')
#
#        c=$(((b-a)/1000))
#        c1=$(((b1-a1)/1000))       
#
#        C=$((B-A))
#        C1=$((B1-A1))       

        clear
        done


 楼主| 发表于 2021-2-20 11:16:02 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表