OpenClaw 监控修复系统:让 AI 助手自己学会"看病"
你有没有想过,如果你的 AI 助手能自己发现问题、自己修复问题,那会是一种什么体验?
最近,我给 OpenClaw 装了一套”智能监控系统”,它不仅能 7×24 小时监控运行状态,还能在出问题的时候自动修复,甚至不需要我动一根手指。
今天,就来聊聊这个监控系统是怎么实现的。
为什么需要监控系统?
作为一个小团队的技术负责人,我每天都要处理各种意外情况:
-
早上醒来发现定时任务没跑 -
Gateway 突然停止响应 -
服务器资源被占满
这些问题总是来得猝不及防。与其被动救火,不如让系统自己学会”看病”。
于是,OpenClaw 监控修复系统诞生了。
系统架构:三道防线保驾护航
第一道:独立于 OpenClaw 之外
传统的监控都是”寄生”在主系统上的,主系统一挂,监控也跟着挂。
我采用了一个更聪明的方案:让监控进程独立运行。
┌─────────────────────────────────────────┐│ 独立监控进程 (PM2 守护) ││ ┌─────────┐ ┌─────────┐ ┌─────────┐ ││ │ 监控模块 │→ │ 修复模块 │→ │ 通知模块 │ ││ └─────────┘ └─────────┘ └─────────┘ │└─────────────────────────────────────────┘ ↓ ↓ ↓ 检查状态 执行修复 飞书通知
这套系统跑在 PM2 进程管理器上,即使 OpenClaw Gateway 彻底宕机,监控进程依然能正常运行,发现问题并尝试修复。
第二道:全方位状态检查
监控系统每 5 分钟执行一次全面”体检”:
|
|
|
|
|---|---|---|
|
|
openclaw gateway status |
|
|
|
openclaw cron list |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
第三道:智能修复策略
发现问题后,系统会自动执行修复:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
修复完成后,系统会通过飞书自动通知我修复结果。
核心代码实现
1. 监控模块 (monitor.js)
asyncfunctionrunMonitor() {// 优先检查 Gatewayconst gatewayStatus = await checkGatewayStatus();// Gateway 不可用时,只报告 Gateway 问题if (!gatewayStatus.healthy) {return { healthy: false, issues: [{ type: 'gateway', ...gatewayStatus }] }; }// Gateway 正常,继续检查其他项目const checks = {gateway: gatewayStatus,cron: await checkCronTasks(),process: await checkProcessAlive(),resources: await checkSystemResources(),network: await checkNetwork() };// 汇总问题const issues = [];if (!checks.gateway.healthy) issues.push({ type: 'gateway', ...checks.gateway });if (!checks.cron.healthy) issues.push({ type: 'cron', ...checks.cron });// ... 其他检查return { healthy: issues.length === 0, issues };}
2. 修复模块 (fixer.js)
asyncfunctionrestartGateway() { log('INFO', '尝试重启 Gateway...');const result = await execCommand('openclaw gateway restart');// 等待 15 秒让 Gateway 启动awaitnewPromise(r => setTimeout(r, 15000));// 验证是否真的恢复const statusResult = await execCommand('openclaw gateway status');if (statusResult.stdout.includes('ok')) {return { fixed: true }; }return { fixed: false };}
3. 静默执行(不弹窗)
为了让监控在后台安静运行,所有命令都用了静默模式:
functionexecCommand(command) {const silentCommand = `powershell.exe -WindowStyle Hidden -Command "${command}"`;returnnewPromise((resolve) => { exec(silentCommand, { shell: 'cmd.exe' }, callback); });}
实际测试效果
测试场景 1:手动停止 Gateway
我在测试中手动停止了 Gateway:
🔧 OpenClaw 自动修复中发现的问题:gateway: Gateway已停止运行
系统检测到问题后,自动执行了重启:
[INFO] 尝试重启 Gateway...[INFO] Gateway 重启命令已发送,等待启动...[SUCCESS] Gateway 重启并验证成功
✅ 2 分钟后,Gateway 自动恢复正常。
测试场景 2:定时任务异常
当 cron 任务失败时:
发现的问题:cron: 存在失败的任务
系统会列出失败任务并尝试重试。
通知效果
每次检查和修复,系统都会通过飞书自动通知:
-
🚨 异常告警 -
🔧 修复中通知 -
✅ 修复成功 / ❌ 修复失败
再也不用担心半夜出问题了。
总结
这套监控系统虽然不大,但解决了实际问题:
-
独立运行 – 不依赖 OpenClaw 主进程 -
自动修复 – 大部分问题无需人工介入 -
静默运行 – 后台执行,不弹窗打扰 -
及时通知 – 异常第一时间推送
如果你也在用 OpenClaw 或者类似的自动化平台,建议也给它配一套监控系统。毕竟,真正的自动化,是连”看病”都能自己完成的。
夜雨聆风