feat(monitor): F6 日志告警引擎 — AlertEngine 支持 type=log 规则查询Loki/ES+触发/恢复 + 数据源认证升级(none/basic/bearer/custom) + 从查询创建告警真实API对接

This commit is contained in:
attacker committed 2026-06-28 04:00:38 +08:00
1 parent 894cb16a05
commit 6bba6144f3
17 files changed
+657 -74

No files matched your search

+28
View File
@@ -318,6 +318,33 @@ services/api.ts (1324L)
**问题**: `dashboardApi`(Grafana 仪表盘 CRUD)6 个方法全部为 mock 桩,返回空数组/false。前端 `GrafanaDashboard.tsx` 的"自定义"Tab 有完整 UI 但无法创建/保存仪表盘,面板渲染随机 mock 数据。
### F6: 日志告警引擎 [done]
**问题**: 日志中心有完整查询 UI 和「日志告警」菜单项,但告警规则引擎不支持 `type="log"` 类型规则。用户无法将日志查询转化为告警(如「检测到 ERROR 日志即触发通知」)。日志数据源仅支持 BasicAuth,无法对接需要 Bearer Token 或自定义 Header 的 Loki/ES。
**已完成 (2026-06-28)**:
- ✅ **后端告警引擎扩展** — `AlertEngine` 新增 `checkLogAlertRules()` 方法:查询 `type="log"` 的告警规则,通过数据源查询 Loki/ES,查询结果 >0 即触发告警事件(含防重复 + 静默检查 + 通知推送)
- ✅ **自动恢复** — `checkLogAlertRecovery()`:日志告警事件在查询结果归零时自动标记 resolved 并发送恢复通知
- ✅ **多数据源支持** — `queryLogDataSource()` 支持 Loki(`/loki/api/v1/query_range`)和 Elasticsearch(`_search` + 双时间戳字段兼容 `@timestamp`/`timestamp`)
- ✅ **日志数据源认证升级** — `LogDataSource` 模型新增 `auth_type`/`token`/`headers` 字段(none/basic/bearer/custom 四种认证),`applyLogDSAuthV2()` 统一认证逻辑,向后兼容旧 `basic_auth` 字段
- ✅ **AlertEngine 注入 LogDSHandler** — `NewAlertEngine(db, cache, ds)` 新增第三参数,引擎通过 LogDSHandler 加载数据源执行查询
- ✅ **前端告警规则弹框** — `AlertRuleDialog` 日志类型规则动态加载对应数据源列表(Loki/ES),绑定 `datasource_id`
- ✅ **从查询创建告警** — `LogAlertFromQueryDialog` 从 mock 桩改为真实 API 调用(`alertApi.createRule`),支持将当前日志查询一键转化为告警规则
- ✅ **数据源弹框增强** — `LogDatasourceDialog` 支持认证方式选择(无认证/Basic Auth/Bearer Token/自定义 Headers)
- ✅ **ES 代理错误分类** — `logProxyErrStatus`/`logProxyErrCategory` 将 ES 4xx/5xx 错误映射为标准化响应(含 category 字段供前端区分)
**验收标准**:
- [x] 可创建 `type="log"` 告警规则,绑定 Loki/ES 数据源 + 查询表达式
- [x] 引擎周期性执行日志查询,结果 >0 触发告警事件(防重复 + 静默检查)
- [x] 日志告警可自动恢复(查询结果归零 → resolved + 恢复通知)
- [x] 日志数据源支持 none/basic/bearer/custom 四种认证方式
- [x] `AlertEngine` 注入 `LogDSHandler` 不破坏分布式锁(is_leader/distributed 正常)
- [x] 前端「从查询创建告警」真实调用后端 API(非 mock)
- [x] `go build` 零错误
- [x] `npm run build` 零错误(✓ built in 18.57s)
- [x] 17/17 集成回归测试通过
- [x] 引擎无 panic(无效 datasource_id 优雅跳过)
### F5: 链路追踪后端对接 [done]
**问题**: `traceApi`(链路追踪)3 个方法全部为 mock 桩返回空数组。前端 `TraceManager.tsx`(587 行)有完整 UI(Trace 列表/服务拓扑/性能指标/详情弹窗/Span 树可视化)但无数据展示。
@@ -383,6 +410,7 @@ services/api.ts (1324L)
| U3 | 国际化 | P3 | **done** |
| U4 | 镜像优化 | P3 | **done** |
| F5 | 链路追踪后端对接 | P1 | **done** |
| F6 | 日志告警引擎 | P1 | **done** |
---