Heartbeat
Heartbeat 是 resident runtime 的运行检查。它记录 Anyy 是否在活跃运行,并监控失败的 cron jobs。它在 gateway 常驻运行时启动。
Heartbeat 不调用模型。它读取本地 state,更新 heartbeat meta record,并在发现新的 cron failure signature 时发布通知。
Heartbeat 状态
使用:
anyy heartbeat status
anyy heartbeat status --json
状态 payload 包含:
| 字段 | 含义 |
|---|---|
enabled | 配置中是否启用 heartbeat。 |
status | ok、degraded、disabled 或 unknown。 |
tick_interval | Gateway heartbeat loop 的运行间隔。 |
failure_cooldown | 失败通知状态中记录的 cooldown 值。 |
delivery_targets | 通知目标,默认 gateway。 |
actor_id | 固定为 heartbeat。 |
role_id / workspace_id | Heartbeat 通知使用的 scope。 |
last_tick_at | 最近一次成功 tick 的时间。 |
last_notification_at | 最近一次 cron 失败通知时间。 |
cron_failed_jobs | 最近状态为 failed 的 enabled cron jobs 数量。 |
anyy status --json 和 gateway status RPC 也会把 heartbeat status 和 cron、channels、MCP、storage、gateway listener 摘要一起返回。
配置
Heartbeat 配置位于 heartbeat:
heartbeat:
enabled: true
tick_interval: 1m
failure_cooldown: 15m
delivery_targets:
- gateway
role_id: home
workspace_id: default
默认值:
| 字段 | 默认 | 含义 |
|---|---|---|
enabled | true | Gateway 运行时启动 heartbeat。 |
tick_interval | 1m | 两次 tick 之间的间隔。 |
failure_cooldown | 15m | 和失败通知状态一起存储的 cooldown 值。 |
delivery_targets | ["gateway"] | Heartbeat 通知目标。 |
role_id | home | Heartbeat event 的 role scope。 |
workspace_id | default | Heartbeat event 的 workspace scope。 |
Duration 接受 30s、1m、15m 这类 Go duration 字符串。兼容字段
tick_interval_seconds 和 failure_cooldown_seconds 也被接受。
Runtime 事件
每次 tick 时,heartbeat 会:
- 读取之前的
heartbeatstate record。 - 扫描 enabled cron jobs 中
last_status: failed的任务。 - 发现新的 failure signature 时发布一条通知。
- 保存新的 heartbeat state,包含 liveness 和 failure metadata。
通知标题是 Anyy heartbeat。消息会指出最近失败的 cron job。
Heartbeat notification 的 scope metadata:
| Metadata | 值 |
|---|---|
source | heartbeat |
actor_id | heartbeat |
role_id | 配置的 role id,默认 home。 |
workspace_id | 配置的 workspace id,默认 default。 |
写入当前 state record 时,heartbeat 会移除旧的 user_id、agent_id 和 deliver 字段。
可观测性
当 heartbeat status 缺失、过旧或 degraded 时,使用 anyy doctor。Doctor 输出会基于同一份 status payload 包含 heartbeat probe。
常见检查:
| 现象 | 检查 |
|---|---|
status 是 unknown | Gateway 可能尚未 tick,或者 state database 是新的。 |
status 是 disabled | heartbeat.enabled 为 false。 |
status 是 degraded | Cron failure 扫描或通知投递返回了错误。 |
last_tick_at 过旧 | 确认预期 home/profile 的 resident gateway 正在运行。 |
Heartbeat 是 profile-local 的。如果使用多个 profile 或 --home,请对运行 resident gateway 的同一个 home 执行 status 命令。