简易 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 条评论
登录 后参与评论

相关文章

来自专栏惨绿少年

网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算...

2240
来自专栏QQ会员技术团队的专栏

告知你不为人知的 UDP:连接性和负载均衡

说起网络 socket,大家自然会想到 TCP ,用的最多也是 TCP,UDP 在大家的印象中是作为 TCP 的补充而存在,是无连接、不可靠、无序、无流量控制的...

6.9K11
来自专栏Golang语言社区

linux服务器开发三(网络编程) --一

网络基础协议的概念什么是协议 从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。 假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接...

53613
来自专栏算法修养

Nginx 日志 worker_connections are not enough while connecting to upstream

记一次,排查错误所遇到的问题,和学习到的内容。 上周五,刚上线的项目出现了503 ,查看日志发现如下内容: System.Exception: Request ...

53410
来自专栏移动开发

gradle小技巧

项目中经常会设置一个全局变量来控制log的打印,可以再gradle作如下配置,就可以在debug版本中输出日志,在release版本中关闭日志,避免忘记自己去手...

1692
来自专栏木木玲

Java程序员必须掌握的网站知识 —— TCP

3082
来自专栏Java面试通关手册

搞定计算机网络面试,看这篇就够了(补充版)

相对与上一个版本的计算机网路面试知识总结,这个版本增加了 “TCP协议如何保证可靠传输”包括超时重传、停止等待协议、滑动窗口、流量控制、拥塞控制等内容并且对一些...

1942
来自专栏LanceToBigData

TCP/IP中你不得不知的十大秘密

这段时间 有一点心很浮躁,不过希望自己马上要矫正过来。好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一、TCP/IP模型 TCP...

2486
来自专栏杨建荣的学习笔记

半自动化运维之动态添加数据文件(一) (r5笔记第55天)

在测试环境中,服务器和数据库实例真是多得数不胜数,自己也没有下意识去记住那个数据库实例在哪个服务器上,都是出了问题直接连过去解决。 这么多的数据库实例需要管理,...

32310
来自专栏小二的折腾日记

一文总结计算机网络

它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。 现在的 TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者...

1042

扫码关注云+社区

领取腾讯云代金券