2. Prometheus 基础回顾:架构、数据模型、PromQL 与部署模式
在深入集群升级回滚机制之前,必须夯实 Prometheus 监控基础。本章从架构、数据模型、查询语言和部署模式四个维度,梳理 Prometheus 的核心概念,为后续基于监控驱动的自动化决策提供理论支撑。
2.1 Prometheus 整体架构
Prometheus 采用 拉取(Pull) 为主的监控架构,通过服务发现动态获取目标端点,定期采集指标数据并存储于本地时序数据库。其核心组件包括:
- Prometheus Server:负责指标抓取、存储与查询。
- Exporters:将非原生支持 Prometheus 的应用(如 Node、MySQL、Nginx)转换为指标端点。
- Pushgateway:用于短期任务或无法直接拉取的场景,允许作业主动推送指标。
- Alertmanager:处理告警路由、去重、静默与通知。
- Service Discovery:自动发现 Kubernetes、Consul、EC2 等环境中的监控目标。
关键设计原则: Pull 模式避免了推送风暴,使监控系统对目标集群的侵入性降到最低;同时,本地存储保证了离线自愈能力。
2.2 数据模型
Prometheus 所有采集的数据均以 时间序列(Time Series) 形式存储,每个序列由 指标名称(Metric Name) 和一组 标签(Labels) 唯一标识。
| 概念 | 说明 | 示例 |
|---|---|---|
| Metric Name | 描述被监控对象的一般含义,如 http_requests_total |
node_cpu_seconds_total |
| Labels | 键值对,用于维度区分,如 method="GET", instance="10.0.0.1:9090" |
job="node-exporter" |
| Sample | 实际数据点,包含时间戳(毫秒)和 float64 值 | @1620000000 1234.56 |
| Time Series | 同一 Metric + Labels 组合的样本序列 | node_cpu_seconds_total{cpu="0",mode="idle"} |
标签设计原则: 标签是 Prometheus 数据模型的灵魂。合理使用标签可以实现多维聚合,但应避免基数爆炸(如将用户 ID 或请求 IP 作为标签)。
2.3 PromQL 核心概念
PromQL(Prometheus Query Language)是 Prometheus 内置的函数式查询语言,支持即时查询与范围查询。以下为集群升级回滚场景中最常用的核心概念:
- Instant Vector:某一时刻的时序数据集合,如
node_cpu_seconds_total{cpu="0"}。 - Range Vector:一段时间窗口内的时序数据集合,如
node_cpu_seconds_total[5m]。 - 聚合操作:
sum(),avg(),max(),rate(),irate()等。 - 二元运算符:算术(
+,-,*,/)、比较(>,<,==)、逻辑(and,or,unless)。 - 函数:
rate()计算每秒增长率,increase()计算增量,histogram_quantile()计算分位数。
# 计算过去5分钟集群所有节点的平均CPU使用率(排除idle模式)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 检测最近1分钟内API请求错误率是否超过5%
sum(rate(http_requests_total{status=~"5.."}[1m])) / sum(rate(http_requests_total[1m])) > 0.05
常见陷阱: 使用
rate() 时务必确保时间窗口至少为抓取间隔的 4 倍,否则可能产生数据空洞。例如抓取间隔 15s,则窗口应 ≥ 1m。
2.4 部署模式
Prometheus 支持多种部署模式,在 Kubernetes 集群升级回滚场景中,通常采用以下两种:
| 部署模式 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 单实例 | 小规模集群(< 100 节点)、开发/测试环境 | 部署简单,运维成本低 | 单点故障,存储容量有限 |
| 高可用(HA) | 生产环境、关键业务监控 | 故障切换,数据冗余 | 资源消耗翻倍,需协调重复数据 |
| Thanos / Cortex | 大规模集群、多集群联邦、长期存储 | 全局视图,无限存储,跨集群查询 | 架构复杂,引入额外组件 |
在后续章节的升级回滚实战中,我们将基于 Prometheus Operator 在 Kubernetes 上部署高可用 Prometheus 集群,并结合 Thanos 实现跨集群监控数据聚合。
2.5 本章小结
本章回顾了 Prometheus 的四大基础支柱:
- 架构:Pull 模式 + 组件解耦,为集群监控提供弹性底座。
- 数据模型:时间序列 + 标签体系,支撑多维聚合分析。
- PromQL:即时/范围向量 + 聚合函数,是升级回滚健康检查的核心工具。
- 部署模式:从单实例到 Thanos,按规模与可靠性需求选择。