linux脚本:实现检测一台服务器上所有网络接口的带宽的bash脚本
目录
一、要求和分析
二、脚本实现
三、脚本说明
1. 获取网络接口列表
2. 读取流量统计
3. 计算带宽
4. 输出格式
四、运行示例
1、设置执行权限
2、运行
五、注意事项
1. 权限要求
2. 时间间隔
3. 多线程环境
4. 扩展功能
一、要求和分析
需要检测 Linux 服务器上除了 lo(loopback)接口以外所有网络接口带宽,可以使用bash脚本,计算每个网络接口的接收和发送速率,并输出结果。
使用脚本检测服务器上所有网络接口的带宽有多种作用和好处。
首先,它能够自动化监控流程,减少人工干预,提高效率。通过定时执行脚本,可以实时获取每个网络接口的流量信息,帮助管理员及时发现异常情况,如某个接口流量激增可能是由于DDoS攻击或配置错误引起的。
其次,这些数据有助于进行容量规划,通过对历史数据的分析来预测未来的网络需求,确保网络资源的有效利用和合理分配。此外,带宽监控还能为故障排查提供依据,当出现网络性能问题时,可以通过检查各接口的带宽使用情况快速定位问题根源。
最后,这种做法有助于提升服务质量和用户体验,保证关键应用和服务的稳定运行,尤其是在高负载情况下,确保有足够的带宽满足业务需求。
前面写了一个只有一个接口带宽的脚本,有兴趣可以参考:
《linux脚本:bash脚本定时检查网络带宽》
二、脚本实现
脚本代码如下:
#!/bin/bash
# 定义一个函数来获取指定网卡的流量统计
get_interface_stats() {
local interface=$1
local rx_bytes=$(cat /sys/class/net/"$interface"/statistics/rx_bytes)
local tx_bytes=$(cat /sys/class/net/"$interface"/statistics/tx_bytes)
echo "$rx_bytes $tx_bytes"
}
# 获取所有网络接口,排除 lo 接口
interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -v '^lo$')
# 保存初始流量统计
declare -A initial_stats
for interface in $interfaces; do
initial_stats["$interface"]=$(get_interface_stats "$interface")
done
# 等待一段时间(例如 1 秒)
sleep 1
# 获取最终流量统计
declare -A final_stats
for interface in $interfaces; do
final_stats["$interface"]=$(get_interface_stats "$interface")
done
# 计算每个接口的带宽
echo "接口名称 接收速度(B/s) 发送速度(B/s)"
echo "-----------------------------------------"
for interface in $interfaces; do
# 获取初始和最终的流量统计
read initial_rx initial_tx <<< "${initial_stats["$interface"]}"
read final_rx final_tx <<< "${final_stats["$interface"]}"
# 计算差值并转换为 KB/s
rx_diff=$((final_rx - initial_rx))
tx_diff=$((final_tx - initial_tx))
rx_speed=$((rx_diff ))
tx_speed=$((tx_diff ))
# 输出结果
printf "%-10s %-15d %-15d
" "$interface" "$rx_speed" "$tx_speed"
done
实际操作如下:
三、脚本说明
1. 获取网络接口列表
- 使用 ip -o link show 命令列出所有网络接口。
- 使用 grep -v '^lo$' 过滤掉 lo(loopback)接口。
2. 读取流量统计
- /sys/class/net/
- /sys/class/net/
3. 计算带宽
- 首先记录初始流量统计。
- 等待 1 秒后再次记录流量统计。
- 通过两次统计的差值计算每秒的接收和发送速度,并将结果从字节转换为 KB。
4. 输出格式
- 使用 printf 格式化输出接口名称、接收速度和发送速度。
四、运行示例
1、设置执行权限
保存文件为monitor_bw.sh ,并设置执行权限,如下:
2、运行
假设服务器上有两个网络接口 eth0 和 eth1,运行脚本后可能输出如下:
接口名称 接收速度(B/s) 发送速度(B/s)
-----------------------------------------
eth0 123 456
eth1 789 1024
实际运行结果如下:
可以看出端口占用的带宽;继续观察,结果如下:
五、注意事项
1. 权限要求
- 脚本需要读取 /sys/class/net/ 目录下的文件,因此可能需要以 root 用户或具有适当权限的用户运行。
2. 时间间隔
- 当前脚本默认等待 1 秒来计算带宽。如果需要更高的精度,可以调整 sleep 的时间。
3. 多线程环境
- 如果系统中存在多个网络接口并且流量较大,建议在生产环境中增加错误处理逻辑以确保脚本的稳定性。
4. 扩展功能
- 可以进一步扩展脚本,将带宽数据写入日志文件或通过邮件发送告警信息。
通过整个脚本进行带宽检测是一种维护网络安全、优化资源配置和提升服务质量的有效手段。可以通过实际操作来体验。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。