前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >centos 7 带宽资源消耗统计 并发送报警信息

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

原创
作者头像
xmlgrg
修改2023-11-29 09:44:46
2340
修改2023-11-29 09:44:46
举报
文章被收录于专栏:网管运维

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

脚本如下:

代码语言:javascript
复制

#!/bin/bash
#echo -e "\033[36m*************带宽资源消耗统计*************\033[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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档