Zabbix 自定义网卡流量监控脚本改进

回复 收藏
说明: 此脚本在铭哥课程基础上改进,可以一键执行,不用先去创建时间戳和网卡的流量的历史文件,脚本会自己先判断,然后再决定是否创建。希望大家继续优化。
  1. #!/bin/bash
  2. # zabbix 自定义监控脚本
  3. ##############################################################################
  4. # 根据/proc/net/dev网卡流量信息,获取某一时刻当前网卡上的总流量信息,\       #
  5. # 记录到临时文件中,自此时刻开始,过一段时间再获取一次总流量信息,计算\      #
  6. # 两个时刻的时间差dt与网卡上的流量差dn,用dn/dt算出这一时间短的流量平均值\    #
  7. # 作为网卡的负载衡量值.                                                      #
  8. ##############################################################################
  9. #   $1:某一块网卡 $2:进或出的流量
  10. eth=$1
  11. io=$2
  12. net_file="/proc/net/dev"
  13. # 初始化生成网卡in 记录文件
  14. if [ -f /tmp/net_"$eth"_in.log ];then
  15.         echo "File exist." > /dev/null
  16. else
  17.         touch /tmp/net_"$eth"_in.log
  18.         date +%s >> /tmp/net_"$eth"_in.log
  19.         grep "$eth" $net_file |awk '{print $2}'  >> /tmp/net_"$eth"_in.log
  20.         # 开始文件不存在,创建完之后,只需修改一次属主。
  21.     chown zabbix /tmp/net_"$eth"_in.log
  22. fi
  23. # 初始化生成网卡out 记录文件
  24. if [ -f /tmp/net_"$eth"_out.log ];then
  25.         echo "File exist." > /dev/null
  26. else
  27.         touch /tmp/net_"$eth"_out.log
  28.         date +%s >> /tmp/net_"$eth"_out.log
  29.         grep "$eth" $net_file |awk '{print $10}'  >> /tmp/net_"$eth"_out.log
  30.         # 开始文件不存在,创建完之后,只需修改一次属主。
  31.     chown zabbix /tmp/net_"$eth"_out.log
  32.         sleep 1
  33. fi
  34. # 开始计算网卡平均流量
  35. if [ $2 == "in" ];then
  36.         # 过滤出当前时刻进网卡$eth的流量
  37.         n_new=`grep "$eth" $net_file |awk '{print $2}'`
  38.         # 对每一张网卡单独写一个文件
  39.         n_old=`tail -1 /tmp/net_"$eth"_in.log`
  40.         # bc 类似于python,支持数学运算,从标准输入读取.
  41.         dn=`echo "$n_new-$n_old" |bc`
  42.         t_new=`date +%s`
  43.         # 总是取倒数第二行
  44.         t_old=`tail -2 /tmp/net_"$eth"_in.log |head -1`
  45.         dt=`echo "$t_new-$t_old" |bc`
  46.         if_net=`echo "$dn/$dt" |bc`
  47.         echo $if_net
  48.         # 保存当前时刻的时间戳和进网卡流量
  49.         date +%s >> /tmp/net_"$eth"_in.log
  50.         grep "$eth" $net_file |awk '{print $2}' >> /tmp/net_"$eth"_in.log
  51. elif [ $2 == "out" ];then
  52.         # 过滤出当前时刻出网卡$eth的流量
  53.     n_new=`grep "$eth" $net_file |awk '{print $10}'`
  54.     n_old=`tail -1 /tmp/net_"$eth"_out.log`
  55.     dn=`echo "$n_new-$n_old" |bc`
  56.     t_new=`date +%s`
  57.     t_old=`tail -2 /tmp/net_"$eth"_out.log |head -1`
  58.     dt=`echo "$t_new-$t_old" |bc`
  59.     if_net=`echo "$dn/$dt" |bc`
  60.     echo $if_net
  61.     # 保存当前时刻的时间戳和出网卡流量
  62.     date +%s >> /tmp/net_"$eth"_out.log
  63.     grep "$eth" $net_file |awk '{print $10}' >> /tmp/net_"$eth"_out.log
  64. else
  65.         echo 0
  66. fi
2016-07-24 08:56 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: