Prometheus系统架构和原理
Prometheus系统架构和原理
整体架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+----------------+
| Grafana |
+--------+-------+
|
PromQL
|
+---------+ +-------v--------+
| Exporter| ---> | Prometheus |
| | | Server |
+---------+ +-------+--------+
|
TSDB Storage
|
Alerting Rules
|
AlertManager
- Prometheus Server: 负责数据采集,处理存储和查询请求,触发告警。
- Exporter: 收集系统和应用指标数据,暴露 HTTP 接口
- Grafana: 可视化监控面板,使用 PromQL 查询指标数据
- TSDB Storage: Prometheus 内置的时序数据库
- AlertManager: 负责告警聚合,告警抑制和通知
时序数据库(TSDB)
数据结构:metric_name{label1=v1,label2=v2} value timestamp
- 时间压缩
- label索引
原理:
- WAL(Write Ahead Log):机器故障恢复
- Head Block(内存):最新 2 小时数据存在内存
- Block Files(磁盘):每 2 小时生成一个 block 。
1 2 3 4
block ├── chunks ├── index └── meta.json
数据采集流程
Prometheus 主动 pull 模式。
1
Prometheus ----HTTP----> Target
数据查询流程
1
2
3
4
5
6
7
8
9
PromQL
↓
Query Engine
↓
TSDB Index
↓
Chunk Data
↓
Result
Prometheus与 K8s 结合
通过kubernetes_sd_configs, 自动生成 targets。
为什么 Prometheus 使用 Pull,而不是 Push
- 统一采集控制(监控中心可控):Prometheus 可以自己决定抓取频率,采集策略
- 云原生场景,自动服务发现:使用kubernetes_sd_configs即可自动发现targets,避免 push 模式主动注册复杂性。
- 服务健康检查能力:pull 模式天然支持 up 状态监控,push 模式服务挂掉后无法上报监控
- 防止监控系统被压垮:防止大量 push 数据压垮系统
This post is licensed under CC BY 4.0 by the author.