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 服务,开机自启、异常自动重启。
我会贴出我的脚本代码,并记录部署过程。
部署过程
识别指定网卡
在编写脚本代码前先查看需要监测哪个网卡,使用以下命令查看网卡。这一步至关重要。

我这台机子上网卡挺多,主要是:
- 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.service
把 Environment=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
使用方法
- 保存脚本:
- 绘制今天的图:
- 绘制指定日期:
- 生成的图会保存在:
直接到
/var/log/netmon/
目录下载查看即可。

- 作者:ThinkXYZ
- 链接:https://thinkxyz.org/article/Network%20status%20monitoring
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。