Netgear R7000 Router 实时数据采集器

实时采集 Netgear R7000 路由器运行数据,上传至 InfluxDB,使用 Grafana 可视化展示

项目介绍

实时采集 Netgear R7000 路由器运行数据,上传至 InfluxDB,使用 Grafana 可视化展示

核心特性

  • SSH 持久连接:基于 russh(纯 Rust SSH),建立一次会话后复用,支持自动重连(指数退避 1/2/4/8/16/32/60s)和 KeepAlive 探活
  • 9 个采集器:CPU、内存、负载、温度、网络流量、WiFi 客户端数、连接跟踪、进程、运行时间
  • 单文件分发:配置模板通过 include_str! 内嵌到二进制,首次启动自动生成 config.toml,无需额外文件
  • 配置热加载:修改 config.toml 保存后 30 秒内自动生效,无需重启
  • 断线恢复:InfluxDB 写入失败时自动缓存到本地磁盘,恢复后回放
  • 跨平台:Windows / Linux 原生支持,rustls-tls 替代 OpenSSL 依赖

效果图

架构图

JavaScript
flowchart LR
    Router["Netgear R7000"] -->|"SSH 持久连接"| SSH["SSH Session"]
    SSH --> Collector["Collector × 9"]
    Collector --> Parser["Parser"]
    Parser --> Metric["Metric"]
    Metric --> Channel["Channel"]
    Channel --> Writer["Writer"]
    Writer --> InfluxDB["InfluxDB"]
    InfluxDB --> Grafana["Grafana"]

技术栈

组件技术说明
语言Rust零成本抽象,内存安全
异步运行时Tokio 1.40full feature
SSH 客户端russh 0.50纯 Rust,跨平台,无系统 SSH 依赖
HTTP 客户端reqwest 0.12 + rustls-tls纯 Rust TLS,不依赖系统 OpenSSL
时序数据库InfluxDB 2.7.10数据批量写入 + Gzip 压缩
可视化Grafana 13.xSchema V2,Flux 查询语言
配置TOML编译期内嵌 + 运行时热加载
日志tracing + tracing-subscriber结构化日志,支持文件滚动

采集器

采集器数据源Measurement字段
CPUcat /proc/statcpuusage, user
system, idle
iowait
内存cat /proc/meminfomemorytotal, used
free, available
buffers, cached
swap_total, swap_free
used_percent
负载cat /proc/loadavgloadavgload1, load5, load15
running_processes
total_processes
温度/proc/dmu/temperature

wl phy_tempsense
temperaturecelsius

tag zone:
cpu/wifi_2g/wifi_5g
网络流量cat /proc/net/devnetworkrx_bytes_per_sec
tx_bytes_per_sec
rx_packets_per_sec tx_packets_per_sec

tag interface:
ppp0/vlan1/vlan2/eth0/eth1/eth2/br0
WiFi 客户端数wl -i ethX assoclistwifi_clientscount

tag band: 2.4G/5G
连接跟踪/proc/sys/net/netfilter/nf_conntrack_count

max
conntrackcount
max
usage_percent
进程cat /proc/loadavgprocessrunning, total
时间cat /proc/uptimeuptimeuptime_sec
uptime_days

接口映射

接口用途说明
ppp0WAN 外网(PPPoE 拨号)承载互联网上下行流量
vlan1局域网(LAN 1-4)对应 4 个物理 LAN 端口
vlan2WAN VLAN(通常未使用)在 Asuswrt-Merlin 上
PPPoE不经过它
eth0交换机内部接口CPU 与 BCM53011 交换芯片
之间的内部链路
eth12.4GHz WiFi2.4G 无线 AP 接口
eth25GHz WiFi5G 无线 AP 接口
br0LAN 桥接(含 WiFi)软件桥接:vlan1 + eth1 + eth2

快速开始

1. 下载项目

不提供对应平台的单文件二进制,参考 scripts/build.ps1(Windows)或 scripts/build.sh(Linux)自行构建

Bash
git clone https://git.sg7z.top/sg7z/NetgearR7000-RouterCollector.git

2. 编译项目

首次运行会在同目录自动生成 config.toml 配置模板

Bash
# 下载依赖并编译(快速)
# 文件生成在 target\release\NetgearR7000-RouterCollector.exe
cargo build --release

# Windows Pack(推荐)
scripts\build.ps1

# Linux / WSL Pack(推荐)
chmod +x scripts/build.sh && ./scripts/build.sh

启动项目

建议使用 screen 挂载后台运行

首次启动时会在当前根目录生成 config.toml 文件。不想启动后生成文件,可复制项目的 config/config.example.toml 文件到 dist 目录,并重命名为 config.toml

Bash
# Windows
./dist/NetgearR7000-RouterCollector-Windows-x64.exe

# Linux / WSL
./dist/NetgearR7000-RouterCollector-Linux-x64
Bash
# 创建新会话
# 示例:screen -S Netgear-R7000
screen -S 会话名

# 列出所有会话
screen -ls

# 重新连接会话
# 示例:screen -r 366543
screen -r 会话名或PID

# 分离会话
# 断开你与这个会话的连接
# 但会话和里面运行的程序继续留在后台
# 用 screen -r 会话名或PID 重新连回去
Ctrl+A → D

# 关闭会话
# 先进会话,在会话里输入 exit 即可销毁
screen -r 会话名或PID
exit

编辑配置

保存后程序在 30 秒内自动热加载,或重启立即生效

打开生成或复制的 config.toml,根据注释填入实际参数。重点 router、influxdb 参数需填写,其他内容根据需求自行修改。

TOML
[log]
level = "info"

[router]
host = "192.168.50.1"
port = 22
username = ""
password = ""
# private_key = "~/.ssh/id_rsa"
# known_hosts = "known_hosts"
# strict_host_key_checking = true
keepalive_sec = 15
connect_timeout_sec = 10

[sampling]
cpu = 30
memory = 30
loadavg = 30
temperature = 30
network = 30
wifi = 30
conntrack = 30
process = 30
uptime = 30

[collectors]
cpu = true
memory = true
loadavg = true
temperature = true
wifi = true
network = true
conntrack = true
process = true
uptime = true

[collectors.temperature_detail]
cpu = true
wifi_2g = true
wifi_5g = true

[collectors.wifi_detail]
band_2g = true
band_5g = true

[influxdb]
url = ""
bucket = "NetgearR7000"
organization = "influxdb"
token = ""
batch_size = 5000
batch_interval_sec = 5
timeout_sec = 10
gzip = true
max_retries = 3
buffer_dir = "./buffer"
buffer_capacity = 100000

Grafana

导入 grafana.json 或 grafana.yaml 到 Grafana 13.x,选择 InfluxDB 数据源(Flux 语言),即可查看完整监控面板:

  • CPU 使用率(总览 + 各核心)
  • 内存分配(可用 + 已用)/ 系统缓存(缓冲 + 缓存)
  • 运行负载(Load Average)
  • CPU / WiFi 温度
  • 网络流量(ppp0 / vlan1 / vlan2 / eth0 / eth1 / eth2 / br0,每个接口下载与上传在同一图表)
  • WiFi 客户端数
  • Conntrack 使用率 / 进程数 / Uptime

配置参考

完整配置项见 config/config.example.toml

参数说明
[log]日志级别
[router]SSH 连接参数
[sampling]各采集器采样间隔(秒),默认全部 30s
[collectors]采集器启用/禁用开关(默认全部启用)
[influxdb]InfluxDB v2 连接参数

配置文件查找顺序

程序启动时按以下优先级查找 config.toml:

  1. 环境变量 ROUTER_COLLECTOR_CONFIG 指定的路径(空/空白视为未设置;目录路径自动拼接 config.toml)
  2. 运行目录下的 ./config.toml(生产环境)
  3. 项目内的 ./config/config.toml(开发环境)
  4. 以上都不存在 → 回退到 ./config.toml(启动自动生成模板)
TOML
flowchart TD
    A[程序启动] --> B{./config.toml 存在?}
    B -- 是 --> C[使用 ./config.toml<br/>生产环境配置]
    B -- 否 --> D{./config/config.toml 存在?}
    D -- 是 --> E[使用 ./config/config.toml<br/>开发环境配置]
    D -- 否 --> F[自动生成 ./config.toml<br/>首次启动兜底]

    style C fill:#2ea043,stroke:#2ea043,color:#fff
    style E fill:#1f6feb,stroke:#1f6feb,color:#fff
    style F fill:#d29922,stroke:#d29922,color:#fff
优先级配置文件场景说明
1./config.toml生产环境运行目录下存在即使用,部署时生成
2./config/config.toml开发环境项目内配置,仅开发时使用
3自动生成模板首次启动以上均不存在时,生成默认模板并启动

SSH 连接可靠性

机制说明
初始连接同步建立,3 次重试(1/2/4s 退避),确保 SSH 就绪后再启动采集器
密钥校验默认 TOFU 模式:首次连接自动信任并记录到 known_hosts
可设置 strict_host_key_checking = true 启用严格模式
未知密钥拒绝连接并输出指纹
KeepAlive后台单独 Task 周期执行 echo ok,不干扰采集器
自动重连AtomicBool CAS 选举唯一重连,Notify 广播唤醒所有等待采集器
命令重试SSH 命令失败时触发一次重连并重试
异常检测未收到 ExitStatus 的通道异常关闭返回 Err
触发重连,防止空输出被误认为正常

项目结构

Bash
NetgearR7000-RouterCollector
├── .cargo/
│   └── config.toml             # 静态链接配置
├── config/
│   ├── config.example.toml     # 配置模板(编译时内嵌到二进制)
│   └── config.toml             # 实际配置(开发环境使用)
├── scripts/
│   ├── build.ps1               # Windows 打包脚本
│   └── build.sh                # Linux 打包脚本
├── src/
│   ├── main.rs                 # 程序主入口
│   ├── config/                 # 配置定义与加载
│   ├── ssh/                    # SSH 客户端
│   ├── collector/              # 九个采集器
│   ├── parser/                 # 纯函数解析器
│   ├── metrics/                # 统一指标模型
│   ├── models/                 # 路由器模型
│   ├── scheduler/              # 采集任务调度
│   ├── writer/                 # InfluxDB
│   └── utils/                  # 日志初始化
├── Cargo.toml                  # 项目依赖
├── LICENSE                     # 许可证
└── README.md                   # 项目文档

参考资料

Netgear R7000: Block Diagram / Network Architecture

相关文章

许可证

请查看 LICENSE 文件以获取 MIT 许可信息

下载权限
查看
  • ¥
    免费下载
    评论并刷新后下载
    登录后下载
  • {{attr.name}}:
您当前的等级为
登录后免费下载登录 小黑屋反思中,不准下载! 评论后刷新页面下载评论 支付以后下载 请先登录 您今天的下载次数(次)用完了,请明天再来 支付积分以后下载立即支付 支付以后下载立即支付 您当前的用户组不允许下载升级会员
您已获得下载权限 您可以每天下载资源次,今日剩余次
Rust

Rust Cargo opt-level 有哪些选项?

2026-6-22 11:02:28

Rust

Netgear R7000 Router 实时数据采集器 - 项目打包

2026-8-6 0:10:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索