跳到正文
🟠 需外部服务 — 需自备相关账号/权限 进阶 数据与监控

服务器健康监控告警

每隔30分钟自动检查服务器 CPU、内存、磁盘、关键进程,异常立刻发 Telegram 告警。

⚔️ 难度 ★★☆ 进阶
⏱ 配置耗时 10-15 分钟
🎁 掉落 节省 10-15 分钟
📜 所需秘籍 healthcheck telegram
🦞 部署 可一键部署

🎯 做完你会得到

服务器出问题第一时间收到 Telegram 告警,包含具体指标和建议处理步骤,不再靠运气发现故障。

🛠 需要什么

  • healthcheck
  • telegram

👤 适合谁

  • 运维人员
  • 独立开发者
  • 服务器拥有者

⚡ 效果预览

服务器异常时30秒内收到 Telegram 告警,附错误信息和建议解决方案

⚠️ 待验证案例:本案例基于 OpenClaw shell 执行能力和 cron 功能的真实描述,需要 OpenClaw 运行在被监控的服务器上(或通过 SSH 连接)。如果你跑通了,欢迎联系站长提交验证记录。

🔧 Step 0:先配置消息接收渠道

⚠️ 本案例需要发送通知到你的手机,先配置消息渠道 👉 去配置 Telegram/飞书/微信接入 →

解决什么问题

服务器宕机、磁盘爆满、进程崩溃,往往是用户先报障才知道。这个场景让 OpenClaw 充当你的值班运维:

  • 谁会用到:有服务器需要维护的独立开发者、小团队运维、VPS 用户
  • 省了什么:不用盯着监控面板,异常自动通知
  • 效果是什么:每30分钟静默检查,正常不打扰,异常立刻告警

监控项

  • CPU 使用率 > 85%
  • 内存使用率 > 90%
  • 磁盘使用率 > 80%
  • 关键进程(如 nginx、docker、你的 App)是否在运行
  • 服务端口是否响应

前置条件

  • OpenClaw 运行在需要监控的服务器上(Linux/macOS)
  • 或 OpenClaw 已配置 SSH 访问目标服务器
  • Telegram 已连接到 OpenClaw
  • Claude Max 账号,或 Anthropic API Key(轻量判断,用量极少)

如果 OpenClaw 和被监控服务器在同一台机器,直接读取本地系统信息即可,无需 SSH。

用到的工具

工具用途获取方式
exec(内置)执行系统命令获取指标OpenClaw 内置
anthropic/claude-haiku判断是否异常、生成告警内容Claude Max 账号,或 API Key
cron(内置)每30分钟定时检查OpenClaw 内置
Telegram(内置)发送告警消息OpenClaw 已连接 Telegram

预期结果

正常时:静默,不发任何消息。

异常时,收到类似这样的 Telegram 告警:

🚨 服务器告警 · 2026-03-12 07:45

主机:my-server (192.168.1.100)

⚠️ 磁盘告警
  /dev/sda1:已用 87%(剩余 13GB)
  建议:清理 /var/log 或扩容

⚠️ 进程离线
  nginx 进程未检测到
  建议:执行 sudo systemctl restart nginx

✅ CPU:34% | 内存:62% | 正常

最简上手:直接发这句话

复制以下内容发给你的 OpenClaw:

帮我设置服务器健康监控,每30分钟检查一次:

监控项:
1. CPU 使用率(超过 85% 告警)
2. 内存使用率(超过 90% 告警)
3. 磁盘使用率(超过 80% 告警)
4. 进程检查:nginx、docker

检查方式:直接执行 shell 命令读取本机指标。

规则:
- 所有指标正常 → 不发消息
- 有任何异常 → 立刻发 Telegram 告警,说明异常原因和建议处理步骤

设置 cron:每30分钟执行一次(0,30 * * * *)

监控脚本(可让 OpenClaw 帮你生成)

让 OpenClaw 生成一个完整的检查脚本:

帮我写一个 bash 脚本 /opt/health-check.sh,检查以下内容并输出 JSON 格式结果:
- CPU 使用率(用 top 或 /proc/stat)
- 内存使用率(free -m)
- 各磁盘使用率(df -h)
- nginx 进程是否存在(pgrep nginx)
- 80 端口是否响应(nc -zv localhost 80)

脚本输出格式:
{
  "cpu_pct": 34,
  "mem_pct": 62,
  "disks": [{"mount": "/", "pct": 87}],
  "processes": {"nginx": true, "docker": false},
  "ports": {"80": true}
}

有了脚本之后,让 OpenClaw 在 cron 里调用这个脚本,解析输出,判断是否需要告警。

cron 配置命令

# 每30分钟检查一次
openclaw cron add \
  --name "服务器健康监控" \
  --cron "*/30 * * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "执行服务器健康检查:运行 /opt/health-check.sh,解析结果,如果有任何指标超过阈值(CPU>85%、内存>90%、磁盘>80%、进程离线)立刻发 Telegram 告警,告警内容包含具体数值和建议处理步骤;所有正常则不发消息。"

# 查看 cron 列表
openclaw cron list

# 临时暂停(深夜维护时)
openclaw cron pause <job-id>

# 恢复
openclaw cron resume <job-id>

多台服务器监控

如果要监控多台机器,可以配置 SSH 访问后批量检查:

帮我设置多台服务器监控,每小时检查一次:
- server-1: 192.168.1.101(已配置 SSH 密钥)
- server-2: 192.168.1.102(已配置 SSH 密钥)

对每台服务器执行相同的健康检查,任何一台异常都发告警,告警里注明是哪台服务器。

怎么验证成功了

  1. 设置完 cron 后,让 OpenClaw现在手动执行一次健康检查
  2. 正常情况下应该不发消息(或发全部正常确认消息)
  3. 验证告警:临时改低阈值,如CPU > 1% 就告警,触发一次告警后再改回来

踩坑记录

执行 shell 命令权限不足

症状dffreetop 等命令报权限错误。

解法:确认 OpenClaw 进程的运行用户有读取系统信息的权限。大多数 Linux 系统普通用户就能执行这些命令。如果需要检查需要 root 的项目(如某些 docker 命令),用 sudo 并配置 sudoers 免密。

收到太多告警消息(告警轰炸)

症状:某个指标持续异常,每30分钟都收到一条告警,手机被刷屏。

解法:让 OpenClaw 实现冷却期逻辑:同一问题3小时内只告警一次。可以用工作区文件记录上次告警时间来实现:

修改健康监控逻辑:每个告警类型有3小时冷却期,冷却期内同类告警不重复发送。用 /tmp/health-alert-state.json 记录各项上次告警时间。

OpenClaw 不在被监控服务器上

症状:OpenClaw 在本地 Mac,需要监控远程 VPS。

解法:配置 SSH 连接,让 OpenClaw 通过 SSH 执行远程命令:

我的服务器 SSH 地址是 user@your-server.com,密钥在 ~/.ssh/id_rsa。
帮我修改健康检查,通过 SSH 连接到这台服务器执行检查命令。

不满意怎么调

  • 想调整检查频率 → 修改 cron 表达式,如改为每10分钟:*/10 * * * *
  • 想增加监控项 → 告诉 OpenClaw 追加,如同时监控 MySQL 连接数
  • 想接入 PagerDuty/钉钉 → OpenClaw 支持 Webhook,配置后推到任意平台
  • 想看历史记录 → 让 OpenClaw 把每次检查结果追加写入日志文件 /var/log/health.log
  • 想监控网站可访问性 → 加上 HTTP 探测:curl -o /dev/null -s -w "%{http_code}" https://你的网站
#运维#监控#cron#Telegram#服务器