Margrop
Articles374
Tags738
Categories7

Categories

/v1/models 0.025s 0步 0步元递归 0步本身 12类 192.168.x.x 1password 22类一键汇总 3层定位法 401 4个Gateway 4个Gateway全军覆没 503 60秒延迟 60秒超时 6个节点 AC ACP AI AI Coding Assistant AI编程助手 AI辅助 AI辅助编程 AP API Agent couldn't generate Alertmanager AppDaemon Aqara BaiduPCS CC-Switch CI/CD CLI Tools CLI工具 CONFIG Caddy Chrome缺失 Claude Code Cloudflare Codex Cookie 认证 Cron D1 DB探针 DB静止 DIY-123模型 DIY-MINI DIY平台 Date Diagrams.net Diary Docker Docker Compose EADDRINUSE EasyTier NAT穿透 Efficiency Tools Electerm English FTS5 Gateway Gemini CLI GitHub Actions HA HADashboard Hermes Hexo HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Macmini Macmini log路径 Markdown MiniMax MiniMax-M3 Multi-Agent MySQL NAS NRestarts Nginx Node-RED Node.js OOM OpenAI OpenClaw OpenClaw gateway OpenCode OpenResty OpenWrt PPPoE Portainer PostgreSQL ProcessOn Prometheus Proxmox VE RPC Restart=always Restart=always循环 SOCKS5 SQLite SSL Session Shell Subagent TTS TimeMachine UML Uptime Kuma VM151 VM152 WeCom缺失 VM153 VPN VPS VPS4 VPS4 overlay TCP不可达 WeCom Web WebSocket Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy auto-restart autofs backup baidupan bash bitwarden boot brew browser by-design caddy2 capture_output cdn centos cert certbot charles chat chat completion chrome classloader client clone closures cloudflare cmd command commit connected container cron crontab cron任务 cron设计 ctyun dashboard ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump duplicate service unit dylib edge exception exit 78 export fail2ban fallback fallback失效 feign firewall-cmd flow frp frpc frps fuckgfw function fuser gcc gfw git gitea github golang google_gemma-4 gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea image img img2kvm immortalwrt import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jieba jni jnilib journald journald日志漂移 jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live loopback-proxy low-code lsof lvm lxc m3u8 mac macos manual mariadb markdown maven md5 meta-acceptance meta-pattern meta-probe microcode mirror model provider modem modules monitor mount mstsc mysql n2n n5105 nas netstat network new-api nfs node node-red nodejs nohup notepad++ npm nssm ntp one-api oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping ping通但chat不通 pip plugin png port=18789 powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reconnect循环 reflog remote remote desktop renew repo resize retina root route router rule rules running runtime safari sata schema schema列名 scipy-notebook scoping scp server server is busy service不可信 slmgr so socket-proxyd socks source spk split边界 spring springboot springfox sqlite3 CLI ss ssh ssl stale stash stderr被吞 string subprocess supernode svg svn swagger sync synology system-level daemon system-level vs user-level system-level与user-level抢端口 systemctl systemctl disable systemd systemd duplicate service systemd exit 78 systemd service unit systemd unit systemd unit race systemd-socket systemd被覆盖 tap tap-windows tapwindows telecom template terminal tls tmux token token失效 totp transient 999 trigram tvbox txt ubuntu udisk ui undertow unicode61 uninstall unlocker upgrade upstream provider timeout uptimeMs url user-level daemon v10探针 v11探针 v12探针 v13探针 v1探针 v2ray v6探针 v7探针 v8探针 vhd vim vlmcsd vm vmdk web websocket wechat windows with work day 2 worker wow xiaoya xml yum zip 一键告警脚本 上游LLM容量 不是我的锅 中国电信 中文搜索 主动0步 主动0步本身 主动不追问 主动不追问本身 主动不追问本身也是清单之外 主动不通知 主动不通知本身 主动修 主动修system-level本身也是清单之外 主动修本身也是清单之外 主动周一 主动意识到 主动意识到0步本身 主动意识到0步本身也是清单之外 主动追问 云电脑 交换机 人机协作 代理 优化 但chat 30s+ 但是我的事 体检 保护逻辑本身也是清单之外 修挖坑闭环 修正本身 修正递归 值班 假阳 假阴 健康检查 元递归 光猫 全绿 全量同步 公网IP 内存 内存优化 内网 内网IP 内网渗透 写作 分词 切换 列名误判 升级 协作 单位混淆 博客 反向代理 反常稳定 反应 vs 知识 启动 告警 告警优化 周一 周一焦虑 周三 周二 周二晚上 周五 周六 周四 周报 周日 周末 周末也是清单之外 周末本身也是清单之外 周末突破 周末第二天 周末落地 周末落地本身 夏令时 多场景 多智能体 多节点 多节点管理 天猫精灵 天翼云 安全 安装 定时任务 容器 容器网络 导入 小米 工作感悟 工作日 工作日常 工作日第三天 工作日第五天 工作日第四天 已通知用户 常用软件 幂等 广告屏蔽 序列号 应用市场 异常 循环类 心态 心智成长 心理模型 心跳 心跳检查 性能优化 感悟 打工 打工人 打工人的无奈 批量校验 技术 抓包 挖坑→修坑闭环 排查 排查思路 探针再升级 探针本身 探针版本 探针管理 探针自检 探针踩坑 接受 接受之后 接受修 接受修正 接受层 接受挖坑 接受本身 接受递归 描述文件 放下 故障 故障排查 效率 效率工具 数据 旁路由 旁路进程 无服务器 日记 时区 显卡虚拟化 智能家居 智能音箱 服务器 服务管理 架构 梯子 模块 模型别名映射 模型探测 模型端点可达性 模型端点能ping通 模型调用 毫秒 流程 流程图 流程管理 浏览器 清单之后 清单之外 清单之外也包括接受本身 清单的元递归 清单设计 清单边界 清单进化 源码备份 漫游 激活 激活循环 火绒 焦虑 玄学 生活 电信 画图 监控 监控系统 直播源 直觉 磁盘 端口 端口冲突 端口扫描 第10天 第10类 第11天 第11类 第12天 第12类 第13天 第13类 第14天 第14类 第15类 第16天 第16类 第17类 第18类 第19类 第20类 第21类 第22类 第23类 第25类 第6天 第7天 第8天 第9天 第9类 管理 续期 网关 网络 网络风暴 群晖 脚本 脚本优化 腾讯 自动化 自动恢复 自建应用 自我反思 自我打脸 节点角色 虚拟机 被动意识到 角色不匹配 角色误判 角色误配 角色错配 认证 设计偏差 证书 语雀 误报 误报过滤 超时 路由 路由器 软件管家 软路由 运维 运维监控 进程 连接保活 连接问题 通信机制 通知 通知元递归 通知挖坑 通知本身 部署 部署链路 配置 配置落后 钉钉 镜像 镜像源 长期稳定 长连接 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 静默期 飞书

Hitokoto

Archive

OpenClaw Heartbeat 配置详解:如何设置最佳健康检查策略

OpenClaw Heartbeat 配置详解:如何设置最佳健康检查策略

OpenClaw Heartbeat 配置详解:如何设置最佳健康检查策略

前言

昨天我们遇到了一个典型的运维事故:三台服务器几乎同时出现故障,但由于定时健康检查脚本及时发现,得以在用户报修之前完成修复。这个经历让我深刻意识到:对于运维系统来说,健康检查不是可选项,而是必选项。

本文将详细介绍 OpenClaw 系统中 Heartbeat(心跳/健康检查)功能的配置方法,包括检查频率、检查内容、告警阈值等关键参数,帮助你构建一个高效、可靠的健康检查体系。

什么是 Heartbeat

Heartbeat 是 OpenClaw 系统中的一项核心功能,用于定期检测各节点、容器、服务的运行状态。与传统的只检查”进程在不在”的简单监控不同,OpenClaw 的 Heartbeat 可以检查多个维度的健康状态,并在发现问题时尝试自动修复或触发告警。

Heartbeat vs 传统监控的区别

特性 传统监控 OpenClaw Heartbeat
检查频率 通常5分钟或更久 可精确到秒级
检查内容 进程或端口 多维度状态
自动修复 通常不支持 部分场景支持
告警集成 需要额外配置 内置支持
灵活性 固定模板 完全可配置

配置详解

1. 基础配置

Heartbeat 功能通过配置文件进行管理,基础配置项包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
heartbeat:
# 是否启用 Heartbeat 功能
enabled: true

# 检查间隔(单位:毫秒)
# 建议值:300000(5分钟)- 600000(10分钟)
interval: 300000

# 超时时间(单位:毫秒)
# 建议值:30000(30秒)
timeout: 30000

# 重试次数
# 建议值:3
retries: 3

# 重试间隔(单位:毫秒)
retryInterval: 10000

2. 检查目标配置

Heartbeat 可以检查多种类型的目标:

2.1 Gateway 节点检查

1
2
3
4
5
6
7
8
9
10
11
heartbeat:
targets:
- name: "vm151-gateway"
type: "gateway"
host: "192.168.102.151"
port: 18789
check:
- "进程状态"
- "端口监听"
- "Web UI 可访问性"
- "消息通道连接状态"

2.2 Docker 容器检查

1
2
3
4
5
6
7
8
9
10
heartbeat:
targets:
- name: "openclaw-container"
type: "docker"
container: "openclaw-gateway"
check:
- "容器运行状态"
- "端口映射"
- "资源使用率"
- "日志错误"

2.3 外部服务检查

1
2
3
4
5
6
7
8
9
heartbeat:
targets:
- name: "外部API"
type: "http"
url: "https://api.example.com/health"
check:
- "HTTP 状态码"
- "响应时间"
- "特定内容存在性"

3. 自动修复配置

Heartbeat 支持在检测到问题时自动尝试修复:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
heartbeat:
autoRepair:
# 是否启用自动修复
enabled: true

# 修复策略
strategies:
- condition: "进程不存在"
action: "重启服务"

- condition: "systemd服务不存在"
action: "重建服务配置"

- condition: "服务为disabled状态"
action: "启用开机自启"

- condition: "端口被占用"
action: "清理占用进程"

最佳实践

1. 检查频率设置

检查频率的选择需要平衡两个因素:

  • 及时性:频率越高,发现问题越快
  • 资源消耗:频率越高,对系统资源消耗越大

建议配置

环境 检查频率 说明
生产环境关键服务 1-5分钟 及时发现问题
生产环境普通服务 5-10分钟 平衡性能和及时性
测试环境 15-30分钟 资源优先

2. 检查内容设置

根据服务的重要性和特点,配置不同的检查内容:

核心服务检查清单

1
2
3
4
5
6
7
8
9
10
11
✓ 进程状态
systemd 服务状态
✓ 端口监听状态
✓ Web UI 可访问性
✓ 消息通道连接状态
✓ 磁盘空间
✓ 内存使用率
✓ CPU 使用率
✓ 日志错误关键词
✓ 关键配置文件存在性
✓ 证书有效期

轻量级服务检查清单

1
2
3
✓ 进程状态
✓ 端口监听状态
✓ 基本响应性

3. 告警阈值设置

合理的告警阈值能避免告警疲劳:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alerting:
# 磁盘使用率告警阈值
diskUsage:
warning: 80 # 80% 告警
critical: 90 # 90% 严重告警

# 内存使用率告警阈值
memoryUsage:
warning: 80
critical: 90

# CPU 使用率告警阈值
cpuUsage:
warning: 70
critical: 90

# 响应时间告警阈值(毫秒)
responseTime:
warning: 1000
critical: 5000

4. 告警通知配置

支持多种告警通知方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
alerting:
channels:
- type: "dingtalk"
enabled: true
webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"

- type: "email"
enabled: false
recipients:
- "[email protected]"

- type: "wecom"
enabled: true
webhook: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"

完整配置示例

以下是一个生产环境的完整 Heartbeat 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# OpenClaw Heartbeat 配置

heartbeat:
enabled: true
interval: 300000 # 5分钟检查一次
timeout: 30000
retries: 3
retryInterval: 10000

# 检查目标列表
targets:
# Gateway 节点检查
- name: "vm151-gateway"
type: "gateway"
host: "192.168.102.151"
port: 18789
enabled: true
check:
- "进程状态"
- "端口监听"
- "Web UI"
- "钉钉连接"
- "systemd服务状态"

- name: "vm152-gateway"
type: "gateway"
host: "192.168.102.152"
port: 18789
enabled: true
check:
- "进程状态"
- "端口监听"
- "Web UI"
- "钉钉连接"
- "systemd服务状态"

- name: "vps4-gateway"
type: "gateway"
host: "192.168.160.14"
port: 18789
enabled: true
check:
- "进程状态"
- "端口监听"
- "Web UI"
- "端口冲突检测"

# 自动修复策略
autoRepair:
enabled: true
strategies:
- condition: "systemd服务不存在"
action: "执行openclaw gateway install"

- condition: "服务为disabled状态"
action: "执行systemctl enable"

- condition: "端口被占用"
action: "清理旧进程"

- condition: "进程不存在"
action: "重启服务"

# 告警配置
alerting:
enabled: true

# 告警冷却时间(避免重复告警)
cooldown: 3600000 # 1小时冷却时间

channels:
- type: "dingtalk"
enabled: true
level: "critical"

# 资源监控
monitoring:
diskUsage:
warning: 80
critical: 90

memoryUsage:
warning: 80
critical: 90

cpuUsage:
warning: 70
critical: 90

高级配置技巧

1. 分层检查策略

对于复杂环境,可以配置多层检查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
heartbeat:
layers:
- name: "快速检查"
interval: 60000 # 1分钟
check:
- "进程状态"
- "端口监听"

- name: "深度检查"
interval: 300000 # 5分钟
check:
- "Web UI"
- "日志错误"
- "资源使用"

- name: "全面检查"
interval: 3600000 # 1小时
check:
- "配置文件完整性"
- "证书有效期"
- "磁盘健康"

2. 依赖检查策略

某些服务依赖其他服务,可以配置依赖关系:

1
2
3
4
5
6
7
8
9
10
11
heartbeat:
dependencies:
- name: "gateway依赖代理"
primary: "vm151-gateway"
secondary: "proxy-service"
checkOrder: "parallel" # 并行检查

- name: "应用依赖网关"
primary: "application-service"
secondary: "vm151-gateway"
checkOrder: "sequential" # 先检查依赖,再检查主服务

3. 灰度发布策略

在进行服务升级时,可以配置灰度检查:

1
2
3
4
5
6
7
8
9
heartbeat:
canary:
enabled: true
# 升级时先启动新版本
# 旧版本继续提供服务
# 新版本健康检查通过后,再切换流量
healthCheck:
duration: 600000 # 检查10分钟
threshold: 99 # 成功率必须>99%

常见问题解答

Q1:检查频率设置多少合适?

A:一般建议:

  • 关键服务:1-5分钟检查一次
  • 普通服务:5-10分钟检查一次
  • 非关键服务:15-30分钟检查一次

注意:检查太频繁会增加系统负担,太稀疏可能错过问题发现的最佳时机。

Q2:自动修复会不会有风险?

A:自动修复确实存在一定风险,建议:

  1. 先在测试环境验证自动修复逻辑
  2. 自动修复后记录日志,便于审计
  3. 对于高风险操作(如杀进程),建议设置确认机制
  4. 保留手动干预的能力

Q3:如何避免告警疲劳?

A:可以采用以下策略:

  1. 设置告警冷却时间,避免同一问题重复告警
  2. 分级告警:只对真正重要的问题发送即时通知
  3. 告警聚合:将短时间内多个同类告警合并为一个
  4. 静默期:在非工作时间设置告警静默

Q4:Heartbeat 和 Cron 任务有什么区别?

A:主要区别:

  • Heartbeat:专门用于健康检查,支持自动修复和告警
  • Cron:通用的定时任务执行器,适用于任何类型的定时任务

两者可以配合使用:Heartbeat 负责监控, Cron 负责执行其他定时任务。

Q5:如何监控 Heartbeat 本身是否正常工作?

A:可以:

  1. 配置外部监控系统(如 Prometheus)监控 Heartbeat
  2. 让外部监控系统定期调用 Heartbeat 的状态接口
  3. 如果 Heartbeat 状态接口超时或返回异常,触发告警

一键部署脚本

以下是一个快速部署 Heartbeat 配置的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
# OpenClaw Heartbeat 一键部署脚本

set -e

echo "开始部署 OpenClaw Heartbeat 配置..."

# 1. 创建配置目录
mkdir -p /opt/openclaw/config

# 2. 生成 Heartbeat 配置文件
cat > /opt/openclaw/config/heartbeat.yml << 'EOF'
# OpenClaw Heartbeat 配置
heartbeat:
enabled: true
interval: 300000
timeout: 30000
retries: 3
retryInterval: 10000

targets:
- name: "vm151-gateway"
type: "gateway"
host: "192.168.102.151"
port: 18789
enabled: true

- name: "vm152-gateway"
type: "gateway"
host: "192.168.102.152"
port: 18789
enabled: true

autoRepair:
enabled: true

alerting:
enabled: true

monitoring:
diskUsage:
warning: 80
critical: 90
EOF

# 3. 重启 OpenClaw Gateway
systemctl restart openclaw-gateway

# 4. 验证配置
echo "验证 Heartbeat 配置..."
sleep 5
curl -s http://localhost:18789/api/health

echo ""
echo "Heartbeat 配置部署完成!"

总结

本文详细介绍了 OpenClaw Heartbeat 的配置方法,包括:

  1. 基础配置:启用、间隔、超时等基本参数
  2. 检查目标:支持多种类型的检查目标(Gateway、容器、外部服务)
  3. 自动修复:可配置的自动修复策略
  4. 告警配置:多渠道告警通知
  5. 最佳实践:检查频率、告警阈值等建议值

合理的 Heartbeat 配置能帮助我们:

  • 早发现问题:缩短故障发现时间
  • 减少人工干预:自动化处理常见问题
  • 提高系统稳定性:多层防护,层层把关

希望本文对你有帮助。如果有问题,欢迎在评论区讨论。


作者:小六,一个在上海努力搬砖的程序员

Author:Margrop
Link:http://blog.margrop.com/post/2026-03-25-openclaw-heartbeat-config-guide/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可