2、核心概念:PromQL基础、指标类型及在资源监控中的应用

在基于 Prometheus 指标进行集群升级窗口资源预测之前,必须牢固掌握 PromQL(Prometheus Query Language)的基础语法与 Prometheus 的四种核心指标类型。这些概念是构建预测模型、分析资源趋势的“语言”与“原材料”。

2.1 PromQL 基础:查询与聚合

PromQL 是一种函数式查询语言,用于实时聚合与计算时间序列数据。其核心操作分为即时查询与范围查询。

  • 即时向量(Instant Vector):返回一组时间序列在当前时间戳的最新样本值。例如:node_memory_MemAvailable_bytes 返回所有节点的当前可用内存。
  • 范围向量(Range Vector):返回一组时间序列在过去一段时间窗口内的样本值。通过在指标名后附加 [5m] 指定窗口。例如:node_cpu_seconds_total[5m] 返回过去5分钟内的CPU使用数据。
关键区别: 即时向量用于“当前值”判断(如当前内存是否充足);范围向量用于“趋势计算”(如过去1小时CPU平均负载),是资源预测的基础。

常用 PromQL 函数与操作符

类别 函数/操作符 示例 说明
速率计算 rate() rate(node_cpu_seconds_total[5m]) 计算Counter类型指标在窗口内的每秒平均增长率,消除采样抖动。
聚合操作 sum() / avg() sum(rate(node_cpu_seconds_total[5m])) 按维度(如实例、CPU核心)汇总或平均,得到集群整体CPU使用率。
分组聚合 by sum(rate(node_cpu_seconds_total[5m])) by (instance) 按指定标签(如节点名)分组聚合,查看每个节点的CPU使用率。
预测函数 predict_linear() predict_linear(node_memory_MemAvailable_bytes[1h], 3600) 基于线性回归预测未来1小时(3600秒)的可用内存值,是资源预测的核心函数。
实战建议: 在升级窗口预测中,rate() 用于计算CPU/网络流量趋势,predict_linear() 用于预测内存/磁盘耗尽时间点。务必使用范围向量作为输入。

2.2 指标类型:Counter、Gauge、Histogram、Summary

Prometheus 客户端库提供四种核心指标类型,每种类型在资源监控中有不同的语义与适用场景。理解其差异是正确编写 PromQL 的前提。

指标类型 值特征 典型场景 PromQL 处理方式
Counter 只增不减(重启时重置为0) 请求总数、CPU总时间、网络字节数 必须使用 rate() 或 increase() 计算速率
Gauge 可增可减,反映当前状态 内存使用量、CPU使用率、磁盘剩余空间 直接使用原始值,或使用 avg() / max() 聚合
Histogram 分桶计数,可计算分位数 请求延迟分布、响应大小分布 使用 histogram_quantile() 计算P50/P95/P99
Summary 客户端预计算分位数,不可聚合 延迟SLO监控(已预计算分位数) 直接查询 quantile 标签,但无法跨实例聚合
常见错误: 对 Counter 类型直接使用 avg() 或 max() 会得到无意义的累计值。必须先用 rate() 转换为每秒速率后再聚合。例如:avg(rate(node_cpu_seconds_total[5m])) 才是正确的CPU使用率。

2.3 在资源监控中的应用

在集群升级窗口资源预测中,四种指标类型各有分工,共同构成预测数据源。

  • Counter → 流量与负载趋势:使用 rate(node_network_receive_bytes_total[5m]) 计算网络流量速率,判断升级期间是否会出现带宽瓶颈。
  • Gauge → 资源水位:直接使用 node_memory_MemAvailable_bytes 或 node_filesystem_avail_bytes 判断当前资源余量,作为预测的基线。
  • Histogram → 服务质量:使用 histogram_quantile(0.95, rate(etcd_request_duration_seconds_bucket[5m])) 计算P95延迟,确保升级不会导致服务降级。
  • Summary → 预计算SLO:直接查询 etcd_request_duration_seconds{quantile="0.99"} 验证是否满足SLO,但注意无法跨节点聚合。
PromQL 查询流程与指标类型映射 Prometheus Server Counter (只增不减) Gauge (可增可减) Histogram (分桶) Summary (预计算) rate() / increase() avg() / max() / min() histogram_quantile() 直接查询 quantile 输出:资源使用率 / 延迟分位数 / 预测趋势

2.4 实战:编写第一个资源预测 PromQL

结合上述概念,我们编写一个用于升级窗口的节点内存耗尽预测查询。该查询将 Gauge 类型指标与 predict_linear() 函数结合,预测未来2小时内可用内存是否会低于阈值。

# 预测节点可用内存(单位:字节),基于过去1小时数据,预测未来2小时(7200秒)
predict_linear(
  node_memory_MemAvailable_bytes[1h],  # Gauge类型,范围向量
  7200                                 # 预测未来7200秒
) < 1e9                               # 阈值:低于1GB视为风险
查询解读: 该查询返回所有可用内存预测值低于1GB的节点。在升级窗口规划中,可将这些节点标记为“高风险”,优先扩容或延迟升级。
资源预测 PromQL 执行逻辑 Gauge: MemAvailable 范围向量 [1h] predict_linear() 输出:未来2小时预测值(字节) 阈值判断:预测值 < 1GB → 高风险节点

2.5 避坑指南:指标类型误用

错误用法 后果 正确做法
对 Counter 直接使用 avg() 得到无意义的累计平均值,无法反映速率 先 rate() 再 avg()
对 Histogram 直接使用 avg() 忽略分桶分布,无法计算分位数 使用 histogram_quantile()
跨实例聚合 Summary 预计算分位数不可聚合,结果错误 使用 Histogram 替代,或按实例单独查询
对 Gauge 使用 rate() 产生无意义的负值或零值 直接使用原始值或 avg()
记忆口诀: Counter 看速率,Gauge 看水位,Histogram 看分布,Summary 看预算。在升级窗口预测中,Gauge 用于资源余量,Counter 用于流量趋势,Histogram 用于服务质量。