centos 7 带宽资源消耗统计 并发送报警信息

2023-11-29 09:44:46 浏览数 (1)

有一云上的项目,没有安装云提供的agent,项目也没配套的监控,因此打算使用shell统计网卡带宽的消耗信息。

脚本如下:

代码语言:javascript复制

#!/bin/bash
#echo -e "33[36m*************带宽资源消耗统计*************33[0m"

#用数组存放网卡名
nic=($(ifconfig | grep ^[a-z] | grep -vE 'lo|docker0' | awk -F: '{print $1}'))
time=$(date " %Y-%m-%d %k:%M")
num=0

log="/tmp/network.txt"
log_all="/tmp/network_all.txt"
file=/proc/net/dev
# 运行前 重置 日志文件
echo '' > /tmp/network.txt

dk_warn='10'

#循环五次,避免看到的是偶然的数据
for ((i = 0; i < ${#nic[@]}; i  )); do
    while (($num < 5)); do
        rx_before=$(cat ${file} | grep ${nic[$i]} | tr : " " | awk '{print $2}')
        tx_before=$(cat ${file} | grep ${nic[$i]} | tr : " " | awk '{print $10}')
        sleep 2

        #用sed先获取第7列,再用awk获取第2列,再cut切割,从第7个到最后,即只切割网卡流量数字部分
        rx_after=$(cat $file | grep ${nic[$i]} | tr : " " | awk '{print $2}')
        tx_after=$(cat $file | grep ${nic[$i]} | tr : " " | awk '{print $10}')

        #注意下面截取的相差2秒的两个时刻的累计和发送的bytes(即累计传送和接收的位)
        rx_xc=$[rx_after-rx_before]
        rx_re=`echo "scale=5;${rx_xc}/1024/1024/2*8"|bc`
        rx_result=$(printf "%.5f" `echo ${rx_re}`)

        tx_xc=$[tx_after-tx_before]
        tx_re=`echo "scale=5;${tx_xc}/1024/1024/2*8"|bc`
        tx_result=$(printf "%.5f" `echo ${tx_re}`)

        echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >> $log

        let "num  "
    done

    #注意下面grep后面的$time变量要用双引号括起来
    rx_result=$(cat $log|grep "$time"|awk '{In =$4}END{print In}')
    tx_result=$(cat $log|grep "$time"|awk '{Out =$7}END{print Out}')
    In_Speed=$(printf "%.2f"  `echo "scale=5;$rx_result/5"|bc`)
    Out_Speed=$(printf "%.2f" `echo "scale=5;$tx_result/5"|bc`)

    echo -e " $time -> ${nic[$i]}  ->  In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps! "  >> ${log_all}

    # 去掉小数点和后面的数值
    if [[ ${In_Speed%.*} -gt $dk_warn ]];then
        ip_temp=$(hostname -I | awk '{print $1}')
      
        # 这个时间中间不能有空格
        time_temp=$(date " %Y-%m-%d_%H:%M:%S")
        # 这个link是企业微信上的 群聊机器人助手、需要手动创建
        link='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXXXXXXXXXX'

        curl -X POST $link 
        -H 'Content-Type: application/json' 
        -d '
        {
                "msgtype": "markdown",
                "markdown": {
                "content": "
                **有报警信息请注意**
                >故障主机: <font color="info">**'${ip_temp}'**</font>n
                >故障时间: <font color="comment">'${time_temp}'</font>n
                >故障详情: <font color="red">'网卡进流量超出10Mbps,请注意!!'</font>n
                >实际流量: <font color="blue">'${In_Speed}Mbps'</font>n
                "
                }
        }'
    fi

    if [[ ${Out_Speed%.*} -gt $dk_warn ]];then
        ip_temp=$(hostname -I | awk '{print $1}')
        # 这个时间中间不能有空格
        time_temp=$(date " %Y-%m-%d_%H:%M:%S")
        # 这个link是企业微信上的 群聊机器人助手、需要手动创建
        link='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXXXXXXXXXX'

        curl -X POST $link 
        -H 'Content-Type: application/json' 
        -d '
        {
                "msgtype": "markdown",
                "markdown": {
                "content": "
                **有报警信息请注意**
                >故障主机: <font color="info">**'${ip_temp}'**</font>n
                >故障时间: <font color="comment">'${time_temp}'</font>n
                >故障详情: <font color="red">'网卡出流量超出10Mbps,请注意!!'</font>n
                >实际流量: <font color="blue">'${Out_Speed}Mbps'</font>n
                "
                }
        }'
    fi

done

0 人点赞