Skip to content

Commit af45248

Browse files
committed
feat(Metrics&Alert): 新增规则与阈值管理的表结构,核心接口,编排流程,与初步实现
1 parent 5b521c8 commit af45248

File tree

10 files changed

+920
-65
lines changed

10 files changed

+920
-65
lines changed

docs/alerting/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ GET /v1/issues/{issueID}
126126
|--------|------|------|
127127
| id | string | 告警问题唯一标识 |
128128
| state | string | 告警工单的生命周期状态状态:`Open``Closed` |
129-
| level | string | 告警等级:`P0``P1``P2``Warning` |
129+
| level | string | 告警等级:`P0``P1``P2` |
130130
| alertState | string | 告警本身的实时状态:`Pending``Restored``AutoRestored``InProcessing` |
131131
| title | string | 告警标题描述 |
132132
| labels | Label[] | 标签数组 |

docs/alerting/database-design.md

Lines changed: 53 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
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
## 数据表设计
@@ -51,16 +50,22 @@
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`
@@ -71,49 +76,37 @@
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

Comments
 (0)