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 如何组合成一个完整的时间序列:
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 数据类型在基线对比中的应用
下图展示了在网关升级容量规划中,如何利用不同数据类型构建基线对比:
3.6 关键概念总结
- Metric + Labels = Time Series:这是 Prometheus 存储和查询的基本单元。
- Sample 是时间序列的“细胞”,包含时间戳和值。
- Counter 用于计算速率,Gauge 用于查看瞬时值,Histogram 和 Summary 用于分析分布。
- 在容量规划基线对比中,我们始终围绕 Time Series 进行数据提取和对比。
常见误区: 不要直接对 Counter 类型的指标进行聚合(如 sum),而应先用
rate() 或 increase() 将其转换为速率后再聚合。否则,重启计数器会导致数据失真,影响基线对比的准确性。