有一云上的项目,没有安装云提供的agent,项目也没配套的监控,因此打算使用shell统计网卡带宽的消耗信息。
脚本如下:
#!/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