最近要检查网卡流量,其实是有各种现存工具,非常容易实现
但需要把这个东西与icinga2 集成起来搞报警什么的。
这些cati collectd tsar 网管 snmp 等等,就不那么实用了。
有个nagios的集成插件,看了下很复杂,想着就自己写一个。
原理就是 /proc/net/dev 这个文件,里面有统计相关的数据包
http://blog.csdn.net/tenfyguo/article/details/7478584 proc的解释。
然后定期执行这个脚本,输出就是带宽以及nagios匹配的性能数据
代码语言:txt复制root@puppet|files $ sudo -u nagios ./traffice.sh
rx_band=0.02Mbps ,tx_band=0.05Mbps, |rx_band=22163.478964; rx_pps=141.927167; rx_drop=0.000000; tx_band=54253.665642; tx_pps=66.715832; tx_drop=0.000000;
下面就是traffice.sh 有内容。没有额外组件。只有awk sed shell 基本命令
代码语言:txt复制#! /bin/bash
FILE=/proc/net/dev
TIME=`date %s`
LOG=/tmp/nagios_traffic.log
usage () {
cat << EOF
这是一个用来计算网卡流量的脚本,可用于nagios的检测
edit by momo
`basename $0` $1
$1是告警带宽阀值,default=62914560,即60Mbps,只能输入数字,使用60*1024*1024
EOF
}
get_current_traffice () {
sed 's/:/ /g' $FILE | awk '{if($0~/eth0/) { print "TIME="'$TIME';
printf "rx_bytes=%ldnrx_packets=%ldnrx_drop=%ldn" ,$2,$3,$4;
printf "tx_bytes=%ldntx_packets=%ldntx_drop=%ldn" ,$10,$11,$12; }
}' > $LOG
. $LOG
}
get_last_traffice () {
sed -i 's/=/last=/g' $LOG
. $LOG
}
count_traffice () {
echo | awk 'BEGIN{difftime='$TIME'-'$TIMElast';
speed_rx_bytes=('$rx_bytes'-'$rx_byteslast')*8/difftime;
speed_rx_packets=('$rx_packets'-'$rx_packetslast')*8/difftime;
speed_rx_drop=('$rx_drop'-'$rx_droplast')*8/difftime;
speed_tx_bytes=('$tx_bytes'-'$tx_byteslast')*8/difftime;
speed_tx_packets=('$tx_packets'-'$tx_packetslast')*8/difftime;
speed_tx_drop=('$tx_drop'-'$tx_droplast')*8/difftime;}
{printf "rx_band=%.2fMbps ,tx_band=%.2fMbps, |rx_band=%f; rx_pps=%f; rx_drop=%f; tx_band=%f; tx_pps=%f; tx_drop=%f;" ,speed_rx_bytes/1048576, speed_tx_bytes/1048576, speed_rx_bytes,speed_rx_packets,speed_rx_drop,speed_tx_bytes,speed_tx_packets,speed_tx_drop}
END{if(speed_rx_bytes > '$LIMIT' || speed_tx_bytes > '$LIMIT' ) exit 2 ; else exit 0}'
}
if [ -z $1 ];then
LIMIT=62914560
else
LIMIT="$1"
fi
#echo $LIMIT
if [ -f $LOG ];then
get_last_traffice
get_current_traffice
count_traffice
else
>$LOG
fi
直接复制下来可以在centos ubuntu 等有/proc/net/dev 这个文件的进行执行。
第一次和第二次会执行失败,第三以后会执行成功。
如果要集成至nagios/icinga 记得检查 $LOG 这个文件的权限。需要nagios相关用户对此有写权限。