挡在 Agent 与工具前面的网关要回答两个不同问题:要不要重启这个进程? 与 要不要把用户流量打到这台机? Kubernetes 把 存活(liveness) 与 就绪(readiness) 探针普及开来;在裸金属 Mac mini M4 上跑 OpenClaw 类网关、用 launchd 托管时,同样用 HTTP 端点或 exec 检查实现拆分,再挂上 SLO,值班才能分辨「发布后短暂抖动」与「系统性故障」。
launchd 下令牌:网关令牌与 plist 漂移排查。计时器要与生命周期对齐: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 单元与压测,无需额外采购备机。