本文給控制面/平台組一組約千餘字的 HowTo:多節點 merged 契約、網關/工作者/通知的多路切片、日誌落盤配額與輪替,以及Webhook 失敗摘要廣播。模板合併與工作流隔離請對照《多節點設定片段模板合併與金絲雀分流》;多區網關與探針合併脈絡見《多可用區網關、健康探針與 Webhook 摘要》;滾動升級與失敗廣播節奏可銜接《滾動升級、peer 依賴與金絲雀回滾》。
多節點合併與多路切片契約
合併:每台 clustervps Mac 寫入同一路徑語意的 merged 目錄,推廣前用同一支合併器產物與 .sha256 對帳;任一台 digest 不一致即整批阻擋 reload。合併器非零退出時,launchd 與網關載入腳本必須短路,避免「半套 YAML」上線。
多路切片:對外網關監聽、背景工作者佇列、出站 Webhook 通知器分屬不同程序或埠組(或不同 launchd Label),LB/內部 DNS 可獨立調權重。目的很單純:一路徑塞車或錯誤風暴時,不必整叢集一起失能;與金絲雀切片疊用時,請把「合併版本號、切片名、節點 hostname」寫進結構化日誌鍵,方便事後 join。
日誌落盤配額與輪替
將 OpenClaw 與網關日誌根目錄掛在獨立子卷或至少獨立目錄樹,監控同時看 df -h 與 df -i:磁碟百分比健康但 inode 歸零時,仍會全寫失敗。輪替建議採「單檔大小上限+保留天數」雙閾值;壓縮延後到離峰,避免與合併/同步 IO 疊加。若使用 copytruncate,務必在演練環境驗證與實際二進位的訊號相容,否則常見「已輪替但程序仍握舊 inode、空間不釋放」。
配額層面可設軟告警(例如目錄樹 70%)、硬阻擋(90% 時拒絕非關鍵 DEBUG),並把「日誌目錄可寫」納入 composite 探針子項,與 doctor 逾時策略一致採 degraded 而非無限 hang。
Webhook 失敗摘要廣播
出站 Webhook 不應逐次失敗即推 Slack/飛書:請在通知器側做固定時間窗(實務常取五分鐘)聚合,欄位至少含 window、count、top_error_class、nodes[](含 az/監聽埠)。同一錯誤類別在同一窗內去重計數;對「連續認證失敗」或「5xx 暴增超閾值」可額外旁路立即告警,避免摘要掩蓋單次致命事件。
{
"window_sec": 300,
"count": 42,
"top_error_class": "TLS_HANDSHAKE_TIMEOUT",
"nodes": [{"host":"mac-a","az":"hk","listen":":8443"}]
}
輪換 Webhook HMAC 或 Bearer 時,採雙簽並行窗口:新舊金鑰同時接受一小段時間,再全域切換並撤銷舊金鑰;廣播 JSON 應帶 key_id 便於稽核。
最小可復現步驟(HowTo)
(1)準備兩台以上 clustervps 專用 Mac,建立相同 merged 路徑與合併腳本,先單節點 validate 全綠。(2)將同一修訂推至第二台,人為製造合併衝突,確認兩台 digest 不一致時自動拒絕 reload。(3)啟用多路:網關與通知器分埠,以合成流量觀察一路徑降權後另一路仍健康。(4)灌入高頻 4xx 錯誤,驗證通知頻道只收到五分鐘摘要而非逐條訊息。(5)演練日誌目錄打滿與 inode 耗盡各一次,確認告警、輪替與人工清理 runbook 可還原寫入。SSH 跳躍與截圖對齊說明中心;容量預算先對照方案與價格預留日誌卷與頻寬。
排障清單:輪替、磁碟、inode
- 輪替後空間不降:用
lsof查仍開啟已刪除日誌的 PID;必要時重載寫入程序。檢查壓縮子程序是否堆積。 - 磁碟佔滿但找不到大檔:對照
df -h與目錄du;注意 APFS 快照與 Time Machine 本地陰影是否吃掉配額。 - inode 耗盡:
df -i確認;清理過期.gz/小碎片、下調 rotate 保留份數、合併多服「一請求一檔」除錯輸出改為緩衝寫。 - Webhook 洗版復發:檢查通知器是否繞過聚合層;確認錯誤分類鍵是否過細導致去重失效。
常見誤判:只看磁碟百分比忽略 inode;把 Webhook 200 當業務成功而未對帳回應本文;輪替腳本在高峰整點跑導致 IO 抖動被誤認為網路問題。
演練通過後,將本 runbook 掛到正式租戶與 on-call;若要新增專用 Mac 節點承載日誌卷或通知器,可先瀏覽購買頁與首頁公開規格與區位,再開工單擴容,避免口頭配額與實際機位不一致。