前言
在上一篇文章中,我通过 FRP 成功打通了内网穿透,让家里的 N3010 小主机实现了公网访问。但随之而来有一个新焦虑:如果不回家,我怎么知道它是不是还活着?
万一停电了、断网了,或者 FRP 服务挂了,我不想等到要用的时候才发现连不上。所以,今天的折腾目标是:利用哪吒监控(Nezha Monitoring),配合 iOS 端的 Bark 推送,实现服务器掉线/恢复的秒级通知。
👀 实时监控演示:https://nz.pyzcloud.dpdns.org/
(这是我搭建好的哪吒面板,可以直观看到家中服务器的运行状态)
https://nz.6786666.xyz/
于2026-1.21购入.xyz域名
1. 架构思路
这次的监控方案非常轻量:
- 服务端(Dashboard):部署在我的阿里云 VPS 上,负责接收数据和发送报警。
- 客户端(Agent):家里的 N3010 小主机,安装 Nezha Agent,向面板汇报心跳。
- 通知端:我的 iPhone,安装 Bark App 接收推送。
2. 踩坑经历:Bark 的 GET vs POST
起初我尝试用最简单的 HTTP GET 方式配置 Bark,直接把报警内容拼接到 URL 后面。但这种方式有个缺点:没法自定义标题和图标,推送到手机上只有干巴巴的一行字,不够优雅,而且如果报警内容里有特殊字符,还容易导致请求失败。
为了实现更高级的通知效果(比如加上“☁️”云朵图标,区分标题和正文),我转向了 POST + JSON 的配置方式。经过反复排查和测试,终于摸索出了正确的配置姿势。
3. 正确配置 Bark 通知(抄作业区)
在哪吒面板后台,进入 设置 -> 报警通知 -> 添加通知方式。请严格按照以下配置填写,否则容易报“意外错误”。
- 名称:
Bark URL:
https://api.day.app/你的Key- 注意:这里不要带任何参数,只填到 Key 为止。
- 请求方式:
POST - 类型:
JSON - 请求头:(保持空白,不要填)
🔴 最关键的请求体 (Body) 配置:
这里我利用了哪吒的变量 #NEZHA#,并自定义了 Apple 风格的云朵图标和标题格式:
{
"title": "☁️Mybox状态通知",
"body": "节点: #SERVER.NAME#\nIP: #SERVER.IP#\n消息: #NEZHA#\nCPU: #SERVER.CPU# | 内存: #SERVER.MEM#",
"icon": "[https://em-content.zobj.net/source/apple/391/cloud_2601-fe0f.png](https://em-content.zobj.net/source/apple/391/cloud_2601-fe0f.png)",
"group": "Nezha"
}
配置解析:
#NEZHA#:会自动替换为“离线”或“恢复”的具体信息。#SERVER.NAME#等:会自动显示服务器的具体参数。icon:使用了在线的 PNG 图片,这样通知栏左侧会显示一个漂亮的云朵,而不是默认的红色铃铛。
4. 设置报警规则
配置好通知方式后,还需要告诉哪吒“什么时候报警”。
进入 报警 -> 添加报警规则:
- 名称:
Mybox掉线监控 - 规则:
- 类型:
offline(离线) - duration:
30(表示断连 30 秒后触发,避免网络抖动误报) - 通知组:点击下拉框,勾选刚才创建的
Bark。 - 启用:✅ 记得打钩。
5. 拔线测试!
配置完成后,激动人心的时刻到了。我在 FinalShell 里通过命令手动停止了小主机的 Agent 服务,模拟死机情况:
sudo systemctl stop nezha-agent
大概过了 35 秒左右,手机“叮”的一声,收到了带有云朵图标的推送:
☁️Mybox状态通知
节点: Mybox
消息: [Mybox] 发生服务离线警告...
紧接着,我又重新启动了服务:
sudo systemctl start nezha-agent
不到一分钟,又收到了一条恢复通知,标题依然整齐划一,但内容变成了“报警恢复通知”。
总结
至此,我的 N3010 小主机终于有了完善的监控系统。
无论是 FRP 进程挂了导致 Agent 连不上,还是家里宽带彻底断网,我都能第一时间通过 Bark 收到消息。看着面板上那个绿色的在线状态,强迫症终于被治愈了。
本文同步更新于我的博客,欢迎访问演示地址查看我的小主机状态。