融合监控告警体系能力报告

源文件:D:\Hermes\reports\融合监控告警体系能力报告.md · 日期 2026-09-14 · 11KB

融合监控告警体系能力报告

报告日期: 2026-09-14
体系版本: v1.0
状态: D2测试验证中


一、体系架构

1.1 核心组件

┌─────────────────────────────────────────────────────────────────┐
│                        融合监控告警体系                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌──────────────────┐      ┌──────────────────┐                │
│  │ alert_channel    │      │   dead_mans      │                │
│  │ _health.py       │◄─────│ _switch.py       │                │
│  │ (通道健康监控)    │      │   (看门狗)        │                │
│  └────────┬─────────┘      └────────┬─────────┘                │
│           │                         │                           │
│           └──────────┬──────────────┘                           │
│                      ▼                                          │
│         ┌────────────────────────────┐                          │
│         │      alert_utils.py        │                          │
│         │  - send_tg()  (TG告警)     │                          │
│         │  - record_alert() (写表)   │                          │
│         │  - check_silence() (静默)  │                          │
│         └──────────────┬─────────────┘                          │
│                        ▼                                        │
│         ┌────────────────────────────┐                          │
│         │     alert_state.db         │                          │
│         │  - alerts表 (告警记录)      │                          │
│         │  - task_runs表 (运行记录)   │                          │
│         │  - channel_health表 (心跳)  │                          │
│         │  - silence_state表 (静默)   │                          │
│         │  - audit_log表 (审计日志)   │                          │
│         └────────────────────────────┘                          │
│                        ▲                                        │
│                        │                                        │
│         ┌──────────────┴──────────────┐                        │
│         │    run_with_alert.py        │                        │
│         │  (包装脚本,添加告警能力)    │                        │
│         └─────────────────────────────┘                        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1.2 数据流

任务运行 → run_with_alert.py → 成功/失败 → TG告警 + 写库
                              ↓
                         alert_utils.py
                              ↓
                         alert_state.db

心跳机制:
alert_channel_health.py → 每15分钟 → channel_health表
                              ↓
                     dead_mans_switch.py → 每小时检查
                              ↓
                     超时30分钟 → TG告警 + 本地文件

二、预期能力

2.1 监控能力

能力 说明 覆盖范围
任务状态监控 检测任务失败、超时、异常 5个agent-mode任务 + 所有script-mode任务
心跳监控 监控监控组件自身健康 alert_channel_health心跳
看门狗机制 心跳停止30分钟触发告警 dead_mans_switch独立运行
多级告警 P0/P1/P2/P3分级处理 按任务重要性分级
静默管理 防止告警风暴 P0不静默,P1静默5分钟

2.2 告警能力

能力 说明 触达方式
TG实时告警 Telegram Bot推送 即时消息
邮件备份 SMTP邮件发送 异步备份(可选)
本地文件 写入alert.txt 持久化记录
数据库记录 alerts表存储 可查询追溯
恢复通知 任务恢复时通知 完整闭环

2.3 数据能力

能力 说明 表名
告警记录 所有告警事件 alerts
运行记录 任务执行历史 task_runs
心跳记录 监控组件健康 channel_health
静默状态 防风暴计数 silence_state
审计日志 系统操作追踪 audit_log

2.4 运维能力

能力 说明 价值
热替换测试 B3影子cron模式 不中断生产测试新功能
双备份回滚 jobs.json + alert_state.db 快速恢复
时间戳标记 测试告警区分 避免误判
标准化接口 alert_utils统一调用 降低集成成本

三、如何使用新体系

3.1 为任务添加告警能力

方式A:使用run_with_alert包装(推荐)

# 原cron命令
python hb_morning_eval.py

# 改为包装模式
python run_with_alert.py eval_morning hb_morning_eval.py

配置步骤:
1. 在jobs.json中找到目标任务的command字段
2. 修改为:python run_with_alert.py <task_id> <script_path>
3. 在TASK_LEVELS中配置优先级(P0/P1/P2)

示例:

{
  "name": "盘前评估",
  "command": "python run_with_alert.py eval_morning C:/.../hb_morning_eval.py",
  "schedule": {"expr": "0 6 * * 1-5"}
}

方式B:保持原样(已有监控覆盖)

已监控的5个agent-mode任务(通过alert_channel_health轮询):
  - position_688306 (P0, 持仓监控)
  - ops_system_health (P1, 系统自检)
  - ops_backup_daily (P1, 备份检查)
  - risk_sentiment_radar (P1, 风险雷达)
  - eval_pias_daily (P1, PIAS评估)

3.2 查看告警记录

# 查看所有告警
sqlite3 D:/Hermes/data/state/alert_state.db "SELECT * FROM alerts ORDER BY created_at DESC LIMIT 20;"

# 查看任务运行历史
sqlite3 D:/Hermes/data/state/alert_state.db "SELECT * FROM task_runs WHERE task_id='eval_morning' ORDER BY start_time DESC LIMIT 10;"

# 查看心跳状态
sqlite3 D:/Hermes/data/state/alert_state.db "SELECT * FROM channel_health ORDER BY check_time DESC LIMIT 5;"

# 查看看门狗告警文件
cat D:/Hermes/data/state/dead_mans_switch_alert.txt

3.3 配置任务优先级

编辑 run_with_alert.py 中的 TASK_LEVELS:

TASK_LEVELS = {
    # P0(立即告警,不静默)
    "ops_heartbeat_watchdog": "P0",
    "eval_morning": "P0",
    "data_risk_radar_morning": "P0",
    "report_pre_market": "P0",

    # P1(连续2次失败告警,静默5分钟)
    "quality_ic_monitor": "P1",
    "eval_war_room": "P1",
    "risk_capital_watchdog": "P1",

    # 其他任务默认P2
}

3.4 手动触发监控

# 手动运行通道健康检查
hermes cron run 7e8ae2aeca81 --run-now

# 手动运行看门狗检查
hermes cron run <dead_mans_switch_cron_id> --run-now

# 手动运行包装任务
python run_with_alert.py eval_morning hb_morning_eval.py

3.5 回滚操作

# 回滚jobs.json
cp C:/Users/Admin/AppData/Local/hermes/cron/jobs.json.bak_20260913 \
   C:/Users/Admin/AppData/Local/hermes/cron/jobs.json

# 回滚alert_state.db
cp D:/Hermes/data/state/alert_state.db.bak_D2_20260915 \
   D:/Hermes/data/state/alert_state.db

# 恢复暂停的cron
hermes cron resume 7e8ae2aeca81 --run-now
hermes cron resume a7e2b8dceefe --run-now

四、使用场景示例

场景1:任务失败告警

原脚本: hb_morning_eval.py
问题: 脚本执行失败,用户不知道

使用新体系后:
1. run_with_alert.py包装执行
2. 检测到exit_code非0
3. 发送TG告警: "🔴 [P0] eval_morning 失败"
4. 写入alerts表
5. 写入audit_log
6. 用户立即收到通知

场景2:心跳停止告警

原状态: alert_channel_health卡死,无告警

使用新体系后:
1. alert_channel_health停止写心跳
2. dead_mans_switch每小时检查
3. 检测到心跳超时30分钟
4. 发送TG告警: "🔴 [看门狗] 心跳超时"
5. 写入本地文件: dead_mans_switch_alert.txt
6. 发送邮件(如配置SMTP)

场景3:防告警风暴

问题: 任务持续失败,每分钟告警一次

使用新体系后:
1. P0任务:每次失败都告警(重要任务)
2. P1任务:第一次失败静默,第二次失败告警
3. 告警后静默5分钟(P1)
4. 避免手机持续震动

场景4:热替换测试

需求: 测试新的告警逻辑,不影响生产

使用新体系后:
1. 创建影子cron任务
2. 指向测试脚本
3. 与原cron并行运行
4. 比对输出结果
5. 确认无误后切换
6. 删除影子任务

五、D2验证目标

测试项 验证内容 通过标准
Dead-Man测试 心跳停止30分钟触发告警 dead_mans_switch_alert.txt有记录 + TG收到告警
告警路径测试 任务超时触发告警 alerts表有记录 + TG收到告警
超时路径测试 timeout_threshold_s生效 正确识别超时任务
通道健康测试 心跳记录正常 channel_health表持续更新
B3集成测试 run_with_alert包装功能 6项指标全部通过
回归验证 系统恢复正常 所有cron active,无残留测试数据

六、后续演进方向

6.1 短期(1-2周)

□ 扩展监控任务列表(目前只覆盖5个agent-mode任务)
□ 配置SMTP邮件备份(目前未配置)
□ 优化静默期策略(根据实际告警频率调整)
□ 添加告警聚合功能(同类告警合并)

6.2 中期(1个月)

□ 集成到war_room看板(实时监控面板)
□ 添加告警统计报表(周/月报)
□ 支持多Telegram群分发
□ 添加告警升级机制(P1→P0自动升级)

6.3 长期(3个月)

□ AI辅助告警分析(根因定位)
□ 预测性维护(基于历史数据预测故障)
□ 自动化修复(常见故障自动恢复)
□ 多渠道告警(SMS/钉钉/企业微信)

七、总结

7.1 核心价值

1. 全覆盖监控: 从任务级到组件级,双层保障
2. 实时可达: TG即时推送,关键时刻不错过
3. 可追溯: 完整审计日志,问题定位有据可依
4. 易集成: 统一接口,新任务快速接入
5. 可测试: 影子cron模式,安全验证新功能

7.2 使用门槛

✓ 已有D1观察数据(90次运行验证稳定性)
✓ 双重备份机制(降低风险)
✓ 明确的时间表(可控执行)
✓ 完善的回滚方案(可逆操作)

7.3 下一步

D2测试通过 → 扩展监控范围 → 配置邮件备份 → 集成war_room看板

报告路径: D:/Hermes/reports/融合监控告警体系能力报告.md

问题反馈: 请在TG频道"上书房行走"反馈使用体验