Margrop
Articles222
Tags394
Categories23
1password AC AI AP API AppDaemon Aqara Caddy Cookie 认证 Cron Date Diagrams.net Docker HA HADashboard HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Markdown MiniMax MySQL NAS Nginx Node.js OpenAI OpenClaw OpenResty PPPoE PostgreSQL ProcessOn Prometheus Proxmox VE SOCKS5 SSL Shell TTS TimeMachine UML Uptime Kuma VPN VPS Web Windows activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https idea image img img2kvm import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 代理 健康检查 光猫 公网IP 内存 内网IP 升级 反向代理 启动 夏令时 天猫精灵 天翼云 安全 安装 定时任务 容器 导入 小米 常用软件 广告屏蔽 序列号 应用市场 异常 打工 技术 抓包 描述文件 故障 故障排查 效率工具 日记 时区 显卡虚拟化 智能家居 智能音箱 梯子 模块 流程 流程图 浏览器 漫游 激活 火绒 玄学 电信 画图 监控 直播源 端口扫描 续期 网关 网络 网络风暴 群晖 脚本 腾讯 自动化 虚拟机 认证 证书 语雀 超时 路由 路由器 软件管家 软路由 运维 运维监控 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客

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 协议进行许可