chore: add hourly runtime slo soak monitor

This commit is contained in:
Your Name
2026-07-02 12:45:55 +08:00
parent f9a385f333
commit 8e0ace1389
5 changed files with 139 additions and 7 deletions
@@ -30,7 +30,7 @@
- P8.1 Queue Lease / Stuck Run Recovery: 已完成第一步,worker dispatch 前自动回收超时 running run,新增 `--recover-stale` dry-run/apply 运维入口,生产 synthetic stale run 验证通过。
- P8.2 Portal DB/Auth Transient Error Hardening: 已完成第一步,session attach、`/auth/status` 和 API auth middleware 已捕获 DB/auth 瞬时错误,生产部署后 live health、auth/status、runtime/status、guard 和 SLO 验证通过。
- P8.3 Worker Lease Heartbeat: 已完成第一步,running run 执行期间写入 `worker_heartbeat` eventruntime/status、worker check、guard 和 stale recovery 均优先使用 heartbeat age,生产 synthetic 与真实 worker canary 验证通过。
- P8.4 Long-running Gray Soak and Heartbeat SLO: 已完成第步,runtime SLO JSON/Markdown 报告加入 agent-run heartbeat 摘要和 failure 条件,生产只读与临时报表写入验证通过;继续保持并发 2 soak,不扩大灰度。
- P8.4 Long-running Gray Soak and Heartbeat SLO: 已完成第步,runtime SLO JSON/Markdown 报告加入 agent-run heartbeat 摘要和 failure 条件,并安装独立小时级 soak 快照;继续保持并发 2 soak,不扩大灰度。
- P5.15 Active Stream TTL Reconcile: 已按用户要求跳过,暂不做报表/定时 reconcile。
- P5 Worker Pool 运维化: 已完成第一步,Redis Router 支持 worker drain。
- P5.9 First-token Latency EWMA: 已完成,StreamController 会把首个 SSE chunk 延迟写入 RedisSLO 报告已展示。
@@ -3022,7 +3022,7 @@ runtime/status:
- 不扩大并发、不做 UI,先把 P8.3 heartbeat 纳入每日 SLO 报告。
- 让 23:55 定时日报和手动 `runtime-slo-report.mjs` 都能暴露 running heartbeat 风险。
-后续 24h all-user gray soak 提供稳定观测字段。
- 为 24h all-user gray soak 提供稳定观测字段和小时级留存证据
改动:
@@ -3048,10 +3048,19 @@ runtime/status:
- 记录 `MEMIND_AGENT_RUN_HEARTBEAT_STALE_MS=90000`
- `docs/agent-run-worker-rollout-runbook.md`:
- 记录 heartbeat SLO 检查命令和期望字段。
- `scripts/install-runtime-slo-soak-agent.sh`:
- 新增独立 LaunchAgent installer。
- 默认 label `cn.tkmind.memind-runtime-slo-soak`
- 默认 `StartInterval=3600`
- 默认写入 `reports/runtime-slo-soak`
- 默认保留 `7` 天。
- `scripts/build-portal-runtime.mjs`:
- runtime artifact 会同步并 chmod soak installer。
测试:
- `node --check scripts/runtime-slo-report.mjs` 通过。
- `bash -n scripts/install-runtime-slo-soak-agent.sh` 通过。
- `node --check scripts/runtime-slo-report.mjs scripts/build-portal-runtime.mjs` 通过。
- 源码目录只读 SLO:
- `ok=true`
- `failures=[]`
@@ -3062,13 +3071,20 @@ runtime/status:
- 备份:
- `/Users/john/Project/memind_backups/20260702-123947-p84-heartbeat-slo`
- `/Users/john/Project/memind_backups/20260702-124520-p84-hourly-soak`
- 已部署:
- `scripts/runtime-slo-report.mjs`
- `scripts/install-runtime-slo-soak-agent.sh`
- 未重启 Portal、worker、goosed 或 H5。
- 现有 SLO LaunchAgent 保持:
- `cn.tkmind.memind-runtime-slo-report`
- 每日 `23:55`
- `--write-report --prune --retention-days 30`
- 新增 soak LaunchAgent:
- `cn.tkmind.memind-runtime-slo-soak`
- `StartInterval=3600`
- `--write-report --prune --retention-days 7`
- report dir `/Users/john/Project/Memind/reports/runtime-slo-soak`
生产验证:
@@ -3082,6 +3098,11 @@ runtime/status:
- 临时 report-dir 写入验证:
- JSON 和 Markdown 均生成成功。
- 两种格式均包含 `heartbeatMs``oldestRunningHeartbeatAgeMs``runningWithoutHeartbeatCount`
- soak 快照验证:
- LaunchAgent 已加载。
- 首次 kickstart 快照已写入 JSON/Markdown。
- 最新快照 `ok=true`, `failures=[]`
- JSON/Markdown 均包含 heartbeat summary。
## 回滚策略