
Uptime Kuma 本來就很好用,但如果你要監控超過 1000 個以上的 API,單機版其實會開始卡卡的。這篇我想用 Vibe Coding 的方式,帶大家一步步把 Uptime Kuma 升級成支援 分片 (Sharding) 跟 Cluster 的版本,還會加上 API 讓它更方便自動化。
先講需求。 Uptime Kuma 是開源監控軟體,之前我已經分享過怎麼改成用 MariaDB 當後端。 但是當監控超過 1000 個 API 之後,效能就會掉很快。實際測試下來,數量一多就卡到不行。
這對需要提供 SLA 的服務超危險,因為只要監控斷掉或不準,就可能直接違約賠錢。
所以如果規模要衝到 4000 個 API,單機肯定不夠了,這時候就要往 Cluster 架構 走,確保:
用 Vibe Coding 的精神,把需求拆細,然後一段一段做:
不同的監控器要分散到不同節點去跑:
用 Nginx / OpenResty 做節點健康檢查:
offline節點掛了,監控任務要自動轉移:
在 DB 加上 default_node_id 跟 assign_node 欄位
掛掉時 → 平均分配監控器到其他節點
新邏輯:
assign_node 的監控器assign_node 就不用管 default_node_id節點恢復之後要能自動回來:
onlineUptime Kuma 其實內建不少邏輯,只是沒開放 API,都是透過Web socket 去調用,既然知道這些,我們可以請AI把 Service 暴露成 API,讓自動化更方便。
系統架構圖
┌─────────────────┐
│ OpenResty │
│ (Nginx+Lua) │
│ 智能負載平衡 │
└─────────┬───────┘
│
┌──────────────────┼────────────────────┐
│ │ │
┌───────────▼─────────┐ ┌─────▼────────────┐ ┌─────▼────────────┐
│ Uptime Kuma │ │ Uptime Kuma │ │ Uptime Kuma │
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ (Port 3001) │ │ (Port 3001) │ │ (Port 3001) │
│ (Host: 9091) │ │ (Host: 9092) │ │ (Host: 9093) │
└─────────┬───────────┘ └─────┬────────────┘ └──────┬───────────┘
│ │ │
└───────────────────┼─────────────────────┘
│
┌─────────▼─────────┐
│ MariaDB │
│ (Port 3306) │
│ (Host: 9090) │
└───────────────────┘
流程圖
┌───────────────────┐
│ Nginx 健康檢查 │
│ (每 60 秒檢查一次) │
└─────────┬─────────┘
│
┌───────────▼───────────┐
│ 節點是否連續失敗 3 次? │
└───────┬─────┬─────────┘
│否 │是
│ │
┌───────▼ ▼──────────┐
│ 狀態維持 online │
└────────────────────────┘
│
┌───────────▼───────────┐
│ 狀態更新為 offline │
└───────────┬───────────┘
│
┌──────────────▼──────────────┐
│ 移轉監控器到其他節點 (平均分配)│
└──────────────┬──────────────┘
│
┌────────────▼────────────┐
│ 其他節點繼續跑監控任務 │
└────────────┬────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 節點恢復 (狀態 online)? │
└───────────┬───────────────┬──────────────┘
│否 │是
│ │
┌───────────▼───────┐ │
│ 節點維持 offline │ │
└───────────────────┘ │
│
┌────────────────▼────────────────┐
│ 監控器搬回原始節點 (避免重複跑)│
└────────────────┬────────────────┘
│
┌───────────────▼───────────────┐
│ 系統恢復正常,持續健康檢查 │
└───────────────────────────────┘