千家信息网

shell编程实战之如何监控网卡流量

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关shell编程实战之如何监控网卡流量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近客户的网站出现卡慢现象,通过检查,出问题是原因是因
千家信息网最后更新 2026年11月03日shell编程实战之如何监控网卡流量

这篇文章将为大家详细讲解有关shell编程实战之如何监控网卡流量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近客户的网站出现卡慢现象,通过检查,出问题是原因是因为带宽吃紧,所以让客户将服务器带宽从原本的2M增加到4M的带宽,网站速度一下就提升了。那么如何监控网卡流量情况,linux有许多命令可以查看。比如iftop,sar等等。

这里,我想写一个监控网卡流量情况的脚本。统计每一分钟的网卡流量情况,输入到指定文件中。可以使用sar -n DEV 1 59查看一分钟内网卡平均流量。

此脚本的核心是获取1分钟内网卡的平均流量。我们来看看sar这个命令会输出哪些信息吧。

# sar -n DEV 1 59Linux 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   %ifutil11:25:26 AM      eth0     16.00     11.00      1.26      1.38      0.00      0.00      0.00      0.0011:25:26 AM        lo     12.00     12.00      4.77      4.77      0.00      0.00      0.00      0.0011:25:26 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil11:25:27 AM      eth0     18.00     23.00      2.98     28.85      0.00      0.00      0.00      0.0011: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   %ifutilAverage:         eth0      8.56     12.59      1.07      7.05      0.00      0.00      0.00      0.00Average:           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 eth0Average:         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:~/binexport 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_NAMEdone

该脚本的编写非常的简单,搞清楚了如何获取1分钟内网卡流量就搞定了90%了。不过有点要注意,我服务器上的网卡名称为eth0,你的可能名称和我不一样,所以如果你要使用该脚本,需要将所有的eth0改为你服务器上的网卡名。当然,可以将网卡名称当做参数来传递给脚本,这里为了图方便就没有这么做了(主要原因是不想对输入的网卡名做校验)。

来验证下此脚本是否能正常运行。执行该脚本后,查看下日志里的内容如下:

12:15eth0 input:16.64kbit/seth0 output:16.72kbit/s#########################12:16eth0 input:16.72kbit/seth0 output:17.12kbit/s#########################12:17eth0 input:17.92kbit/seth0 output:17.6kbit/s

可以看到,此脚本能正常运行。

关于shell编程实战之如何监控网卡流量就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

网卡 流量 脚本 监控 名称 命令 带宽 情况 日志 信息 文件 服务器 服务 输入 输出 实战 编程 内容 原因 字节 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 涨乐互联网科技 金融科技 互联网金融 互联网科技金融公司 深圳齐家互联网科技 互联网科技视频素材 互联网科技公司招聘 现代科技和互联网有关系吗 金融科技与互联网金融相同和不同 华服互联网科技官网 河南猎农互联网科技有限公司 宝灵互联网科技有限公司 畅思互联网科技 智帮互联网科技公司最近动向 电子商务与互联网科技的关系 云南省自由互联网科技有限公司 富国互联网科技002692 互联网与数字科技关系 信承诺互联网科技有限公司 六子台科技互联网展会 广州全民伙伴互联网科技有限公司 咖啡豆 深圳互联网科技公司 互联网科技教育视频 荆州市昕露互联网络科技有限公司 智腾互联网科技有限公司 下一代互联网重大应用科技园 数字科技和互联网金融哪个好 重庆科技产业互联网有哪些 互联网科技创业计划的风险分析 如何强化互联网金融科技
0