22
33## 概述
44
5- 本文档为最新数据库设计,总计包含 7 张表:
5+ 本文档为最新数据库设计,总计包含 6 张表:
66
77- alert_issues
88- alert_issue_comments
9- - metric_alert_changes
9+ - alert_meta_change_logs
1010- alert_rules
11- - service_alert_metas
12- - service_metrics
11+ - alert_rule_metas
1312- service_states
1413
1514## 数据表设计
5150
5251---
5352
54- ### 3) metric_alert_changes(指标告警规则变更记录表 )
53+ ### 3) alert_meta_change_logs(阈值变更记录表 )
5554
56- 用于追踪指标类告警规则或参数的变更历史 。
55+ 用于追踪规则阈值(threshold)与观察窗口(watch_time)的变更历史 。
5756
5857| 字段名 | 类型 | 说明 |
5958| --------| ------| ------|
60- | id | varchar(64) PK | 变更记录 ID |
61- | change_time | TIMESTAMP(6) | 变更时间 |
62- | alert_name | varchar(255) | 告警名称/规则名 |
63- | change_items | json | 变更项数组:[ {key, old_value, new_value}] |
59+ | id | varchar(64) PK | 幂等/去重标识 |
60+ | change_type | varchar(16) | 变更类型:Create / Update / Delete / Rollback |
61+ | change_time | timestamptz | 变更时间 |
62+ | alert_name | varchar(255) | 规则名 |
63+ | labels | text | labels 的 JSON 字符串表示(规范化后) |
64+ | old_threshold | numeric | 旧阈值(可空) |
65+ | new_threshold | numeric | 新阈值(可空) |
66+ | old_watch | interval | 旧观察窗口(可空) |
67+ | new_watch | interval | 新观察窗口(可空) |
68+
6469
6570** 索引建议:**
6671- PRIMARY KEY: ` id `
7176
7277### 4) alert_rules(告警规则表)
7378
74- 定义可复用的规则表达式,支持作用域绑定。
75-
76- | 字段名 | 类型 | 说明 |
79+ | 字段名 | 类型 | 说明 |
7780| --------| ------| ------|
78- | id | varchar(255) PK | 规则 ID(可与 K8s 资源 ID 对应或做映射) |
79- | name | varchar(255) | 规则名称,表达式可读的名称 |
80- | scopes | varchar(255) | 作用域,例:"services: svc1 ,svc2" |
81- | expr | text | 规则表达式(可含占位符) |
82-
83- ** 索引建议:**
84- - PRIMARY KEY: ` id `
85- - INDEX: ` (name) `
86- - INDEX: ` (scopes) `
81+ |name|varchar(255)|主键,告警规则名称|
82+ |description|text|可读标题,可拼接渲染为可读的 title|
83+ |expr|text|左侧业务指标表达式,(通常对应 PromQL 左侧的聚合,如 sum(apitime) by (service, version))|
84+ |op|varchar(4)|阈值比较方式(枚举:>, <, =, !=)|
85+ |severity|varchar(32)|告警等级,通常进入告警的 labels.severity|
8786
88- ---
89-
90- ### 5) service_alert_metas(服务告警元数据表)
87+ ** 约束建议:**
88+ - CHECK 约束:` op IN ('>', '<', '=', '!=') `
9189
92- 按服务维度存放参数化配置,用于渲染具体规则。
90+ ⸻
9391
94- | 字段名 | 类型 | 说明 |
95- | --------| ------| ------|
96- | service | varchar(255) | 服务名 |
97- | key | varchar(255) | 参数名(如 ` apitime_threshold ` ) |
98- | value | varchar(255) | 参数值(如 ` 50 ` ) |
92+ ### 5) alert_rule_metas(规则阈值元信息表)
9993
100- ** 索引建议:**
101- - PRIMARY KEY: ` (service, key) `
102- - INDEX: ` (service) `
94+ 字段名 类型 说明
95+ alert_name varchar(255) 关联 ` alert_rules.name `
96+ labels jsonb 适用标签(示例:{"service":"s3","version":"v1"});为空 ` {} ` 表示全局
97+ threshold numeric 阈值(会被渲染成特定规则的 threshold metric 数值)
98+ watch_time interval 持续时长(映射 Prometheus rule 的 for:)
10399
104- ---
100+ ** 约束与索引建议:**
101+ - FOREIGN KEY: ` (alert_name) ` REFERENCES ` alert_rules(name) ` ON DELETE CASCADE
102+ - UNIQUE: ` (alert_name, labels) `
103+ - GIN INDEX: ` labels ` (` CREATE INDEX idx_metas_labels_gin ON alert_rule_metas USING gin(labels); ` )
105104
106- ### 6) service_metrics(服务指标清单表)
105+ ⸻
107106
108- 记录服务所关注的指标清单(可用于 UI 侧展示或校验)。
109-
110- | 字段名 | 类型 | 说明 |
111- | --------| ------| ------|
112- | service | varchar(255) PK | 服务名 |
113- | metrics | json | 指标名数组:[ "metric1", "metric2", ...] |
114-
115- ** 索引建议:**
116- - PRIMARY KEY: ` service `
107+ 说明:
108+ - labels 建议用 jsonb,方便在 Postgres 中做索引和查询。
109+ - labels 的键名与值格式应在应用层规范化(排序/小写/去空值)以确保唯一性和可查询性一致。
117110
118111---
119112
@@ -140,21 +133,18 @@ erDiagram
140133 alert_issues ||--o{ alert_issue_comments : "has comments"
141134
142135 alert_rules {
143- varchar id PK
144- varchar name
145- varchar scopes
136+ varchar name PK
137+ text description
146138 text expr
139+ varchar op
140+ varchar severity
147141 }
148142
149- service_alert_metas {
150- varchar service PK
151- varchar key PK
152- varchar value
153- }
154-
155- service_metrics {
156- varchar service PK
157- json metrics
143+ alert_rule_metas {
144+ varchar alert_name FK
145+ jsonb labels
146+ numeric threshold
147+ interval watch_time
158148 }
159149
160150 service_states {
@@ -184,14 +174,13 @@ erDiagram
184174 text content
185175 }
186176
187- %% 通过 service 逻辑关联
188- service_alert_metas ||..|| service_metrics : "by service "
189- service_states ||..|| service_alert_metas : "by service"
177+ %% 通过 service 等标签在应用层逻辑关联
178+ alert_rule_metas ||..|| alert_rules : "by alert_name "
179+ service_states ||..|| alert_rule_metas : "by service/version labels "
190180```
191181
192182## 数据流转
193183
194- 1 . 以 ` alert_rules ` 为模版,结合 ` service_alert_metas ` 渲染出面向具体服务的规则。
195- 2 . 指标或规则参数发生调整时,记录到 ` metric_alert_changes ` 。
196- 3 . 规则触发创建 ` alert_issues ` ;处理过程中的动作写入 ` alert_issue_comments ` 。
197- 4 . 面向服务的整体健康态以 ` service_states ` 记录和推进(new → analyzing → processing → resolved)。
184+ 1 . 以 ` alert_rules ` 为模版,结合 ` alert_rule_metas ` 渲染出面向具体服务/版本等的规则(labels 可为空 ` {} ` 表示全局默认,或包含如 service/version 等标签)。
185+ 2 . 指标或规则参数发生调整时,记录到 ` alert_meta_change_logs ` 。
186+ 3 . 规则触发创建 ` alert_issues ` ;处理过程中的动作写入 ` alert_issue_comments ` 。
0 commit comments