擋在 Agent 與工具前面的網關要回答兩個不同問題:要不要重啟這個進程? 與 要不要把用戶流量打到這臺機? Kubernetes 把 存活(liveness) 與 就緒(readiness) 探針普及開來;在裸金屬 Mac mini M4 上跑 OpenClaw 類網關、用 launchd 託管時,同樣用 HTTP 端點或 exec 檢查實現拆分,再掛上 SLO,值班才能分辨「發布後短暫抖動」與「系統性故障」。
計時器要與生命周期對齊:launchd 與網關就緒對齊。出站與 TLS:出站代理與 TLS 白名單。日誌體量:網關日誌輪轉與脫敏。價格:價格;幫助:幫助。
探針職責矩陣
| 探針 | 檢查內容 | 失敗動作 |
|---|---|---|
| 存活 | 進程在跑;事件循環未卡死;埠綁定成功 | 達閾值後由 launchd 重啟 |
| 就緒 | 鑑權存儲可達;模型/路由依賴正常;磁碟剩餘 > 10% | 從負載均衡/Agent 名單摘除;不重啟 |
| 啟動 | 遷移、證書加載、緩存預熱 | 完成或超時前阻塞就緒 |
SLO 起步表
| 信號 | 目標 | 燃盡告警 |
|---|---|---|
| 月可用性 | 對內 99.5%/對客 99.9% | 1 小時 內燒掉 2× 錯誤預算 |
| 探針 p95 | 迴環 < 200 ms | 持續 > 500 ms 達 15 分鐘 |
| 就緒抖動 | 非發布日每日 < 3 次 | 30 分鐘 內 > 10 次 |
macOS 細節: 睡眠喚醒或網絡切換後,DNS、VPN 穩定前就緒可短暫失敗;調大 launchd 的 ThrottleInterval,避免網卡瞬態抖動時誤殺健康網關。
八步實現清單
- 定義 HTTP 路徑(如
/livez與/readyz),在 runbook 寫清語義。 - 存活保持輕量——不調外部;就緒可對依賴做短超時探測。
- 外部探針(反向代理、K8s sidecar、合成監控)只據就緒決定流量。
- 探針失敗打 WARN,帶原因碼,便於關聯 Agent 斷連。
- 大盤 同時看錯誤預算燃燒、CPU、M4 上打開文件描述符。
- 演練日:掐掉上遊依賴,確認就緒失敗而不會引發存活重啟風暴。
- 發布後:30 分鐘 金絲雀窗口可暫時放寬抖動告警。
- 季度復盤 閾值與實際事故數據。
常見問題
網關的存活探針與就緒探針有什麼區別?
存活回答「進程是否應該被重啟」;就緒回答「是否應接收流量」。網關在上遊鑑權、模型後端或磁碟不健康時可能仍存活但未就緒。
單臺 M4 網關合理的 SLO 閾值大概是多少?
許多團隊對內網網關定月可用性約 99.5%,迴環探針 p95 延遲低於 200 ms,發布窗口外每日就緒抖動控制在數次以內。
建議先在租用的 Mac mini M4 上跑通探針與 SLO,再切生產。NodeMac 在香港、日本、韓國、新加坡、美國提供帶 SSH/VNC 的獨佔 Apple Silicon,便於 SRE 鏡像 launchd 單元與壓測,無需額外採購備機。