Ntfy 哪吒监控v1通知配置喂饭级教程

本教程将引导您使用官方 Ntfy 服务 (https://ntfy.sh/)， 为哪吒监控配置通知功能。本教程侧重于提供可直接上手的配置。

Ntfy 是一个简单而强大的推送通知服务，具有以下优点：完全开源且免费使用、支持自托管、无需注册账号即可使用、支持多平台（Android、iOS、Web）、配置简单快捷、支持端到端加密，是服务器监控通知的理想选择。其轻量级的特性和简单的 API 使其特别适合与哪吒监控集成。

相比之下，Server 酱免费版存在以下局限性：

每天仅支持 5 条推送消息，超出需付费，不支持自托管，完全依赖第三方服务。消息通道单一，仅支持微信推送。免费版消息不支持分组管理，无法进行消息撤回等高级操作，服务可用性依赖微信公众号平台。

配置说明

基本信息

名称: Ntfy

URL: https://ntfy.sh/

请求方式: POST

类型: JSON

请求头:

Copy
{
"Content-Type": "application/json"
}

注意: Ntfy 官方服务不需要 Authorization header。

请求体:

Copy
{
"topic": "哪吒监控",
"title": "服务器状态 - #SERVER.NAME#",
"message": "CPU: #SERVER.CPU#% | 内存: #SERVER.MEM# | 硬盘: #SERVER.DISK# | 上行: #SERVER.NETOUTSPEED# | 下行: #SERVER.NETINSPEED# | 负载: #SERVER.LOAD1#/#SERVER.LOAD5#/#SERVER.LOAD15#",
"priority": 3,
"tags": ["warning"]
}

重要: 将 哪吒监控 替换为您想要订阅的主题名称，建议使用随机字符串以保证安全性。

使用步骤

安装 ntfy 应用

通过 Google Play 或 F-Droid 安装 ntfy 应用 (或使用网页版 https://ntfy.sh/)。

打开应用，订阅您在请求体中设置的主题名称 (例如: 哪吒监控)。

请记下您选择的主题，在后续配置中会用到。

在哪吒监控面板中添加通知配置

打开哪吒监控面板。

进入通知配置页面。

点击 "添加通知"。

按照 “配置说明” 部分填写信息。

URL: https://ntfy.sh/

请求方式: 选择 POST

类型: 选择 JSON

请求头: 复制粘贴上面的 JSON 内容。

请求体: 复制粘贴上面的 JSON 内容，请务必修改 topic 为您在 Ntfy 应用中订阅的主题。

验证 TLS: 勾选此项。

测试通知

保存配置后，点击 "测试" 按钮，发送测试通知。

检查您的手机或 Ntfy 应用是否收到通知。

详细解释

URL

使用官方 Ntfy 服务时，URL 固定为 https://ntfy.sh/，不需要在 URL 中添加主题名称。

请求头

对于官方 Ntfy 服务，只需要设置 Content-Type 为 application/json，无需 Authorization。

请求体

topic: 这是您在 Ntfy 应用中订阅的主题，确保此值和您在应用中订阅的名称一致，这是接收通知的关键。

title: 通知的标题，#SERVER.NAME# 会被替换为服务器的名称。

message: 通知的具体内容，包含服务器的 CPU、内存、硬盘、网络速度和负载等信息。

priority: 通知的优先级，3 为中等优先级。

tags: 标签，可以根据需要添加，这里使用 "warning"。

变量说明

#SERVER.NAME# : 服务器名称

#SERVER.CPU# : CPU 使用率

#SERVER.MEM# : 内存使用情况

#SERVER.DISK# : 磁盘使用情况

#SERVER.NETINSPEED# : 网络入站速度

#SERVER.NETOUTSPEED# : 网络出站速度

更多变量信息请参考哪吒监控官方文档。 https://nezha.wiki/guide/notifications.html

注意事项

主题: 确保 Ntfy 应用中订阅的主题名称与请求体中 topic 的值一致。

验证 TLS: 必须勾选 "验证 TLS" 选项以确保通信安全。

测试: 测试通知是否成功发送，是确保配置正确的关键步骤。

常见问题

收不到通知：

检查 Ntfy 应用是否订阅了正确的主题。

检查请求体中的 topic 是否与订阅的主题一致。

确保 "验证 TLS" 选项已勾选。

通知格式错误：

确保请求体的 JSON 格式正确。

Content-Type 是否设置为 application/json。

警报规则配置 (简述)

警报规则的配置方式与之前文档一致，关键在于设置合适的触发条件和通知组。

可以根据您的实际需求，设置 CPU、内存、硬盘、网络和离线等多种监控类型的警报规则。

详细配置步骤请参考哪吒监控官方文档，以及本文档之前的 “警报规则配置” 部分。

进阶说明

自托管 Ntfy 服务器安装

准备工作

确保服务器已安装 Docker 和 Docker Compose

准备好域名并解析到服务器（可选，但推荐）

建议使用 Caddy 或 Nginx 作为反向代理

创建 Docker Compose 配置

创建目录并编写 docker-compose.yml:

Copy
mkdir -p /opt/ntfy
cd /opt/ntfy
vim docker-compose.yml

配置文件内容:

Copy
version: "3.8"

services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
- TZ=Asia/Shanghai
volumes:
- ./data:/var/lib/ntfy
- ./cache:/var/cache/ntfy

ports:
- 8080:80

具体教程看官方文档: https://ntfy.sh/docs/self-hosting/docker

使用 Cloudflare Tunnel 进行内网穿透

如果您的 Ntfy 服务器部署在内网环境，建议使用 Cloudflare Tunnel 进行安全的内网穿透。这样可以：

无需开放任何端口

自动配置 SSL 证书

获得 DDoS 防护

支持访问控制

**Docker Compose 集成 Cloudflare Tunnel **

Copy
version: "3.8"

services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
- TZ=Asia/Shanghai
volumes:
- ./data:/var/lib/ntfy
- ./cache:/var/cache/ntfy
- ./config.yml:/etc/ntfy/config.yml
ports:
- 8080:80

cloudflared:
image: cloudflare/cloudflared
container_name: cloudflared
command: tunnel run
environment:
- TUNNEL_TOKEN=your-tunnel-token
restart: unless-stopped

这样你就只要在 Cloudflare 有域名就能随时访问了

请求头

对于自托管 Ntfy 服务，需要设置 Content-Type 为 application/json，最好设置 Authorization。

Authorization Token 配置

Basic Auth 方式

Copy
{
"Content-Type": "application/json",
"Authorization": "Basic base64(username:password)"
}

实际示例

假设账号密码为：

用户名：monitor

密码：ntfy2024

生成 base64 编码：

Copy
# Linux/Mac
echo -n "monitor:ntfy2024" | base64
# 输出: bW9uaXRvcjpudGZ5MjAyNA==

# Windows PowerShell
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("monitor:ntfy2024"))
# 输出: bW9uaXRvcjpudGZ5MjAyNA==

完整请求头示例

Copy
{
"Content-Type": "application/json",
"Authorization": "Basic bW9uaXRvcjpudGZ5MjAyNA=="
}

注意：

请将 username 和 password 替换为您实际的用户名和密码

Base64 编码不是加密，不要在请求头中使用明文密码

建议使用 HTTPS 确保传输安全

示例配置:

Copy
{
"topic": "哪吒监控",
"title": "警报 - #SERVER.NAME#",
"message": "CPU使用率超过90%: #SERVER.CPU#%",
"priority": 5,
"tags": ["warning", "cpu"]
}

定制消息模板

Copy
{
"topic": "哪吒监控",
"title": "【#SERVER.STATUS#】#SERVER.NAME#",
"message": "时间: #SERVER.DATE#\n状态: #SERVER.STATUS#\n详情: CPU=#SERVER.CPU#% MEM=#SERVER.MEM#\n位置: #SERVER.LOCATION#",
"priority": 3,
"tags": ["status", "#SERVER.STATUS#"],
"click": "https://你哪吒监控的地址"
}

示例配置:

Copy
{
"topic": "哪吒监控",
"title": "警报 - #SERVER.NAME#",
"message": "CPU使用率超过90%: #SERVER.CPU#%",
"priority": 5,
"tags": ["warning", "cpu"]
}

离线告警

Copy
{
"topic": "哪吒监控",
"title": "【离线警报】#SERVER.NAME#",
"message": "⚠️ 服务器已离线\n主机名: #SERVER.HOST#\nIP: #SERVER.IP#\n离线时间: #DATETIME#",
"priority": 5,
"tags": ["alert", "offline"]
}

资源告警

Copy
{
"topic": "哪吒监控",
"title": "【资源告警】#SERVER.NAME#",
"message": "CPU: #SERVER.CPU#% | 内存: #SERVER.MEM#% | 硬盘: #SERVER.DISK#%\n负载: #SERVER.LOAD1#/#SERVER.LOAD5#/#SERVER.LOAD15#",
"priority": 4,
"tags": ["warning", "resource"]
}

流量告警

Copy
{
"topic": "哪吒监控",
"title": "【流量告警】#SERVER.NAME#",
"message": "月度流量超限\n上行: #SERVER.TRANSFEROUT#\n下行: #SERVER.TRANSFERIN#",
"priority": 3,
"tags": ["warning", "traffic"]
}

支持的变量

在通知消息中可以使用以下变量：

变量 | 说明
#NEZHA# | 通知内容
#DATETIME# | 事件发生的时间
#SERVER.NAME# | 服务器名称
#SERVER.IP# | 服务器 IP
#SERVER.IPV4# | IPv4 地址
#SERVER.IPV6# | IPv6 地址
#SERVER.CPU# | CPU 使用率
#SERVER.MEM# | 内存使用率
#SERVER.SWAP# | 交换分区使用率
#SERVER.DISK# | 磁盘使用率
#SERVER.NETINSPEED# | 实时上传速度
#SERVER.NETOUTSPEED# | 实时下载速度
#SERVER.TRANSFERIN# | 总上传流量
#SERVER.TRANSFEROUT# | 总下载流量
#SERVER.LOAD1# | 1 分钟负载
#SERVER.LOAD5# | 5 分钟负载
#SERVER.LOAD15# | 15 分钟负载

通知配置示例

基础配置项

配置项 | 说明 | 示例值
名称 | 通知方式名称 | ntfy-alert
URL | Ntfy 服务器地址 | https://ntfy.sh/
请求方式 | 固定为 POST | POST
请求类型 | 固定为 JSON | JSON
最大重试次数 | 失败重试次数 | 3
通知间隔 (秒) | 两次通知最小间隔 | 300

告警规则配置

离线监控

Copy
[
{
"Type": "offline",
"Duration": 300
}
]

资源监控

Copy
[
{
"Type": "cpu",
"Max": 90,
"Duration": 300
},
{
"Type": "memory",
"Max": 90,
"Duration": 300
}
]

月流量监控

Copy
[
{
"Type": "transfer_out_cycle",
"Max": 1099511627776,
"Cycle_start": "2024-01-01T00:00:00+08:00",
"Cycle_interval": 1,
"Cycle_unit": "month",
"Cover": 1,
"Ignore": {"1": true, "2": true}
}
]

规则说明

Duration: 持续时间 (秒)，在此期间超过 30% 触发阈值才报警

Max/Min:

流量单位：字节 (1KB=1024B)

CPU / 内存 / 硬盘：百分比 (0-100)

Cover:

0: 监控所有服务器

1: 仅监控指定服务器

Ignore: 指定服务器 ID 的监控策略

告警和通知的区别

告警规则

用于定义触发条件（什么情况下需要发送通知）

包含阈值、持续时间等具体判断标准

可以针对不同服务器设置不同规则

支持多种监控类型（CPU、内存、硬盘等）

通知配置

定义如何发送消息（通过什么方式发送通知）

包含消息格式、接收方式等

可以配置多个通知方式

支持自定义消息模板

工作流程

告警触发流程

监控数据 -> 匹配告警规则 -> 触发通知

规则匹配逻辑

检查监控指标

判断是否超过阈值

确认持续时间

验证是否需要忽略

通知发送流程

生成通知内容

应用消息模板

通过配置的通知方式发送

最佳实践

告警规则设置

根据服务器性能设置合理阈值

避免过于频繁的告警

合理设置持续时间避免误报

针对重要服务器设置更严格的规则

通知配置建议

设置合适的通知间隔

根据告警级别使用不同优先级

自定义清晰的消息格式

配置重试机制处理发送失败

监控维护

定期检查规则有效性

及时调整不合理的阈值

分析告警历史优化配置

确保通知方式可用性