一次填寫,下面指令自動代入
gcloud 指令請在已安裝 Google Cloud CLI、且已登入管理帳號的電腦執行。建立最小權限的執行身分
Function 不使用你的個人帳號,而是使用專用 Service Account。它只需要查看、啟動與重設 Compute Engine 的權限。
建立判斷與復原程式
Webhook 只接受正確 Bearer Token、正確 Monitor ID,而且只處理 DOWN。VM 已停止就啟動;VM 還顯示 RUNNING 則執行硬重設。
啟動 VM
呼叫 instances.start,適合被手動停止或異常關機的 VM。
硬重設 VM
呼叫 instances.reset,適合作業系統或服務完全失去回應。
建立專案目錄
main.py
requirements.txt
產生並保存 Webhook 密鑰
Token 不寫進程式碼,也不要貼到公開對話。它會存在 Secret Manager,由 Function 執行身分在啟動時讀取。
複製輸出結果,代入下一段的 在這裡貼上Token:
部署 HTTP Cloud Function
將 DOWN 通知送到 Function
- 開啟 Settings → Notifications → Setup Notification → Webhook。
- Webhook URL 貼上部署後取得的 Function URL。
- Request Method 選 POST,Body Encoding 使用 application/json。
- Additional Headers 加入下方 JSON,Token 必須與 Secret Manager 中的值相同。
- 回到目標 Monitor,把這個 Notification 指派給它。
建議 Monitor 參數
| 設定 | 建議值 | 目的 |
|---|---|---|
| Heartbeat interval | 60 秒 | 避免檢查太密集 |
| Retries | 3~5 次 | 排除短暫封包遺失 |
| Retry interval | 30~60 秒 | 給服務恢復的時間 |
| Resend notification | 停用或 15~30 分鐘 | 避免重複硬重設 |
先測拒絕,再做受控故障測試
不要一開始就關正式服務。依序確認入口安全、測試通知被忽略、最後才安排維護時段做真正 DOWN 測試。
- 錯誤 Token:用 curl 呼叫 Function,應回傳 HTTP 401。
- Kuma Test:一般測試通知沒有真正 DOWN heartbeat,應回傳
ignored,VM 不應重啟。 - 查看日誌:在 Cloud Logging 確認請求結果與錯誤。
- 受控測試:維護時段暫停目標服務,等待 Kuma 重試次數走完。
- 確認復原:Compute Engine Operations 出現 start/reset,服務恢復後 Kuma 轉回 UP。
上線前必讀
服務掛掉,真的需要重開整台 VM 嗎?
若只是 Nginx、Docker container 或單一應用程式失效,優先做服務層自動復原,例如 Docker restart policy、systemd Restart 或容器 healthcheck。整台 VM reset 應是最後一道防線。
如果只是 DNS、Firewall 或外部網路故障呢?
Kuma 可能誤判 VM 故障。提高 retries,並考慮由第二個地點做交叉監控。Function 雖然會先查 GCE 狀態,但 GCE 顯示 RUNNING 不代表應用程式可用。
Kuma 可以裝在被監控的 VM 裡嗎?
不建議。目標 VM 掛掉時,Kuma 也無法送出 Webhook。應放在不同主機、不同雲端或至少不同故障域。
更原生的 GCP 作法?
若工作負載可重建,使用 Managed Instance Group、Health Check 與 Autohealing 會更穩定,因為偵測與復原都在 GCP 內完成。
官方參考
Uptime Kuma Webhook 實作
Google Cloud:Reset a VM
Google Cloud:Stop and start a VM