shell编程实战之监控网卡流量-linux运维
这里,我想写一个监控网卡流量状况的足本。统计每一分钟的网卡流量状况,输入到指定文件中。可以运用sar -n DEV 1 59查看一分钟内网卡均匀流量。
此足本的中心是猎取1分钟内网卡的均匀流量。我们来看看sar这个下令会导出哪些信息吧。
# sar -n DEV 1 59 Linux 4.18.0-80.11.2.el8_0.x86_64 (30gk.com) 09/20/2020 _x86_64_ (4 CPU) 11:25:25 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 11:25:26 AM eth0 16.00 11.00 1.26 1.38 0.00 0.00 0.00 0.00 11:25:26 AM lo 12.00 12.00 4.77 4.77 0.00 0.00 0.00 0.00 11:25:26 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 11:25:27 AM eth0 18.00 23.00 2.98 28.85 0.00 0.00 0.00 0.00 11:25:27 AM lo 12.00 12.00 4.77 4.77 0.00 0.00 0.00 0.00 …… Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: eth0 8.56 12.59 1.07 7.05 0.00 0.00 0.00 0.00 Average: lo 12.20 12.20 4.79 4.79 0.00 0.00 0.00 0.00
我们需要的信息是AVERAGE: eth0这行。rxkb/s表示网卡每秒承受的字节数,rxkb/s表示每秒发送的字节数,他们的单位都是kb。我们待会要将它转换为kbit/s,由于日常习习用kbit/s表示网络带宽运用状况。
然后,我们需要过滤其他不需要的行,运用grep下令可以轻松办到。第一grep过滤掉所有不含Average的行,然后过滤不含eth0的行。
# sar -n DEV 1 59 | grep -i average | grep eth0 Average: eth0 7.44 7.00 0.83 6.72 0.00 0.00 0.00 0.00
然后,运用awk下令过滤掉不需要的列,我们只需要第5列以及第6列信息;
# sar -n DEV 1 4 | grep -i average | grep eth0 | awk '{print $5*8"\t"$6*8}' 28.32 182.96
至此,我们已经猎取到了1分钟内eth0网卡的均匀输入导出流量了,该足本的中心题目解决了。下面贴出完备的代码:
#!/bin/bash # 监控网卡流量,并导出到日志文件中 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 日志寄存名目 PATH_DIR=/root/netdatas/`date +%F` # 日志文件名称 FILE_NAME=`date +%F`.log # 监控的网卡名称 NET_NAME=eth0 [ -d PATH_DIR ] || mkdir -p $PATH_DIR while [ 1 ];do date +"%H:%M" >> $PATH_DIR/$FILE_NAME netinfo=$(sar -n DEV 1 59 | grep -i average | grep $NET_NAME | \ awk '{print $5*8":"$6*8}' ) echo "$NET_NAME input:$(echo $netinfo | cut -d: -f1)kbit/s" >> $PATH_DIR/$FILE_NAME echo "$NET_NAME output:$(echo $netinfo | cut -d: -f2)kbit/s" >> $PATH_DIR/$FILE_NAME echo '#########################' >> $PATH_DIR/$FILE_NAME done
该足本的编写非常的简略,搞分明了怎样猎取1分钟内网卡流量就搞定了90%了。不外有点要注意,我办事器上的网卡名称为eth0,你的可能名称和我不同,所以要是你要运用该足本,需要将所有的eth0改为你办事器上的网卡名。固然,可以将网卡名称当成参数来通报给足本,这里为了图利便就没有这么做了(主要缘由是不想对输入的网卡名做校验)。
来验证下此足本可否能正常运转。施行该足本后,查看下日志里的内容如下:
12:15 eth0 input:16.64kbit/s eth0 output:16.72kbit/s ######################### 12:16 eth0 input:16.72kbit/s eth0 output:17.12kbit/s ######################### 12:17 eth0 input:17.92kbit/s eth0 output:17.6kbit/s
可以看到,此足本能正常运转。
以上就是shell编程实战之监控网卡流量的细致内容,更多请关注 百分百源码网 其它相干文章!