banner
荔福路绅士

NCIEX

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

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

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

相比之下,Server 酱免费版存在以下局限性:

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

配置说明#

基本信息#

  • 名称: Ntfy

  • URL: https://ntfy.sh/

  • 请求方式: POST

  • 类型: JSON

  • 请求头:

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

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

  • 请求体:

    {
      "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"]
    }
    

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

使用步骤#

  1. 安装 ntfy 应用

    • 通过 Google Play 或 F-Droid 安装 ntfy 应用 (或使用网页版 https://ntfy.sh/)。
    • 打开应用,订阅您在请求体中设置的主题名称 (例如: 哪吒监控)。
    • 请记下您选择的主题,在后续配置中会用到。
  2. 在哪吒监控面板中添加通知配置

    • 打开哪吒监控面板。
    • 进入通知配置页面。
    • 点击 "添加通知"。
    • 按照 “配置说明” 部分填写信息。
      • URL: https://ntfy.sh/
      • 请求方式: 选择 POST
      • 类型: 选择 JSON
      • 请求头: 复制粘贴上面的 JSON 内容。
      • 请求体: 复制粘贴上面的 JSON 内容,请务必修改 topic 为您在 Ntfy 应用中订阅的主题。
      • 验证 TLS: 勾选此项。
  3. 测试通知

    • 保存配置后,点击 "测试" 按钮,发送测试通知。
    • 检查您的手机或 Ntfy 应用是否收到通知。

详细解释#

URL#

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

请求头#

  • 对于官方 Ntfy 服务,只需要设置 Content-Typeapplication/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" 选项以确保通信安全。
  • 测试: 测试通知是否成功发送,是确保配置正确的关键步骤。

常见问题#

  1. 收不到通知:

    • 检查 Ntfy 应用是否订阅了正确的主题。
    • 检查请求体中的 topic 是否与订阅的主题一致。
    • 确保 "验证 TLS" 选项已勾选。
  2. 通知格式错误:

    • 确保请求体的 JSON 格式正确。
    • Content-Type 是否设置为 application/json

警报规则配置 (简述)#

  • 警报规则的配置方式与之前文档一致,关键在于设置合适的触发条件和通知组。
  • 可以根据您的实际需求,设置 CPU、内存、硬盘、网络和离线等多种监控类型的警报规则。
  • 详细配置步骤请参考哪吒监控官方文档,以及本文档之前的 “警报规则配置” 部分。

进阶说明#

自托管 Ntfy 服务器安装#

  1. 准备工作

    • 确保服务器已安装 Docker 和 Docker Compose
    • 准备好域名并解析到服务器(可选,但推荐)
    • 建议使用 Caddy 或 Nginx 作为反向代理
  2. 创建 Docker Compose 配置

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

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

配置文件内容:

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 防护
  • 支持访问控制
  1. **Docker Compose 集成 Cloudflare Tunnel **
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-Typeapplication/json,最好设置 Authorization

Authorization Token 配置#

  1. Basic Auth 方式
{
  "Content-Type": "application/json",
  "Authorization": "Basic base64(username:password)"
}
  1. 实际示例

假设账号密码为:

  • 用户名:monitor
  • 密码:ntfy2024

生成 base64 编码:

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

# Windows PowerShell
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("monitor:ntfy2024"))
# 输出: bW9uaXRvcjpudGZ5MjAyNA==
  1. 完整请求头示例
{
  "Content-Type": "application/json",
  "Authorization": "Basic bW9uaXRvcjpudGZ5MjAyNA=="
}

注意:

  • 请将 username 和 password 替换为您实际的用户名和密码
  • Base64 编码不是加密,不要在请求头中使用明文密码
  • 建议使用 HTTPS 确保传输安全

示例配置:

{
  "topic": "哪吒监控",
  "title": "警报 - #SERVER.NAME#",
  "message": "CPU使用率超过90%: #SERVER.CPU#%",
  "priority": 5,
  "tags": ["warning", "cpu"]
}
  1. 定制消息模板
{
  "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://你哪吒监控的地址"
}

示例配置:

{
  "topic": "哪吒监控",
  "title": "警报 - #SERVER.NAME#",
  "message": "CPU使用率超过90%: #SERVER.CPU#%",
  "priority": 5,
  "tags": ["warning", "cpu"]
}
  1. 离线告警
{
  "topic": "哪吒监控",
  "title": "【离线警报】#SERVER.NAME#",
  "message": "⚠️ 服务器已离线\n主机名: #SERVER.HOST#\nIP: #SERVER.IP#\n离线时间: #DATETIME#",
  "priority": 5,
  "tags": ["alert", "offline"]
}
  1. 资源告警
{
  "topic": "哪吒监控",
  "title": "【资源告警】#SERVER.NAME#",
  "message": "CPU: #SERVER.CPU#% | 内存: #SERVER.MEM#% | 硬盘: #SERVER.DISK#%\n负载: #SERVER.LOAD1#/#SERVER.LOAD5#/#SERVER.LOAD15#",
  "priority": 4,
  "tags": ["warning", "resource"]
}
  1. 流量告警
{
  "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
URLNtfy 服务器地址https://ntfy.sh/
请求方式固定为 POSTPOST
请求类型固定为 JSONJSON
最大重试次数失败重试次数3
通知间隔 (秒)两次通知最小间隔300

告警规则配置#

  1. 离线监控
[
  {
    "Type": "offline",
    "Duration": 300
  }
]
  1. 资源监控
[
  {
    "Type": "cpu",
    "Max": 90,
    "Duration": 300
  },
  {
    "Type": "memory",
    "Max": 90,
    "Duration": 300
  }
]
  1. 月流量监控
[
  {
    "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 的监控策略

告警和通知的区别#

  1. 告警规则
  • 用于定义触发条件(什么情况下需要发送通知)
  • 包含阈值、持续时间等具体判断标准
  • 可以针对不同服务器设置不同规则
  • 支持多种监控类型(CPU、内存、硬盘等)
  1. 通知配置
  • 定义如何发送消息(通过什么方式发送通知)
  • 包含消息格式、接收方式等
  • 可以配置多个通知方式
  • 支持自定义消息模板

工作流程#

  1. 告警触发流程
  • 监控数据 -> 匹配告警规则 -> 触发通知
  1. 规则匹配逻辑
  • 检查监控指标
  • 判断是否超过阈值
  • 确认持续时间
  • 验证是否需要忽略
  1. 通知发送流程
  • 生成通知内容
  • 应用消息模板
  • 通过配置的通知方式发送

最佳实践#

  1. 告警规则设置
  • 根据服务器性能设置合理阈值
  • 避免过于频繁的告警
  • 合理设置持续时间避免误报
  • 针对重要服务器设置更严格的规则
  1. 通知配置建议
  • 设置合适的通知间隔
  • 根据告警级别使用不同优先级
  • 自定义清晰的消息格式
  • 配置重试机制处理发送失败
  1. 监控维护
  • 定期检查规则有效性
  • 及时调整不合理的阈值
  • 分析告警历史优化配置
  • 确保通知方式可用性
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。