专栏首页莫韵的专栏简易 linux 网卡带宽检查工具纯 shell 和 awk
原创

简易 linux 网卡带宽检查工具纯 shell 和 awk

最近要检查网卡流量,其实是有各种现存工具,非常容易实现

但需要把这个东西与icinga2 集成起来搞报警什么的。

这些cati collectd tsar 网管 snmp 等等,就不那么实用了。

有个nagios的集成插件,看了下很复杂,想着就自己写一个。

原理就是 /proc/net/dev 这个文件,里面有统计相关的数据包

http://blog.csdn.net/tenfyguo/article/details/7478584 proc的解释。

然后定期执行这个脚本,输出就是带宽以及nagios匹配的性能数据

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 基本命令

#! /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=%ld\nrx_packets=%ld\nrx_drop=%ld\n" ,$2,$3,$4;
printf "tx_bytes=%ld\ntx_packets=%ld\ntx_drop=%ld\n" ,$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相关用户对此有写权限。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux 根分区的空间去哪里了 ?记一次根分区满的服务故障排查记录

    linux 根分区的空间去哪里了 ?记一次根分区满的服务故障排查记录。我的排查思路是先找占用没有占用,找占用的文件句柄。

    莫韵
  • 关于zk迁移的一些教训

    https://cloud.tencent.com/developer/article/1406912

    莫韵
  • 这个python程序怎么就是没更新

    把supervisor进程重启一把 supervisorctl status 服务又正常了 托管的代码也同样更新成功

    莫韵
  • 值得一看!2018年最优秀的9个Android Material Design Apps!

    今年4月,谷歌Gmail推出了全新的设计外观,全新的配色方案,更多的空白区域和精致的图标。也带来了Material Design 的一些改变 – Materia...

    奔跑的小鹿
  • wordpress调用指定post type文章怎么操作

      我们有时会用wordpress创建好几种post type文章,比如默认的post文章和product文章,如果我们要在每个页面的底部调用post type...

    ytkah
  • 透彻影像王书浩:三易其辙与功不唐捐

    作为透彻影像的技术总监,王书浩的经历可谓「不走寻常路」:本科的背景是量子物理,博士生阶段从「分布式系统的性能优化」方向入门计算机科学;他在深度学习一途上的尝试也...

    机器之心
  • 原 Spark Shuffle

    云飞扬
  • 拯救乳房:乳腺癌AI诊断系统

    腾讯技术工程官方号
  • AI与设计:技术思维与设计思维的mix

    最近在思考一些机器学习给设计带来的思维转变,还有对交互设计的影响,本文把一些读书笔记,及感想总结而成,主要是涉及AI技术、技术思维、设计思维、设计工具、用户体验...

    mixlab
  • 从量子物理到AI医疗,这位清华博士后想用十年弥补病理医生的"百年缺口"

    根据WHO下属“国际癌症研究机构”公布的最新全球癌症数据报告,2018年全球新增癌症诊断病例约1910万,死亡病例约960万。约1/5男性和1/6女性在一生中会...

    数据派THU

扫码关注云+社区

领取腾讯云代金券