3. Prometheus 数据模型回顾:Metric、Label、Sample、Time Series、数据类型

在利用 Prometheus 数据进行网关升级容量规划基线对比之前,必须深入理解其数据模型。Prometheus 的数据模型是其强大查询与告警能力的基石,核心概念包括 Metric(指标)、Label(标签)、Sample(样本)、Time Series(时间序列)以及四种核心数据类型。

3.1 核心概念定义与关系

这四个概念层层递进,共同构成了 Prometheus 的存储与查询逻辑。下表清晰展示了它们的定义与关系:

概念 定义 示例 在容量规划中的作用
Metric(指标) 被监控对象的特征名称,描述“测量什么”。 http_requests_total 定义基线对比的维度,如“每秒请求数”。
Label(标签) 键值对,用于对指标进行多维度的细分。 method="GET", status="200" 区分不同网关实例、不同路由、不同状态码的流量。
Sample(样本) 时间序列中某个时间点的具体数值。 timestamp: 1700000001, value: 1024 构成基线数据的原始数据点,用于计算 P99、均值等。
Time Series(时间序列) 同一组 Metric + Labels 下,按时间排序的 Sample 流。 http_requests_total{method="GET", status="200"} 容量规划中对比的“对象”,如“升级前 vs 升级后”的同一序列。
容量规划基线对比要点: 在对比升级前后的容量时,我们实际上是在对比两个不同时间窗口内,同一组 Time Series 的样本数据分布。例如,对比 gateway_cpu_usage{instance="gw-01"} 在升级前 7 天与升级后 7 天的样本值。

3.2 数据模型结构图

下图直观展示了 Metric、Label、Sample 如何组合成一个完整的时间序列:

Prometheus 数据模型结构图 Prometheus 数据模型:从 Metric 到 Time Series Metric(指标) http_requests_total Label(标签) {method="GET", handler="/api"} Time Series(时间序列) 唯一标识 Sample(样本) (T1, V1) Sample(样本) (T2, V2) Sample(样本) (T3, V3) ... 核心关系: Metric + Labels 唯一确定一个 Time Series,Time Series 由一系列按时间排序的 Sample 组成。 在容量规划中,我们对比的是“升级前”与“升级后”两个时间窗口内,同一 Time Series 的 Sample 集合。

3.3 四种核心数据类型

Prometheus 客户端库提供了四种核心指标类型,每种类型在容量规划基线对比中有不同的应用场景。

3.3.1 Counter(计数器)

  • 特征: 只增不减(除非系统重启)。
  • 典型场景: 请求总数、错误总数、CPU 时间总量。
  • 容量规划用法: 使用 rate() 或 increase() 函数计算每秒增长率,用于评估吞吐量趋势。

3.3.2 Gauge(仪表盘)

  • 特征: 可增可减,反映当前状态。
  • 典型场景: CPU 使用率、内存使用量、当前连接数。
  • 容量规划用法: 直接查看原始值或聚合值(如 avg, max),用于评估资源饱和度。

3.3.3 Histogram(直方图)

  • 特征: 对观测值进行分桶计数,可计算分位数。
  • 典型场景: 请求延迟、响应大小。
  • 容量规划用法: 使用 histogram_quantile() 计算 P99/P95 延迟,是评估用户体验和容量瓶颈的关键指标。

3.3.4 Summary(摘要)

  • 特征: 类似 Histogram,但分位数在客户端计算。
  • 典型场景: 需要精确分位数且已知分位点。
  • 容量规划用法: 直接暴露分位数,适合对延迟敏感且需要精确控制的场景。
数据类型选择建议: 在网关升级容量规划中,Counter 用于评估吞吐量(QPS),Gauge 用于评估资源水位(CPU/内存),Histogram 用于评估响应延迟(P99)。Summary 在需要客户端预计算分位数时使用,但灵活性不如 Histogram。

3.4 数据类型对比表

类型 增减特性 典型函数 容量规划基线指标 示例
Counter 只增不减 rate(), increase() QPS、错误率 rate(gateway_requests_total[5m])
Gauge 可增可减 avg(), max() CPU 使用率、内存使用量 avg(gateway_cpu_usage{instance="gw-01"})
Histogram 分桶计数 histogram_quantile() P99 延迟、P95 延迟 histogram_quantile(0.99, rate(gateway_request_duration_seconds_bucket[5m]))
Summary 客户端计算分位数 直接暴露 quantile 标签 预计算的分位数延迟 gateway_request_duration_seconds{quantile="0.99"}

3.5 数据类型在基线对比中的应用

下图展示了在网关升级容量规划中,如何利用不同数据类型构建基线对比:

数据类型在基线对比中的应用 数据类型在网关升级基线对比中的应用 升级前基线(T1 窗口) 升级后基线(T2 窗口) 对比 Counter (QPS) Gauge (CPU%) Histogram (P99) Summary (延迟) Counter (QPS) Gauge (CPU%) Histogram (P99) Summary (延迟) 基线对比核心:在相同的时间窗口(如 7 天)内,对同一 Time Series 的同一数据类型进行聚合计算,对比其分布变化。

3.6 关键概念总结

  • Metric + Labels = Time Series:这是 Prometheus 存储和查询的基本单元。
  • Sample 是时间序列的“细胞”,包含时间戳和值。
  • Counter 用于计算速率,Gauge 用于查看瞬时值,Histogram 和 Summary 用于分析分布。
  • 在容量规划基线对比中,我们始终围绕 Time Series 进行数据提取和对比。
常见误区: 不要直接对 Counter 类型的指标进行聚合(如 sum),而应先用 rate() 或 increase() 将其转换为速率后再聚合。否则,重启计数器会导致数据失真,影响基线对比的准确性。