fix: intraday_health_check + system_audit信号堆积监控盲区 — 增加全量未处理查询(非仅xiaoguo)

This commit is contained in:
知微
2026-07-09 10:50:50 +08:00
parent 77150c37d0
commit d2fe7e771f
4 changed files with 34 additions and 5 deletions
+5
View File
@@ -22,6 +22,11 @@ xiaoguo_signal_consumer 仅处理今日信号(`date(created_at)=today`),
- 盘中健康检查不会再因过期信号误报堆积
- 信号管道只监控时效内的处理速度
### [2026-07-09 跟进] 监控盲区修复
- **发现**: intraday_health_check 和 system_audit 仅监控 source LIKE 'xiaoguo%',完全忽略 divergence_watch(80条)、trend(46条) 等来源信号积压
- **修复**: 两端都增加全量未处理查询(total_unproc),区分 xiaoguo 和其他来源分别报告
- **遗留**: divergence_watch/trend 信号无 consumer,属于数据归档而非管道积压,继续积累但健康检查能看见了
## 2026-07-03 — 代码重构
### 删除重复文件
+12 -1
View File
@@ -1,9 +1,20 @@
# analyst-knowledge-log.md
## [2026-07-08 10:40] 自愈执行器升级处理:KOSDAQ-4.1% HIGH信号
## [2026-07-09 10:40] 自愈执行器升级处理:KOSDAQ-4.1% HIGH信号
- **发现**: 自愈执行器上报盘中自检发现宏观风险HIGH(KOSDAQ-4.1% + 中信证券研报)
- **判断**: 系统无故障,已知市场条件延续。KOSDAQ-4.1%是昨日KOSPI暴跌的延续,非新事件。中信证券研报是采集器误报(正常行业研报)。
- **数据验证**: 中国各指数全面脱钩改善(上证-1.26%→+0.02%,恒生-0.51%→+1.69%,科创50+0.28%→+0.62%)。持仓止损距均>3%。
- **操作**: 标记已知状态,无需新推送。08:30 LLM深度分析已覆盖并修正。
- **涉及文件**: macro_risk_state.json(已由consumer更新为processed
## [2026-07-09 14:xx] 自愈执行器升级:信号堆积38条
- **发现**: 盘中自检触发「信号堆积: 38条未处理(需<30)」告警,自愈执行器无自动修复方案,升级到LLM处理
- **调查**: 38条为 xiaoguo 来源信号,属4h时效内积压。当前已完成消费(xiaoguo_signal_consumer每30分运行),积压自愈
- **监控盲区发现**: intraday_health_check.py 和 system_audit.py 均只监控 `source LIKE 'xiaoguo%'`,忽略 divergence_watch(80)、trend(46) 等来源的126条未处理信号
- **修复**: 两处均增加全量未处理查询,区分 xiaoguo 和其他来源分别报告
- **涉及文件**:
- `scripts/intraday_health_check.py` — check_signal_pipeline: 增加 total_unproc 查询和非xiaoguo预警
- `scripts/system_audit.py` — audit_signals: 增加 total_unproc 查询和MEDIUM级别溢出预警
- `CHANGELOG.md` — 追记监控盲区修复
+10 -2
View File
@@ -165,15 +165,23 @@ def check_gateways():
def check_signal_pipeline():
"""信号从xiaoguo_scanner→signal_news→consumer是否通畅"""
unproc = 0
total_unproc = 0
try:
conn = sqlite3.connect(str(DB_PATH))
# 只检查时效内的信号堆积(4小时以内),过期信号不被消费者处理但仍会计入堆积
# xiaoguo 信号堆积(4h以内时效)
r = conn.execute("SELECT COUNT(*) FROM signal_news WHERE source LIKE 'xiaoguo%' AND (processed=0 OR processed IS NULL) AND created_at > datetime('now', '-4 hours')").fetchone()
unproc = r[0]
# 全量未处理信号(跨来源)
r2 = conn.execute("SELECT COUNT(*) FROM signal_news WHERE (processed=0 OR processed IS NULL)").fetchone()
total_unproc = r2[0]
conn.close()
except:
pass
log(unproc < 30, f"信号堆积: {unproc}条未处理(需<30")
log(unproc < 30, f"xiaoguo信号堆积: {unproc}条未处理(需<30")
# 其他来源信号积压预警
other = total_unproc - unproc
if other > 50:
log(False, f"其它来源信号积压: {other}条未处理(divergence_watch/trend等无consumer")
# 宏观风险状态检查
try:
+7 -2
View File
@@ -42,10 +42,15 @@ def audit_signals(conn):
try:
total = conn.execute("SELECT COUNT(*) FROM signal_news").fetchone()[0]
unproc = conn.execute("SELECT COUNT(*) FROM signal_news WHERE source LIKE 'xiaoguo%' AND (processed=0 OR processed IS NULL) AND created_at > datetime('now', '-4 hours')").fetchone()[0]
total_unproc = conn.execute("SELECT COUNT(*) FROM signal_news WHERE (processed=0 OR processed IS NULL)").fetchone()[0]
today = conn.execute("SELECT COUNT(*) FROM signal_news WHERE created_at > datetime('now','-1 day')").fetchone()[0]
log_ok("信号管道", f"信号库{total}条,今日{today}条,未处理{unproc}")
log_ok("信号管道", f"信号库{total}条,今日{today}条,未处理{total_unproc}条(xiaoguo={unproc})")
if unproc > 30:
log_issue("信号管道", "HIGH", f"未处理信号堆积{unproc}条,可能处理速度跟不上")
log_issue("信号管道", "HIGH", f"xiaoguo信号堆积{unproc}条,可能处理速度跟不上")
# 检查其他来源信号积压(无consumer的信号源)
other = total_unproc - unproc
if other > 50:
log_issue("信号管道", "MEDIUM", f"其它来源信号积压{other}条(divergence_watch/trend等,可能无consumer")
except Exception as e:
log_issue("信号管道", "HIGH", f"查询失败: {e}")