回到開源作品

Uptime Kuma Cluster

開源延伸

延伸 Uptime Kuma 的部署方式,加入負載平衡、健康檢查、故障切換與 RESTful API。

作品封面

Uptime Kuma Cluster作品介紹素材(非操作截圖)
Uptime Kuma Cluster作品介紹素材(非操作截圖)點擊圖片可查看原尺寸

解決的問題

監控工具本身若只有單一節點,也可能成為可用性的瓶頸:那台機器一停,所有網站的監控跟著中斷,偏偏這時最需要知道服務是否正常。原生 Uptime Kuma 用本機 SQLite 存資料,無法多台同時運作;新增或修改監控也只能透過網頁介面背後的 Socket.IO,沒有一般 HTTP API 可以讓 CI/CD 或其他系統直接串接。

實作方向

  1. 01保留 Uptime Kuma 的監控能力,把資料庫換成共享的 MariaDB,讓多個節點讀寫同一份監控設定。
  2. 02前面放 OpenResty(Nginx + Lua)做負載平衡,定期檢查各節點,節點故障時把它負責的監控移到健康節點,恢復後再還原。
  3. 03補上一組 RESTful API(/api/v1),監控、節點、狀態頁與群組都能用 HTTP 查詢與增刪改,並附 Swagger 文件(細節見下方)。
  4. 04透過 Docker Compose 一次啟動 OpenResty、三個 Uptime Kuma 節點與 MariaDB。

RESTful API 能做什麼

原生 Uptime Kuma 的監控管理只能在網頁上操作,要大量建立監控或接進部署流程很不方便。這個專案在每個節點加上 /api/v1 路由,用一般的 HTTP 請求與 JSON 就能管理整個叢集。

  • 監控:GET /api/v1/monitors 列出全部、GET /api/v1/monitors/{id} 查單一監控,POST 新增、PUT 修改、DELETE 刪除;GET /api/v1/monitors/{id}/heartbeats 取回指定時段的心跳紀錄。
  • 新增監控時自動分配節點:沒有指定 node_id,API 會挑目前線上且監控數最少的節點;也可以指定節點,每個節點上限 1,000 個啟用中的監控,滿了會回錯誤請你換一台。
  • 節點:/api/v1/nodes 可查詢、新增、修改與移除叢集節點,GET /api/v1/nodes/{id}/monitors 查看某個節點正在負責哪些監控。
  • 狀態頁與群組:/api/v1/status-pages 以 slug 管理公開狀態頁,/api/v1/groups 建立與調整監控群組,對外公告與分組都不必回到網頁介面。
  • 叢集維運:/lb 開頭的端點由 OpenResty 提供,可查叢集健康、各節點負載、手動觸發健康檢查或重新分配監控;GET /api/v1/health 給負載平衡器做存活檢查。

認證、限流與文件

  • 認證:請求帶 Authorization: Bearer <JWT>,伺服器會驗證 token 並確認帳號仍為啟用狀態;GET /api/v1/status 與 /api/v1/health 不需登入。
  • 限流:/api/v1 預設每個 IP 每 15 分鐘 100 次請求,超過回 429,可用環境變數 API_RATE_LIMIT 調整;健康檢查端點不受限制。
  • 回應格式統一為 { ok, msg, data },欄位驗證失敗會在 errors 列出原因,方便程式判斷。
  • 文件:/api-docs 提供 Swagger UI 可直接在瀏覽器試打,/api-docs.json 是 OpenAPI 3.0 規格,可拿去產生用戶端程式。
  • 常見用法:部署新服務時由 CI 呼叫 POST /api/v1/monitors 自動加上監控、下線時刪除;或由內部系統定期讀取心跳資料做報表。
eSIM 226

Deal

Stay online when you work abroad

eSIM 226 is a travel eSIM covering 190+ destinations worldwide: buy the plan before you fly, scan the QR code on landing and you are online. No SIM swap, no roaming bill, and your own number stays in the phone to keep receiving bank SMS. Japan 3GB / 15 days starts around US$3.4, so a short trip never costs a full month. Use TRAVEL30 for 30% off sitewide. Cannot be combined with other promo codes.

  • 190+ destinations across Asia, Europe and the Americas
  • Instant QR activation, nothing to ship or queue for
  • Local rates instead of roaming, no bill shock at home

Affiliate link. Buying through it may earn this site a small commission, at no extra cost to you.

See plans