1- # Prometheus Adapter 模块文档
1+ # Prometheus Adapter
2+
3+ 基于 Prometheus 的指标查询与告警规则同步适配层,提供统一的 REST API:
4+ - 按服务与版本查询任意 Prometheus 指标
5+ - 同步告警规则到 Prometheus 并触发重载
6+
7+ 目录
8+ - 概述
9+ - 快速开始
10+ - 架构设计
11+ - API 参考
12+ - 指标查询
13+ - 告警规则同步
14+ - Alertmanager 集成
15+ - 支持的服务
16+ - 错误码
217
318## 概述
419
5- Prometheus Adapter 提供从 Prometheus 获取服务指标的 RESTful API 接口。支持按服务名称和版本进行查询。
20+ Prometheus Adapter 作为内部系统与 Prometheus 之间的适配层:
21+ - 向上暴露简洁、统一的 HTTP API
22+ - 向下负责 PromQL 查询与 Prometheus 规则文件管理
623
724## 架构设计
825
9- ### 模块结构
26+ - 分层设计
27+ - API 层(` internal/prometheus_adapter/api ` ):HTTP 请求处理、参数校验、错误格式化
28+ - Service 层(` internal/prometheus_adapter/service ` ):业务逻辑、指标与服务存在性校验、数据装配
29+ - Client 层(` internal/prometheus_adapter/client ` ):与 Prometheus API 交互、PromQL 构建、结果转换
30+ - Model 层(` internal/prometheus_adapter/model ` ):统一数据模型、错误类型、常量
1031
32+ - 目录结构
1133```
1234internal/prometheus_adapter/
13- ├── server.go # 服务器主入口,负责初始化和生命周期管理
14- ├── api/ # API 层,处理 HTTP 请求
15- │ ├── api.go # API 基础结构和初始化
16- │ └── metric_api.go # 指标相关的 API 处理器
17- ├── service/ # 业务逻辑层
18- │ └── metric_service.go # 指标查询服务实现
19- ├── client/ # Prometheus 客户端
35+ ├── server.go # 服务器主入口,负责初始化和生命周期管理
36+ ├── api/ # API 层,处理 HTTP 请求
37+ │ ├── api.go # API 基础结构和初始化
38+ │ ├── metric_api.go # 指标相关的 API 处理器
39+ │ └── alert_api.go # 告警规则同步 API 处理器
40+ ├── service/ # 业务逻辑层
41+ │ ├── metric_service.go # 指标查询服务实现
42+ │ └── alert_service.go # 告警规则同步服务实现
43+ ├── client/ # Prometheus 客户端
2044│ └── prometheus_client.go # 封装 Prometheus API 调用
21- └── model/ # 数据模型
22- ├── api.go # API 请求响应模型
23- ├── constants.go # 常量定义(错误码等)
24- └── error.go # 错误类型定义
45+ └── model/ # 数据模型
46+ ├── api.go # API 请求响应模型
47+ ├── alert.go # 告警规则模型
48+ ├── constants.go # 常量定义(错误码等)
49+ ├── error.go # 错误类型定义
50+ └── prometheus.go # Prometheus 规则文件模型
2551```
2652
27- ### 层次设计
53+ - 核心组件
54+ - PrometheusAdapterServer:初始化客户端与路由,管理服务生命周期
55+ - PrometheusClient:` QueryRange ` 、` GetAvailableMetrics ` 、` CheckMetricExists ` 、` CheckServiceExists ` 、` BuildQuery `
56+ - MetricService:参数校验、动态指标发现、错误转换
57+ - AlertService:告警规则同步、Prometheus 规则文件生成、配置重载
2858
29- 1 . ** API 层** (` api/ ` )
30- - 处理 HTTP 请求和响应
31- - 参数验证和解析
32- - 错误响应格式化
59+ ## API
3360
34- 2 . ** Service 层** (` service/ ` )
35- - 业务逻辑处理
36- - 指标和服务存在性验证
37- - 数据转换和组装
61+ ### 指标查询
3862
39- 3 . ** Client 层** (` client/ ` )
40- - 与 Prometheus API 交互
41- - PromQL 查询构建
42- - 结果数据转换
43-
44- 4 . ** Model 层** (` model/ ` )
45- - 统一的数据模型定义
46- - 错误类型和错误码
47- - 请求响应结构体
48-
49- ### 核心组件
50-
51- #### PrometheusAdapterServer
52- 主服务器组件,负责:
53- - 初始化 Prometheus 客户端
54- - 创建服务实例
55- - 设置 API 路由
56- - 管理生命周期
57-
58- #### PrometheusClient
59- Prometheus 客户端封装,提供:
60- - ` QueryRange ` : 执行时间范围查询
61- - ` GetAvailableMetrics ` : 获取所有可用指标
62- - ` CheckMetricExists ` : 检查指标是否存在
63- - ` CheckServiceExists ` : 检查服务是否存在
64- - ` BuildQuery ` : 构建 PromQL 查询语句
65-
66- #### MetricService
67- 业务逻辑服务,实现:
68- - 动态指标发现
69- - 查询参数验证
70- - 错误处理和转换
71-
72- ## 配置说明
73-
74- ### 环境变量
75-
76- | 变量名 | 说明 | 默认值 |
77- | --------| ------| --------|
78- | PROMETHEUS_ADDRESS | Prometheus 服务器地址 | http://10.210.10.33:9090 |
79-
80- ## API
81-
82- ### 1. 获取可用指标列表
83-
84- ** GET** ` /v1/metrics `
85-
86- 获取所有可用的指标列表。
87-
88- #### 请求示例
89- ``` bash
90- GET /v1/metrics
63+ 1 ) 获取可用指标列表
64+ - 方法与路径:` GET /v1/metrics `
65+ - 用途:列出当前可查询的所有指标名称
66+ - 响应示例:
9167```
92-
93- #### 响应示例
94- ``` json
9568{
9669 "metrics": [
9770 "system_cpu_usage_percent",
@@ -104,69 +77,36 @@ GET /v1/metrics
10477}
10578```
10679
107- ### 2. 通用指标查询接口
108-
109- ** GET** ` /v1/metrics/:service/:metric `
110-
111- 获取指定服务的任意指标时间序列数据。指标不存在则返回错误。
112-
113- #### 路径参数
114- - ` service ` (string, required): 服务名称
115- - ` metric ` (string, required): 指标名称(必须是 Prometheus 中实际存在的指标)
116-
117- #### 查询参数
118- - ` version ` (string, optional): 服务版本,不指定则返回所有版本
119- - ` start ` (string, optional): 开始时间 (RFC3339 格式,如: 2024-01-01T00:00:00Z)
120- - ` end ` (string, optional): 结束时间 (RFC3339 格式,如: 2024-01-01T01:00:00Z)
121- - ` step ` (string, optional): 时间步长 (如: 1m, 5m, 1h),默认 1m
122-
123- #### 请求示例
124-
125- 1 . ** 查询 CPU 使用率:**
126- ``` bash
127- GET /v1/metrics/metadata-service/system_cpu_usage_percent? version=1.0.0
128- ```
129-
130- 2 . ** 查询内存使用率:**
131- ``` bash
132- GET /v1/metrics/storage-service/system_memory_usage_percent? version=1.0.0
133- ```
134-
135- 3 . ** 查询 HTTP 请求延迟:**
136- ``` bash
137- GET /v1/metrics/storage-service/http_latency? version=1.0.0
80+ 2 ) 查询指定服务的指标时间序列
81+ - 方法与路径:` GET /v1/metrics/{service}/{metric} `
82+ - 路径参数:
83+ - ` service ` :服务名(必填)
84+ - ` metric ` :指标名(必填,需为 Prometheus 中存在的指标)
85+ - 查询参数:
86+ - ` version ` :服务版本(选填;不传则返回所有版本)
87+ - ` start ` :开始时间(选填,RFC3339)
88+ - ` end ` :结束时间(选填,RFC3339)
89+ - ` step ` :步长(选填,如 ` 1m ` 、` 5m ` 、` 1h ` ;默认 ` 1m ` )
90+ - 请求示例:
91+ - ` GET /v1/metrics/metadata-service/system_cpu_usage_percent?version=1.0.0 `
92+ - ` GET /v1/metrics/storage-service/system_memory_usage_percent?version=1.0.0 `
93+ - ` GET /v1/metrics/storage-service/http_latency?version=1.0.0 `
94+ - ` GET /v1/metrics/storage-service/system_network_qps?version=1.0.0 `
95+ - 成功响应示例:
13896```
139-
140- 4 . ** 查询网络 QPS:**
141- ``` bash
142- GET /v1/metrics/storage-service/system_network_qps? version=1.0.0
143- ```
144-
145- #### 成功响应示例
146-
147- ** HTTP 200 OK**
148- ``` json
14997{
15098 "service": "metadata-service",
15199 "version": "1.0.0",
152100 "metric": "system_cpu_usage_percent",
153101 "data": [
154- {
155- "timestamp" : " 2024-01-01T00:00:00Z" ,
156- "value" : 45.2
157- },
158- {
159- "timestamp" : " 2024-01-01T00:01:00Z" ,
160- "value" : 48.5
161- }
102+ { "timestamp": "2024-01-01T00:00:00Z", "value": 45.2 },
103+ { "timestamp": "2024-01-01T00:01:00Z", "value": 48.5 }
162104 ]
163105}
164106```
165-
166- #### 错误响应示例
167-
168- ** 指标不存在时 - HTTP 404 Not Found**
169- ``` json
107+ - 错误响应示例:
108+ - 指标不存在(404):
109+ ```
170110{
171111 "error": {
172112 "code": "METRIC_NOT_FOUND",
@@ -175,9 +115,8 @@ GET /v1/metrics/storage-service/system_network_qps?version=1.0.0
175115 }
176116}
177117```
178-
179- ** 服务不存在时 - HTTP 404 Not Found**
180- ``` json
118+ - 服务不存在(404):
119+ ```
181120{
182121 "error": {
183122 "code": "SERVICE_NOT_FOUND",
@@ -186,9 +125,8 @@ GET /v1/metrics/storage-service/system_network_qps?version=1.0.0
186125 }
187126}
188127```
189-
190- ** 参数错误时 - HTTP 400 Bad Request**
191- ``` json
128+ - 参数错误(400):
129+ ```
192130{
193131 "error": {
194132 "code": "INVALID_PARAMETER",
@@ -199,15 +137,81 @@ GET /v1/metrics/storage-service/system_network_qps?version=1.0.0
199137}
200138```
201139
202- ## 实现说明
140+ ### 告警规则同步
141+
142+ - 方法与路径:` POST /v1/alert-rules/sync `
143+ - 功能:接收监控告警模块发送的完整规则列表,生成 Prometheus 规则文件并触发重载(全量同步)
144+ - 请求体示例:
145+ ```
146+ {
147+ "rules": [
148+ {
149+ "name": "high_cpu_usage",
150+ "description": "CPU使用率过高告警",
151+ "expr": "system_cpu_usage_percent",
152+ "op": ">",
153+ "severity": "warning"
154+ }
155+ ],
156+ "rule_metas": [
157+ {
158+ "alert_name": "high_cpu_usage_storage_v1",
159+ "labels": "{\"service\":\"storage-service\",\"version\":\"1.0.0\"}",
160+ "threshold": 90,
161+ "watch_time": 300,
162+ "match_time": "5m"
163+ }
164+ ]
165+ }
166+ ```
167+ - 响应示例:
168+ ```
169+ {
170+ "status": "success",
171+ "message": "Rules synced to Prometheus"
172+ }
173+ ```
174+
175+ ## Alertmanager 集成
176+
177+ - 目标:将 Prometheus 触发的告警通过 Alertmanager 转发到监控告警模块
178+ - ` alertmanager.yml ` 配置示例:
179+ ``` yaml
180+ global :
181+ resolve_timeout : 5m
182+
183+ route :
184+ group_by : ['alertname', 'cluster', 'service']
185+ group_wait : 10s
186+ group_interval : 10s
187+ repeat_interval : 1h
188+ receiver : ' zeroops-alert-webhook'
189+
190+ receivers :
191+ - name : ' zeroops-alert-webhook'
192+ webhook_configs :
193+ - url : ' http://alert-module:8080/v1/integrations/alertmanager/webhook'
194+ send_resolved : true
195+ ` ` `
196+ - 说明:
197+ - ` url`:监控告警模块的 webhook 地址(按实际部署修改主机与端口)
198+ - ` send_resolved` :为 `true` 时,告警恢复也会通知
199+
200+ # # 支持的服务
201+
202+ 当前 mock/s3 环境下:
203+ - ` metadata-service`
204+ - ` storage-service`
205+ - ` queue-service`
206+ - ` third-party-service` (原文为 third-party-servrice,已更正)
207+ - ` mock-error-service`
203208
204- ### 支持的服务列表
209+ 所有服务的版本信息通过标签 `service_version` 暴露。
205210
206- 当前 mock/s3 环境中支持的服务:
207- - ` metadata-service ` - 元数据管理服务
208- - ` storage-service ` - 存储服务
209- - ` queue-service ` - 消息队列服务
210- - ` third-party-service ` - 第三方集成服务
211- - ` mock-error-service ` - 错误模拟服务
211+ # # 错误码
212212
213- 所有服务的版本信息通过 ` service_version ` 标签暴露。
213+ - ` METRIC_NOT_FOUND` :指标不存在
214+ - ` SERVICE_NOT_FOUND` :服务不存在
215+ - ` INVALID_PARAMETER` :请求参数不合法(如时间格式不正确)
216+ - ` INTERNAL_ERROR` :内部服务器错误
217+ - ` PROMETHEUS_ERROR` :Prometheus 查询失败
0 commit comments