Synology NAS 安裝 Uptime Kuma:自架服務監控,掛了立刻通知你

在 Synology NAS 上用 Docker 安裝 Uptime Kuma,監控所有自架服務健康狀態,支援 HTTP、TCP、Ping,異常時透過 Telegram 或 Email 即時通知,再也不怕服務掛了渾然不知。

你有沒有發生過這種情況:出門在外,打開 Vaultwarden 要查密碼,結果發現服務掛了,完全不知道什麼時候開始的。回家重啟之後,發現已經掛了兩個小時。

這就是為什麼需要服務監控工具。Uptime Kuma 是目前 self-hosted 社群最受歡迎的監控方案,介面清爽、設定簡單,支援 HTTP、TCP、Ping、DNS 等多種探測方式,最重要的是通知管道非常完整——Telegram、Email、Line、Discord,甚至 Webhook 都支援。

這篇文章帶你在 Synology NAS 上用 Docker 安裝 Uptime Kuma,設定監控項目和 Telegram 通知,讓你所有自架服務掛掉時都能第一時間知道。

Uptime Kuma 能做什麼

先快速說明它的監控能力:

  • HTTP/HTTPS:探測指定 URL,確認回應碼是 200(或你指定的 code),也可以檢查回應內容是否包含特定字串
  • TCP Port:確認指定 port 有在監聽,適合監控資料庫或 SSH 服務
  • Ping:基本的 ICMP ping,確認主機可達
  • DNS:確認 DNS 解析結果正確,適合監控 AdGuard Home 等 DNS 服務
  • Docker Container:直接監控容器的運作狀態(需掛載 docker.sock)

探測間隔最短可設 20 秒,一般設 60 秒就夠了。

Uptime Kuma 監控架構

為什麼在 NAS 上自架監控?

有人會問:如果 NAS 本機掛了,跑在 NAS 上的 Uptime Kuma 也一起掛,還怎麼通知?

這是合理的問題。嚴格說,Uptime Kuma 無法監控它自己所在機器的整機故障。但實際上,絕大多數的「服務掛了」情況不是整台 NAS 死機,而是:

  • 某個 Docker 容器崩潰(Jellyfin 記憶體吃爆、Immich 處理出錯)
  • 設定錯誤導致某個服務無法啟動
  • 磁碟空間不足導致服務停止寫入

這些場景 Uptime Kuma 都抓得到,而且它本身也是一個 Docker 容器,只要配上 restart: always,即使 NAS 重開機也會自動恢復。對家用 NAS 環境來說,這樣的覆蓋率已經非常夠用。

如果你想進一步,可以同時在另一台機器(例如 Raspberry Pi)或雲端(Fly.io 免費方案)也裝一個 Uptime Kuma 互相監控,但一般家用不需要做到這個程度。

安裝 Uptime Kuma

建立資料目錄

mkdir -p /volume1/docker/uptime-kuma/data

docker-compose.yml

# /volume1/docker/uptime-kuma/docker-compose.yml
version: "3.8"

services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - /volume1/docker/uptime-kuma/data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock  # 選填,用於監控 Docker 容器狀態

透過 Container Manager 或 Portainer 建立這個 Stack,容器啟動後等 15 秒。

首次設定

開啟瀏覽器進入 http://NAS-IP:3001,第一次會要求建立管理員帳號。設定好之後就進入主控台,左側是 Monitor 清單,右上角可以建立新的監控項目。

設定監控項目

HTTP / HTTPS 監控(最常用)

點右上角「+ Add New Monitor」:

欄位 說明
Monitor Type HTTP(s)
Friendly Name 服務名稱(例如:Vaultwarden)
URL 服務的完整 URL
Heartbeat Interval 60 秒(建議值)
Retries 3(失敗 3 次才算真的掛)
Accepted Status Codes 200-299

實際填入的 URL 建議用區域網路 IP 而不是域名,原因是:如果 Nginx Proxy Manager 掛了,域名就解析不到,但服務本身可能還活著。用內網 IP + port 直接探測,才能精確區分「服務本身」和「反向代理」哪個出問題。

例如監控 Vaultwarden: - 用域名:https://vault.yourdomain.com → NPM 掛就無法探測 - 用內網:http://192.168.1.100:8080 → 直接測 Vaultwarden 容器

所以建議兩個都設,一個測域名(確認 NPM + SSL 正常),一個測內網(確認服務本身正常)。

TCP Port 監控

適合監控資料庫或不提供 HTTP 的服務:

  • Monitor Type:TCP Port
  • Hostname:192.168.1.100
  • Port:5432(PostgreSQL 範例)

Ping 監控

適合監控路由器或 NAS 本身:

  • Monitor Type:Ping
  • Hostname:192.168.1.1(路由器 IP)

Docker Container 監控

如果掛載了 docker.sock,可以選「Docker Container」類型,直接選容器名稱,無論容器是否有對外 port 都能監控其運作狀態。

通知設定:Telegram Bot(最推薦)

Telegram 是最方便的通知管道,不需要設定 SMTP,只要有 Telegram 帳號就可以用。

建立 Telegram Bot

  1. 在 Telegram 搜尋 @BotFather
  2. 輸入 /newbot
  3. 設定 bot 名稱和 username(username 必須以 bot 結尾)
  4. 複製 BotFather 給你的 Bot Token(格式像 123456:ABCdef...

取得 Chat ID

  1. 和剛剛建立的 bot 對話,傳任何一則訊息
  2. 開啟瀏覽器,前往:https://api.telegram.org/bot{YOUR_TOKEN}/getUpdates
  3. 在回傳的 JSON 裡找 "chat": {"id": 123456789},那串數字就是你的 Chat ID

在 Uptime Kuma 設定 Telegram 通知

  1. 點左側選單「Settings」→「Notifications」→「Setup Notification」
  2. Notification Type 選「Telegram」
  3. 填入 Bot Token 和 Chat ID
  4. 點「Test」,如果 Telegram 收到測試訊息就成功
  5. 存檔

之後每個 Monitor 都可以在設定頁面勾選「Use this notification」,就會在該服務掛掉時發通知。

Email 通知設定

如果你有 Gmail 或其他 SMTP:

  1. Notification Type 選「SMTP」
  2. 填入 SMTP 設定(Gmail 用 smtp.gmail.com:587,需要 App Password)
  3. 填入寄件者 / 收件者 Email

Gmail 記得要在帳號安全設定裡開啟「應用程式密碼」,不能直接用帳號密碼。

Line 通知設定

  1. 前往 Line Notify,登入後建立 Token
  2. Notification Type 選「LINE Notify」
  3. 填入 Token

建議監控的服務清單

根據重要性排序,以下是家用 NAS 最值得監控的服務:

優先 服務 探測類型 說明
Nginx Proxy Manager HTTP 所有服務的入口,掛了影響最大
Vaultwarden HTTPS 密碼管理器,掛了很麻煩
NAS DSM Ping / HTTP 確認 NAS 本身可達
Immich HTTP 相片備份服務
Jellyfin / Plex HTTP 媒體伺服器
AdGuard Home DNS / HTTP DNS 掛了整個區網可能斷網
Nextcloud HTTP 個人雲端
Home Assistant HTTP 智慧家居

如果你有裝 AdGuard Home,強烈建議優先監控它——DNS 服務一掛,整個區域網路所有裝置可能都失去 DNS 解析,問題影響範圍非常大。

Status Page:對外公開的狀態頁

Uptime Kuma 可以建立一個公開的 Status Page,像 Atlassian Statuspage 那樣對外展示服務狀態。

設定步驟: 1. 左側選單「Status Pages」→「New Status Page」 2. 設定頁面名稱和 slug(URL 路徑) 3. 選擇要顯示在 Status Page 的 Monitor 4. 儲存後,該頁面的 URL 是 http://NAS-IP:3001/status/your-slug

如果你用 Nginx Proxy Manager 做了反向代理,可以把這個頁面對外公開,讓使用你服務的人自己查看狀態。Status Page 會顯示每個服務的可用率百分比和歷史紀錄圖表。

用 Nginx Proxy Manager 做反向代理

雖然 Uptime Kuma 自己的 Status Page 適合對外公開,但管理介面本身(3001 port)建議只在內網存取。

如果你需要在外出時存取 Uptime Kuma 管理介面,最安全的方式是透過 Tailscale VPN 連回內網,不需要對外開 port。

如果你要用 HTTPS 域名存取管理介面,可以在 Nginx Proxy Manager 新增一條 Proxy Host: - Domain Name:monitor.yourdomain.com - Forward Hostname / IP:NAS 的內網 IP 或 container 名稱 - Forward Port:3001 - 記得加上 SSL 憑證

設定完成後,管理介面也會透過 HTTPS 加密傳輸。

常見問題

Q:Uptime Kuma 會佔多少系統資源? 非常輕量。RAM 大約 50–100 MB,CPU 幾乎可以忽略。長期跑完全沒有問題。

Q:監控資料(歷史紀錄)存在哪裡? 存在 /app/data 目錄,也就是你掛載的 /volume1/docker/uptime-kuma/data/。這個目錄包含 SQLite 資料庫,記得納入備份。

Q:可以設定「掛了 N 分鐘才通知」嗎? 可以。每個 Monitor 的設定裡有「Retries」(重試次數)和「Heartbeat Interval」(探測間隔),例如設 Retries=3、Interval=60 秒,就代表連續探測失敗 3 次(3 分鐘)才送通知,避免暫時性網路波動觸發誤報。

Q:更新 Uptime Kuma 版本? 在 Portainer 或 Container Manager 裡 pull 最新的 louislam/uptime-kuma:latest 映像,然後重啟容器。資料在 volume 裡,更新不影響設定。

🔗 延伸閱讀

這篇有幫助嗎? Synology NAS 安裝 Uptime Kuma:自架服務監控,掛了立刻通知你