
這篇文章記錄我用 Uptime Kuma 實際部署、升級 MariaDB 和串接 Uptime Kuma Admin API 的經驗,讓你也能輕鬆自架、節省監控成本。
經過深入分析 Uptime Kuma 的程式碼後,我們發現了一些有趣的現象。原本以為效能問題主要來自於 SQLite 的高頻資料庫讀寫,但實際測試後發現,即使升級到 MariaDB,當監控數量超過 1000 個 API 時,後台畫面仍然會出現載入困難的情況。
經過程式碼分析,我們發現問題可能不在於資料庫層面,而是前端的程式設計沒有充分考量到大規模監控的使用情境。這導致在大量監控項目時,前端渲染和資料處理會成為效能瓶頸。
對於需要監控大量 API 的場景,建議考慮以下方案:
有時候想要客製 public status page 或自動化新增管理監控,這時就需要 RESTful API 來幫忙。
在規劃監控系統時,我們選擇了開源的 Uptime Kuma 作為主動監控的解決方案。不過預設的 Uptime Kuma 並不支援 RESTful API,這對於自動化管理來說是個限制。
後來找到了 medaziz11/uptimekuma_restapi 這個開源套件,它巧妙地解決了這個問題。這個套件的工作原理是透過 WebSocket 模擬使用者登入,然後將這些操作封裝成 RESTful API。
這樣的設計讓我們能夠在明年第二階段上架時,實現建立監控 API 功能的自動化,大大提升了管理效率。
Uptime Kuma 官方本來沒有提供 RESTful API,只有網頁操作和 WebSocket 通訊。不過你可以用第三方的 medaziz11/uptimekuma_restapi 容器(上面 docker-compose.yml 已經有加),就能用 HTTP 輕鬆自動化管理監控。
這個套件的巧妙之處在於它採用了「模擬使用者操作」的方式。具體來說:
這種方法雖然看起來有點「繞路」,但實際上是一個非常實用的解決方案,特別是在需要與現有系統整合的場景下。
services:
kuma:
image: louislam/uptime-kuma:2.0.0-beta.3
ports:
- "3001:3001"
environment:
- UPTIME_KUMA_DB_TYPE=mariadb
- UPTIME_KUMA_DB_HOSTNAME=mariadb
- UPTIME_KUMA_DB_PORT=3306
- UPTIME_KUMA_DB_NAME=kuma
- UPTIME_KUMA_DB_USERNAME=kuma
- UPTIME_KUMA_DB_PASSWORD=G7p9x2Qw!s
depends_on:
mariadb:
condition: service_healthy
volumes:
- uptime-kuma:/app/data
mariadb:
image: mariadb:10.11
environment:
- MYSQL_ROOT_PASSWORD=R4t8z1Lm@v
- MYSQL_DATABASE=kuma
- MYSQL_USER=kuma
- MYSQL_PASSWORD=G7p9x2Qw!s
volumes:
- mariadb-data:/var/lib/mysql
ports:
- "3307:3306"
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-pR4t8z1Lm@v"]
timeout: 10s
retries: 10
interval: 10s
start_period: 30s
api:
image: medaziz11/uptimekuma_restapi
environment:
- KUMA_SERVER=http://kuma:3001
- KUMA_USERNAME=admin
- KUMA_PASSWORD=G7p9x2Qw!s
- ADMIN_PASSWORD=F5n3c7Vb$e
depends_on:
- kuma
ports:
- "8000:8000"
volumes:
- api:/db
volumes:
uptime-kuma:
mariadb-data:
api:
帳號密碼要和 docker-compose 設定一致,API 服務才會正常連線!
curl -X GET 'http://localhost:8000/api/monitors' -H 'Content-Type: application/json'
curl -X POST 'http://localhost:8000/api/monitors' \
-H 'Content-Type: application/json' \
-d '{
"friendly_name": "我的網站",
"type": "http",
"url": "https://example.com",
"interval": 300
}'
Uptime Kuma 真的超省錢,自己架設也不難,換成 MariaDB 後效能穩定,還能用 API 自動化管理。推薦給所有想省錢又想自己掌控監控的朋友!
小提醒:如果你的監控數量超過 1000 個,Dashboard 就會開始卡,可能需要考慮使用多個 Uptime Kuma 實例來分散負載,或者等待官方在未來版本中改善大規模監控的效能問題。
基於我們的使用經驗和效能分析,我們計劃在明年的第二階段中:
這樣的規劃讓我們能夠在保持成本效益的同時,提供穩定可靠的監控服務。