步骤4阶段1 D2执行方案 最终确认版

源文件:D:\Hermes\reports\步骤4阶段1_D2执行方案_最终确认版.md · 日期 2026-09-14 · 3KB

D2执行前最后修正(最终确认版)

日期: 2026-09-14
状态: 等待用户最终确认


关键发现:Dead-Man测试机制确认

heartbeat_watchdog.py不检查alert_channel_health ✅

# heartbeat_watchdog.py关键代码
TASKS_FILE = "heartbeat_watchdog_tasks.json"  # 自定义任务列表
STATE_FILE = "heartbeat_watchdog_state.json"

# 它检查的是TASKS_FILE中定义的任务
# 不是channel_health表
# 不监控alert_channel_health本身

Dead-Man测试的实际逻辑

alert_channel_health.py:
  - 每15分钟检查5个任务的心跳
  - 写入channel_health表(自己的心跳)
  - 检查超时/死人的任务并写入alerts表

heartbeat_watchdog.py:
  - 每小时运行一次
  - 检查TASKS_FILE中定义的任务
  - 不检查alert_channel_health的心跳

结论:
  - 暂停alert_channel_health → channel_health停止更新
  - 但heartbeat_watchdog不会检测这个
  - 需要验证alert_channel_health自己是否检查"死机"

任务1:修正Dead-Man测试方案 ⚠️

问题

原方案假设:
  暂停alert_channel_health → heartbeat_watchdog检测到心跳停止 → 触发告警

实际情况:
  heartbeat_watchdog不监控alert_channel_health
  暂停alert_channel_health不会触发heartbeat_watchdog告警

修正方案

方案A:直接修改alert_channel_health的心跳记录

步骤:
  1. 手动将channel_health表中alert_channel_health的last_check_time设为2小时前
  2. 等待下一次alert_channel_health运行(每15分钟)
  3. 验证是否触发Dead-Man告警(检查alerts表)

优点: 无需暂停cron,安全可控
缺点: 需要直接操作数据库

方案B:验证alert_channel_health的自检测能力

步骤:
  1. 检查alert_channel_health.py是否有"检查自己心跳"的逻辑
  2. 如果有,暂停cron 30分钟即可触发
  3. 如果没有,使用方案A

建议: 先读取alert_channel_health.py确认

任务2:修正Dead-Man触发时间 ✅

当前时间线

17:25  准备测试(打印时间戳)
17:26  决定方案(A或B)
17:27  执行方案
       ↓
  [等待15-30分钟]
       ↓
17:45  验证告警结果
17:50  恢复状态(清理测试数据)
18:00  测试完成

任务3:21:00任务冲突确认 ⚠️

共振桥接器和选股台账

21:00运行的任务:
  - 共振桥接器每日流水线 (725902f0)
  - 选股台账静默检查 (6b235078)

风险:
  - 如果它们读写alert_state.db的channel_health表,可能干扰测试
  - 如果它们只读不写,则无冲突

建议:
  - 受控测试推迟到21:45后(避开21:00任务)
  - 或先确认这两个脚本的行为

任务4:D2最终时间表(修正版)

时段 任务 内容
17:25-18:00 Dead-Man测试 方案确认→执行→验证→恢复
21:45-22:30 受控测试前3项 告警路径、超时路径、通道健康
22:30-23:00 影子cron集成 B3临时替换
23:00-23:30 回归验证 清理+确认

待确认问题

□ 1. Dead-Man测试用方案A(改DB)还是方案B(确认自检测能力)?
□ 2. 共振桥接器和选股台账是否读写alert_state.db?
□ 3. 受控测试是否推迟到21:45后?

⏳ 等待用户确认...

请确认以上修正,回复"进入D2"启动明天执行。