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. 監控維護
  • 定期檢查規則有效性
  • 及時調整不合理的閾值
  • 分析告警歷史優化配置
  • 確保通知方式可用性
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。