Lazy loaded image
技术分享
在飞牛NAS中编写部署一个网速监控记录脚本
字数 2133阅读时长 6 分钟
2025-8-31
2025-8-31
type
status
date
slug
summary
tags
category
icon
password
Status
😀
NAS异地备份至另一台NAS,由于跨网清算,造成白天网速及其慢,只有几KB,晚上网速稍微好些,可以达到500KB左右,于是想监测最佳备份时间段。无奈在docker尝试的netdata并不理想,于是尝试自己编写一个监测脚本,监测网速,毕竟只是获取网卡流量信息,应该具有可行性。

需求:

我的NAS用的是飞牛OS,飞牛OS是基于debian系统的,我想通过编一个脚本,监测和记录网络上传和下载速率状态,并按每天保存监测记录。请注意:我并不是想测速,我只是想检测网络状态,比如每10秒记录一次上传和下载状态。具体实现内容包括
  • 一个超轻量 Bash 脚本,每 10 秒记录一次网卡的上传/下载速率与累计字节数,按天保存 CSV 日志
  • 一套 systemd 服务,开机自启、异常自动重启。
我会贴出我的脚本代码,并记录部署过程。

部署过程

识别指定网卡

在编写脚本代码前先查看需要监测哪个网卡,使用以下命令查看网卡。这一步至关重要。
notion image
我这台机子上网卡挺多,主要是:
  • eno1 → 物理网口(主网卡,是我上网用的)
  • eno1-ovs / ovs-system / br-xxx / docker0 / veth… → 这些都是虚拟网桥、容器、虚拟机相关的接口
所以正常情况下你只需要监控 eno1
接下来我会先将两个脚本的代码贴出来,然后再贴出部署的步骤和命令。

1)脚本:/opt/netmon/netmon.sh


2)systemd 服务:/etc/systemd/system/netmon.service

如需固定监测某个网卡,例如 eno1,把 Environment=IFACE 的值改成 Environment=IFACE=eno1 即可。
 

3)一步步部署(复制即用)

在 NAS 上通过 SSH 执行:
1. 切换 root(或在后续命令前加 sudo)
2. 放置脚本
3. 创建 systemd 服务
4. 重新加载并开机自启 & 立即启动
5. 查看运行状态
6. 20~30 秒后查看当日日志末尾几行

4)如何读取与理解日志

  • 路径:/var/log/netmon/netmon_YYYY-MM-DD.csv

CSV 字段说明

  • timestamp → 记录时间戳(ISO 格式,含时区 +08:00)。
  • iface → 监控的网卡,这里是 eno1(你的物理网口)。
  • rx_total_bytes → 接收的累计字节数(从系统开机以来)。
  • tx_total_bytes → 发送的累计字节数。
  • rx_rate_Bps → 最近 10 秒内的平均下载速率(以 字节/秒 为单位)。
  • tx_rate_Bps → 最近 10 秒内的平均上传速率(字节/秒)。
  • rx_rate_Mbps → 最近 10 秒内的平均下载速率(换算成 兆比特每秒 Mbps)。
  • tx_rate_Mbps → 最近 10 秒内的平均上传速率(Mbps)。
快速查看今天的实时变化
 

5)常见问题(FAQ)

Q1:不知道我的网卡名是什么?
执行 ip -br link,常见名称如 eth0, eno1, enp3s0, br0, bond0 等。把服务里的 IFACE 改成对应名称。
Q2:我有多块网卡要同时监测?
最简单办法是复制一份服务netmon-eth0.service,把 IFACE=eth0;再复制一份 netmon-br0.service,把 IFACE=br0,各自 enable --now 即可(也可以把服务做成模板 netmon@.service,进阶玩法此处不赘述)。
Q3:脚本记录的是“NAS 这块网卡”的流量,不区分内网/外网/进程,能否只看外网?
此脚本关注“该网卡的实际收发”。若要仅统计外网更细粒度(按端口/进程),可以考虑:
  • 使用 vnstat(轻量,按接口与按日/月统计);
  • 利用 iptables/nftables 计数器统计出站/入站(需要配置规则)。
Q4:如何修改采样间隔为 5 秒?
编辑 /etc/systemd/system/netmon.serviceEnvironment=INTERVAL=10 改成 5,然后:
Q5:如何停止/卸载?

6)你可能会用到的排错命令


查看监测文件

监测文件保存在/var/log/netmon/目录下

举例解读一条记录

  • 时间:2025-08-31 13:49:00
  • 网卡:eno1
  • 总接收:~6.78 GB
  • 总发送:~25.06 GB
  • 下载速率:13582.20 B/s ≈ 13.6 KB/s ≈ 0.109 Mbps
  • 上传速率:2666.60 B/s ≈ 2.6 KB/s ≈ 0.021 Mbps
说明当时网络几乎闲置,只有很轻的上传/下载流量。

为了更加直观看数据,接下来写一个小工具,把这个 CSV 转成 曲线图(上传/下载速率随时间变化)

写一个 Python 脚本,直接读取 /var/log/netmon/netmon_YYYY-MM-DD.csv,绘制上传/下载速率随时间变化的曲线图,并保存成 PNG 文件。

安装Python 3和pandas模块

假设你的 NAS 已安装 Python 3,如果没有,可以先安装:
测试是否安装成功
如果输出 OK 就说明安装成功。

Python 脚本:/opt/netmon/netmon_plot.py

使用方法

  1. 保存脚本:
  1. 绘制今天的图:
  1. 绘制指定日期:
  1. 生成的图会保存在:
直接到/var/log/netmon/目录下载查看即可。
notion image
notion image
 
上一篇
How to Make a USB Laptop Keyboard Controller
下一篇
雪怪麦克风的心形模式如何使用

评论
Loading...