欢迎光临
我们一直在努力

ntfy:用一条 curl 把服务器告警推到手机上

ntfy:用一条 curl 把服务器告警推到手机上

【免费下载链接】ntfy Send push notifications to your phone or desktop using PUT/POST 【免费下载链接】ntfy 项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy

凌晨两点,部署脚本挂了,你人却在床上。爬起来连电脑、翻日志,才知道是环境变量没带上——这一套动作你大概不想再来第二次。而 ntfy 推送通知服务干的就是这件事:一个 HTTP POST 把消息实时推到你的手机,不用装任何中间件。

ntfy 推送通知的核心机制

  • Topic 就是频道名,也是密码。 没有注册环节,谁知道名字谁就能读写,所以名字要不可猜测(只允许 [-_A-Za-z0-9],最长 64 字符)。
  • 主题即建即用。 首次发布或订阅时主题自动创建,不需要任何初始化步骤。
  • 消息在 body,属性在 header。 标题用 Title、优先级用 Priority、表情标签用 Tags,全是一个 HTTP 请求头的事(见 docs/publish.md)。
  • 五级优先级。 从 min 到 urgent,高优先级在手机上横幅弹出、长振动,低优先级静默进通知栏。
  • 限流是内置的。 服务端按 IP 做请求和消息频控,你不需要自己搭防刷。

最小可用路径:一条命令跑通闭环

手机上装好 ntfy App,随便订阅一个主题,比如 deploy-alerts:

# 发一条消息到你的主题
curl -d "部署完成:v1.4.2 已上线" ntfy.sh/deploy-alerts

锁屏滑一下,横幅弹出来了。到这里,最小闭环已经跑通了。

想用自己的服务器?拉个镜像、一条命令起服务,然后把地址换成你的域名:

docker run –name ntfy -d -p 8080:8080 binwiederhier/ntfy

curl -d "self-hosted hello" localhost:8080/hello

浏览器打开 http://localhost:8080 自带 Web 界面,消息流直接可见,调试起来比看日志直观。

ntfy 推送通知 curl 发送界面示例

把 ntfy 接进日常工作流

备份与磁盘告警

定时任务成功失败都该有交代。官方示例里这个模式很经典:rsync 链式执行,成功发低优先级,失败发带警告标签的高优先级:

rsync -a root@laptop /backups/laptop \\
&& curl -H "Priority: low" -d "Laptop backup succeeded" ntfy.sh/backups \\
|| curl -H "Priority: high" -H "Tags: warning" -d "Laptop backup failed" ntfy.sh/backups

要点就三个:成功失败进同一主题、靠 Tags 和 Priority 区分轻重、脚本输出可以直接塞进 -d 的消息体里方便排错。仓库里的 examples/ssh-login-alert/ 还给了 SSH 登录告警的现成脚本,思路一样。

CI/CD 构建状态同步

告警之外,流水线状态值得同步。在 workflow 尾部 POST 一下,注意用 Basic Auth 把主题保护起来:

– name: Notify ntfy
run: |
curl -u "${{ secrets.NTFY_AUTH }}" \\
-H "Tags: ${{ job.status == 'success' && 'heavy_check_mark' || 'warning' }}" \\
-d "Repo: ${{ github.repository }} | Commit: ${{ github.sha }}" \\
"${{ secrets.NTFY_URL }}"

NTFY_AUTH 存 用户名:密码 的 Basic Auth 串,放 secret 里;Tags 里那个三元表达式让成功失败自动换标签。批量 Ansible 场景也有现成写法,一个 uri 任务通知整批主机。

从告警到运营看板

告警通了之后,下一步是让整台服务器的消息流量可见。仓库里就带了一份 Grafana 面板:examples/grafana-dashboard/ntfy-grafana.json,导入后就能看到各主题的发布量。

ntfy 消息推送的 Grafana 监控面板

生产环境考量

  • 认证与权限:Basic Auth(-u user:pass)或访问令牌(Authorization: Bearer tk_xxx)按主题设读写规则。自建必须上 HTTPS,Basic 只是 base64 编码,不是加密。
  • 重试与降级:网络抖动时脚本里做指数退避重试;如果 ntfy 服务本身挂了,失败分支至少写本地日志,别让通知通道成为单点。
  • 频率与容量:免费版按 IP 限流(约每分钟 60 次请求量级,具体档位以官方文档为准);自建可调 max-client-request 等参数,配置项全集见 docs/config.md。

常见误区与排障

  • curl 成功了,手机没响 → 大概率是主题名和 App 里订阅的差一个字符,URL 路径必须逐字一致;开 Web 界面发条测试消息最快确认。
  • 订阅后看不到老消息 → ntfy 默认不存订阅前的历史;自建实例开启消息缓存,或订阅时带 ?since=now 只取实时消息。
  • 偶尔收到 429 → 命中 IP 限流;低频告警把消息合并成一条批量发,比加大限流上限更稳妥。
  • 手机总显示 "Reconnecting…" → 自建走反向代理的话,确认 ntfy 配置里 behind-proxy 已开启、代理侧放行了 WebSocket(见 docs/troubleshooting.md)。

ntfy Web 界面订阅与消息流

延伸与收束

想接监控,Grafana 面板和 Uptime Kuma、Watchtower 都有现成集成;想让消息驱动动作,ntfy subscribe 可以拉消息流直接喂给脚本。下次凌晨两点,手机会先醒。

【免费下载链接】ntfy Send push notifications to your phone or desktop using PUT/POST 【免费下载链接】ntfy 项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

赞(0)
未经允许不得转载:171主机测评 » ntfy:用一条 curl 把服务器告警推到手机上
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址