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 模式避免了推送风暴,使监控系统对目标集群的侵入性降到最低;同时,本地存储保证了离线自愈能力。
Prometheus 整体架构 Prometheus Server 抓取 · 存储 · 查询 Exporters Node/MySQL/Nginx Pushgateway 短期任务推送 Alertmanager 告警路由/静默 Service Discovery K8s/Consul/EC2 本地时序数据库 TSDB (2h block) 说明: Pull 模式是 Prometheus 的核心设计,Server 主动从 Exporter 拉取指标;Pushgateway 仅作为补充。

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 实现跨集群监控数据聚合。

Prometheus 部署模式对比 单实例 1个 Prometheus Server 本地存储 高可用 (HA) 2个 Prometheus Server 独立存储 + 去重 Thanos / Cortex 全局查询 + 对象存储 跨集群联邦 选型建议: • 单实例:适合学习、Demo 或非关键路径监控。 • HA:生产环境标配,配合 Prometheus Operator 自动管理。 • Thanos:多集群、长期存储、全局视图的首选方案。

2.5 本章小结

本章回顾了 Prometheus 的四大基础支柱:

  • 架构:Pull 模式 + 组件解耦,为集群监控提供弹性底座。
  • 数据模型:时间序列 + 标签体系,支撑多维聚合分析。
  • PromQL:即时/范围向量 + 聚合函数,是升级回滚健康检查的核心工具。
  • 部署模式:从单实例到 Thanos,按规模与可靠性需求选择。