生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~250k tokens,输出 ~5k tokens(本节)
健康检查是生产环境中不可或缺的基础设施——它让运维人员和自动化系统能够判断 Gateway 是否正常运行。OpenClaw 提供了多层次的健康检查机制:Gateway 探针(WebSocket 级别)、健康 RPC 方法(应用级别)和状态快照(系统级别)。
30.1.1 Gateway 探针(Probe)
probeGateway()(src/gateway/probe.ts,126 行)是 OpenClaw 最全面的健康检查工具。它不是简单的 TCP 端口检测,而是通过 WebSocket 建立一个完整的客户端连接,然后请求多项数据:
// src/gateway/probe.ts(简化)
export async function probeGateway(opts: {
url: string;
auth?: { token?: string; password?: string };
timeoutMs: number;
}): Promise<GatewayProbeResult> {
const client = new GatewayClient({
url: opts.url,
mode: "probe", // 特殊的探针模式
onHelloOk: async () => {
// 握手成功后,并行请求四项数据
const [health, status, presence, configSnapshot] = await Promise.all([
client.request("health"),
client.request("status"),
client.request("system-presence"),
client.request("config.get", {}),
]);
// 返回结构化结果
},
});
client.start();
}
返回的 GatewayProbeResult 包含:
探针模式(mode: "probe")是 Gateway 客户端的特殊连接模式——它只进行只读查询,不会被计入活跃客户端计数,也不会触发聊天或命令执行。
30.1.2 健康 RPC 方法
Gateway 暴露了 health 和 status 两个 RPC 方法,可以通过 WebSocket 调用:
健康检查涉及对多个频道(如 Telegram、Discord)的探测,可能耗时数秒。为了避免频繁查询影响性能,Gateway 实现了两层缓存:
内存缓存:healthCache 变量保存最新的 HealthSummary,带有时间戳和版本号
后台刷新:当返回缓存结果时,同时在后台触发异步刷新——用户看到的是即时响应,同时缓存在后台静默更新
refreshGatewayHealthSnapshot() 使用 Promise 去重——如果已有刷新正在进行,新的刷新请求会等待同一个 Promise 完成,避免并发重复探测:
getHealthSnapshot()(src/commands/health.ts,788 行)生成全面的 HealthSummary,包含:
对每个已配置的频道(Telegram、Discord、WhatsApp 等),检查:
Bot 信息:bot 用户名、webhook URL
对每个配置的 Agent:
心跳状态:HeartbeatSummary(间隔时间、上次运行时间)
buildGatewaySnapshot()(src/gateway/server/health-state.ts)在 Gateway 启动时和客户端首次连接时生成初始状态快照:
状态版本号(presenceVersion 和 healthVersion)是单调递增的计数器,客户端可以通过比较版本号判断是否需要刷新本地缓存——这比轮询完整数据更高效。
Gateway 定期向所有已连接的客户端广播心跳事件,包含最新的健康和 Presence 数据。当健康状态发生变化时,broadcastHealthUpdate() 也会触发实时推送:
这种推送模式确保了 Web 控制台和原生应用能实时反映 Gateway 的健康状态,无需客户端主动轮询。
Gateway 探针是最全面的健康检查——它建立完整 WebSocket 连接,并行请求健康、状态、Presence 和配置四项数据,适用于外部监控和 CLI 诊断。
健康 RPC 方法支持缓存 + 后台刷新的双层策略——缓存有效时立即返回,同时异步更新;Promise 去重避免并发探测。
健康摘要覆盖频道(探测 + 配置)、代理(心跳 + 会话)和系统(运行时间 + 版本)三个维度。
状态版本号是高效的缓存失效机制——单调递增计数器让客户端只需比较数字即可判断是否需要刷新。
心跳广播将健康数据主动推送到所有客户端,实现实时状态同步。