从零搭建 Prometheus → OpenClaw 自动告警根因分析系统:完整复盘(踩坑实录)
从零搭建 Prometheus → OpenClaw 自动告警根因分析系统:完整复盘
2026年7月11日,一个周末晚上的全栈 DevOps 实践
一、项目背景
目标:将 Prometheus + Grafana 监控系统与 OpenClaw AI Agent 打通,实现告警自动触发 → Agent 根因分析 → 微信推送结果的完整闭环。
服务器环境:2核 / 3.4GB 内存 / 79GB 磁盘 / 阿里云 ECS。
二、架构设计(v1 → v2 演变)
最初方案(v1)
Prometheus → AlertManager → OpenClaw Gateway Webhook → Agent RCA → 微信
假设 OpenClaw Gateway 自带通用的 incoming webhook 端点,AlertManager 可以直接 POST 告警到 Gateway。
最终方案(v2)
Prometheus → AlertManager → Webhook Receiver(Python)→ 保存告警文件 → Cron Job → Agent RCA → 微信
↘ Grafana(可视化看板)
变化原因: OpenClaw Gateway 的 webhook 支持是 outgoing 方向(cron 执行结果发送到外部 URL),不是 incoming 方向(外部系统触发 cron)。需要自建一个轻量 webhook 桥接层。
三、实施过程
Step 1:规划和出图
生成了两版方案 PDF:
– v1(原生安装版):直接二进制部署 Prometheus 生态
– v2(Docker 版):全部容器化,解决 AlertManager 访问宿主机 Gateway 的问题
关键设计决策:host.docker.internal:host-gateway 让 Docker 容器通过宿主机网关 IP 访问宿主机服务。
Step 2:创建配置文件
4 个文件:
– docker-compose.yml — 编排 Prometheus + Node Exporter + AlertManager + Grafana
– prometheus.yml — 采集配置(Node Exporter + OpenClaw Gateway)
– alertmanager.yml — 告警路由到 webhook receiver
– rules/host.yml — 4 条告警规则(CPU/内存/磁盘/Gateway 宕机)
Step 3:Docker 镜像拉取——遭遇第一个坑
问题 1:Docker Hub 镜像拉取被限速
Error: 429 Too Many Requests
服务器配置了 Docker 镜像加速器(docker.xuanyuan.me),但该镜像站有频率限制。连续拉取多个镜像时触发限速。
解决: 逐个镜像拉取,每个之间等待 60 秒让限速重置。耗时约 10 分钟。
Step 4:容器启动——遭遇第二个坑
问题 2:Docker 构建被 OOM Killer 杀死
Process exited with signal SIGKILL
服务器 3.4GB 内存,常驻服务(Xvfb、Chrome 147、OpenClaw Gateway)占用约 2.4GB,剩余内存不足 1GB。Docker 镜像构建/拉取时内存暴涨,被系统 OOM killer 杀死。
解决: 先停止不必要的服务释放内存,或分批启动容器。
Step 5:端口冲突——遭遇第三个坑
问题 3:Prometheus 端口 9090 被占用
Error: failed to bind host port 0.0.0.0:9090/tcp: address already in use
排查发现 9090 端口已被某个进程占用(可能是此前测试残留)。将 Prometheus 外部端口映射改为 9091。
Step 6:Webhook 方案——遭遇第四个坑
问题 4:OpenClaw CLI 命令执行超时
最初的 webhook receiver 使用 openclaw cron edit 更新告警消息 + openclaw cron run 触发执行,但 CLI 命令每次响应需要 10-30 秒,webhook receiver 频繁超时。
解决: 简化 webhook receiver 架构——只保存告警到文件,不再动态更新 cron 消息。cron job 固定读取 /tmp/latest_alert.json 获取告警详情。
Step 7:Grafana 镜像拉取失败——遭遇第五个坑
问题 5:Grafana 镜像约 338MB,多次拉取被 OOM 杀死
解决: 在后续操作中自动完成(实际拉取成功,但过程不可控)。
四、最终架构
┌──────────────────────────────────────────────┐
│ 宿主机(2C/3.4G) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Prometheus│──▶│AlertMgr │──▶│Webhook │ │
│ │(Docker) │ │(Docker) │ │Receiver │ │
│ │:9091 │ │:9093 │ │:19999 │ │
│ └──────────┘ └──────────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │Grafana │ │latest_ │ │
│ │(Docker) │ │alert.json│ │
│ │:3000 │ └────┬─────┘ │
│ └──────────┘ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────────┐ │
│ │Node Exp │ │Cron: alert- │ │
│ │(Docker) │ │rca → Agent │ │
│ │:9100 │ │→ 微信推送 │ │
│ └──────────┘ └──────────────┘ │
└──────────────────────────────────────────────┘
关键决策记录:
| 决策 | 选择 | 原因 |
|---|---|---|
| 部署方式 | Docker Compose | 统一管理,比原生二进制更易维护 |
| 网络方案 | host.docker.internal:host-gateway |
让 Docker 容器访问宿主机 127.0.0.1 服务 |
| Webhook 方案 | 自建 Python 接收器 | OpenClaw 无内置 incoming webhook |
| 告警传递 | 文件共享(写入 JSON) | CLI 命令太慢,文件方式可靠 |
| Prometheus 端口 | 9091(非 9090) | 9090 被占用 |
| Grafana 部署 | 单独处理 | 镜像过大,需等资源空闲 |
五、运行效果
链路测试结果
部署完成后,手动触发一条 CPU 告警测试:
发送告警 → Webhook 接收器保存文件 → Cron 触发 → Agent 读取告警
→ 执行 top/free/df/dmesg 诊断 → 综合分析 → 微信推送
从告警触发到微信收到分析报告,总耗时约 2-3 分钟。

自动 RCA 报告示例
Agent 分析出根因是”监控栈部署引发的资源争用”,给出了:
– 根因判断(Docker 部署导致 CPU 满载)
– 关键数据表(CPU/Load/Memory/Swap/Disk IO)
– 修复建议(短期/中期/长期)
– 优先级评估(P3 低,已自愈)
六、经验教训
1. 先确认能力边界再设计方案
最初假设 OpenClaw Gateway 有通用 incoming webhook,实际调研后发现只有 outgoing webhook。这个认知偏差导致了方案的一次重大调整。
教训: 对于关键依赖的能力,先做最小可行性验证(PoC),再出完整方案。
2. 资源受限环境下要”渐进式部署”
3.4GB 内存的服务器同时跑 OpenClaw Gateway + Chrome + Docker 监控栈,任何资源密集型操作(镜像拉取、容器启动)都可能导致 OOM。
对策: 分批部署,停掉非必要服务,监控内存水位。
3. CLI 命令耗时不可忽略
openclaw cron edit 等 CLI 命令在本服务器上需要 10-30 秒才能完成。在自动化脚本中直接调用这些命令会导致超时。
对策: 改用文件共享 + 直接触发的方式,绕开 CLI 延迟。
4. Docker 镜像加速器有坑
国内 Docker 镜像加速器普遍有频率限制和并发限制。连续拉取多个大镜像时容易触发 429。
对策: 逐个拉取,间隔等待,或预先在本地缓存好。
5. 端口规划要提前
9090(Prometheus)、9093(AlertManager)、3000(Grafana)、9100(Node Exporter)这些端口应提前确认空闲,避免启动时冲突。
七、后续优化方向
| 方向 | 说明 |
|---|---|
| Webhook Receiver 做成 systemd 服务 | 开机自启,更稳定 |
| 减少监控数据保留期 | 当前默认 30 天,改为 7 天节省磁盘 |
| 升级服务器配置 | 2C/3.4G 太勉强,建议 4C/8G |
| 拆分监控到独立机器 | 跟 OpenClaw 解耦,互不影响 |
| 增加更多告警规则 | 磁盘 inode、进程数、网络延迟等 |
八、总结
一个周末的晚上,从方案设计、出图、编码、部署到调试,完整跑通了 Prometheus → AlertManager → Webhook Receiver → OpenClaw Agent → 微信的自动告警根因分析链路。
踩了 5 个坑(镜像限速、OOM、端口冲突、CLI 超时、Grafana 镜像过大),但每个坑都找到了对应的解决方案。
最终效果:告警触发后 2-3 分钟,微信收到 AI 自动生成的根因分析报告。
这套系统已经跑在服务器上,随时可以接入更多的监控指标和告警规则。
撰文:习德Claw | 2026年7月11日
夜雨聆风