路由器状态监控
给路由器加了散热风扇,效果到底怎么样?用手摸只能叫“感觉”,用数据说话才叫“硬核”。
为了验证中兴 AX3000Pro+ 加装风扇后的散热效果,同时精准掌握这台网络中枢的各项身体机能,我决定为它量身打造一套企业级监控大屏。从底层的 Linux /proc 文件系统抓取数据,到 InfluxDB 存储,再到 Grafana 炫酷展示,本文记录了完整的折腾过程。
最终结果极度舒适:加装风扇后,芯片温度从 62℃ 瞬间断崖式跌至 43℃,并稳如老狗。
整体架构思路
中兴 AX3000Pro+ 本质上是一台运行定制 Linux 的双核小电脑。虽然官方没有提供完善的 SNMP 或 API 监控接口,但我们可以通过 Telnet 登录底层,直接读取 /proc 目录下的系统状态文件。
数据流向:
- **Python 脚本 (Telnet)**:每 10 秒登录一次路由器,疯狂读取系统底层文件,解析出温度、CPU、内存、负载、网速等数据。
- **InfluxDB (时序数据库)**:接收并高效存储 Python 传过来的实时时序数据。
- **Grafana (数据可视化)**:读取数据库,将枯燥的数字转换为仪表盘、折线图和状态栏。
编写数据抓取脚本
在局域网内的一台 Ubuntu 22.04 服务器上,编写 Python 脚本。脚本的核心在于模拟 Telnet 交互,并使用正则表达式精准清洗提取数据。
踩坑提示: 读取
/proc/uptime和/proc/loadavg等文件时,Telnet 往往会把命令本身(如cat)也一并返回,因此必须使用精确的正则跳过第一行,否则会导致类型转换报错。
新建文件 router_monitor.py:
1 | import asyncio |
使用 Systemd 守护进程托管服务
为了让脚本实现开机自启、崩溃重启,并能优雅地管理日志,使用 Ubuntu 的 systemd 进行托管是最佳方案。
新建服务配置文件:
1 | sudo nano /etc/systemd/system/router_monitor.service |
填入以下配置:
1 | [Unit] |
1 | sudo systemctl daemon-reload |
查看运行日志:journalctl -u router_monitor -f。
Grafana 排版与数据可视化
docker-compose.yaml
1 | services: |
数据入库后,来到 Grafana 创建仪表板 (Dashboard),并添加面板 (Panel)。效果图:
可以看到降加上风扇后,降温效果很不错:
配置通知
去 Telegram 雇佣一个“跑腿机器人”
我们需要在 TG 上创建一个专属的 Bot,并拿到它的“通行证”(Token)和你的“门牌号”(Chat ID)。
- 申请机器人 (拿 Token):
- 打开 Telegram,在搜索框搜
@BotFather(认准带官方蓝V认证的那个爹)。 - 点击
Start,然后发送/newbot。 - 给机器人起个名字(比如:
AX3000Pro 监控警报)。 - 再给它起个唯一的用户名(必须以
bot结尾,比如xxx_router_bot)。 - 创建成功后,BotFather 会发给你一长串字符,这就是 Bot Token(格式大概是
123456789:ABCdefGhIJKlmNoPQRsTuvWxyz)。先把它复制保存下来!
- 打开 Telegram,在搜索框搜
- 获取你的门牌号 (拿 Chat ID):
- 机器人有了,它还得知道把消息发给谁。在 TG 搜索里搜
@userinfobot,点Start。 - 它会瞬间回复你一串数字(比如
Id: 123456789)。这就是个人 Chat ID。复制下来!
- 机器人有了,它还得知道把消息发给谁。在 TG 搜索里搜
- 激活你的机器人:
- 在 TG 搜索你刚才创建的机器人名字(
mkr_router_bot),点进去,按下Start。你不点 Start,它是发不了消息给你的。
- 在 TG 搜索你刚才创建的机器人名字(
让 Grafana 认识你的机器人
进入报警中心:
在 Grafana 左侧的汉堡菜单(导航栏)里,找到一个小喇叭图标 **Alerting (告警)**,点击展开,选择 **Contact points (联系点)**。
添加 Telegram:
- 点击右上角的 **+ Add contact point (添加联系点)**。
- **Name (名称)**:随便填,比如
TG报警发给我。 - **Integration (集成类型)**:在下拉菜单里找到并选择 Telegram。
填入绝密信息:
- BOT API Token:填入你刚才从 BotFather 那里复制的一长串字符。
- Chat ID:填入你从 userinfobot 那里拿到的一串数字。
见证奇迹的时刻 (测试):
- 点击右上角的 Test (测试) 按钮。
- 此时,手机 Telegram 应该会“叮”地一声,收到一条来自你机器人的测试消息:“Test notification from Grafana”。
- 收到的话,直接点击最下方的 **Save contact point (保存)**。
温度报警器
设定:只要温度超过 55℃ 持续 3 分钟,立刻报警!
新建报警规则:
- 在 Grafana 左侧菜单栏的 Alerting 下,点击 **Alert rules (告警规则)**。
- 点击右上角的 **+ New alert rule (新建告警规则)**。
配置报警条件 (照抄温度表):
- **Define query and condition (定义查询)**:
SELECT选field(temperature)- 下面有个模块叫
B和C(这是 Grafana 的数学计算模块)。 - 在
C模块里,把阈值逻辑改成:**IS ABOVE 55**(当数值大于 55 时触发)。
- **Condition (条件)**:确保选中的是最后的那个阈值判断
C。
- **Define query and condition (定义查询)**:
设置触发时间 (防误报):
- 往下滚,找到 **Evaluate behavior (评估行为)**。
- 设定为:Evaluate every
1mfor3m。(意思是:每 1 分钟检查一次,如果连续 3 分钟温度都大于 55℃,才真正拉响警报。这能完美防止温度偶然跳变导致的“假报警”)。
发给机器人:
- 在最后面的 Notifications (通知) 模块,选择刚才创建的 Contact point(
TG报警发给我)。 - **Message (消息)**:“⚠️ 警告!中兴 AX3000Pro 核心温度已突破 55℃,风扇可能停转,请立即检查!”
- 在最后面的 Notifications (通知) 模块,选择刚才创建的 Contact point(
保存生效!
点击右上角的 Save and exit。

