你有沒有發生過這種情況:出門在外,打開 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 秒就夠了。
為什麼在 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
- 在 Telegram 搜尋
@BotFather - 輸入
/newbot - 設定 bot 名稱和 username(username 必須以 bot 結尾)
- 複製 BotFather 給你的 Bot Token(格式像
123456:ABCdef...)
取得 Chat ID
- 和剛剛建立的 bot 對話,傳任何一則訊息
- 開啟瀏覽器,前往:
https://api.telegram.org/bot{YOUR_TOKEN}/getUpdates - 在回傳的 JSON 裡找
"chat": {"id": 123456789},那串數字就是你的 Chat ID
在 Uptime Kuma 設定 Telegram 通知
- 點左側選單「Settings」→「Notifications」→「Setup Notification」
- Notification Type 選「Telegram」
- 填入 Bot Token 和 Chat ID
- 點「Test」,如果 Telegram 收到測試訊息就成功
- 存檔
之後每個 Monitor 都可以在設定頁面勾選「Use this notification」,就會在該服務掛掉時發通知。
Email 通知設定
如果你有 Gmail 或其他 SMTP:
- Notification Type 選「SMTP」
- 填入 SMTP 設定(Gmail 用
smtp.gmail.com:587,需要 App Password) - 填入寄件者 / 收件者 Email
Gmail 記得要在帳號安全設定裡開啟「應用程式密碼」,不能直接用帳號密碼。
Line 通知設定
- 前往 Line Notify,登入後建立 Token
- Notification Type 選「LINE Notify」
- 填入 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 裡,更新不影響設定。
🔗 延伸閱讀
- Nginx Proxy Manager 反向代理設定 — 為 Uptime Kuma Status Page 設定 HTTPS 域名
- Tailscale 完整教學 — 安全遠端存取 Uptime Kuma 管理介面
- AdGuard Home 安裝教學 — DNS 服務監控特別重要,掛了影響整個區網
- NAS 必裝 Docker 服務清單 — 確認所有值得監控的服務