
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
節點恢復之後要能自動回來:
online
Uptime 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 │ │ └───────────────────┘ │ │ ┌────────────────▼────────────────┐ │ 監控器搬回原始節點 (避免重複跑)│ └────────────────┬────────────────┘ │ ┌───────────────▼───────────────┐ │ 系統恢復正常,持續健康檢查 │ └───────────────────────────────┘