Prometheus 中 Gauge 指标:特点、操作函数及最佳实践

在 Prometheus 监控体系中,Gauge(仪表盘) 是用于衡量当前状态值 的指标类型,反映系统在某个时刻的即时状态。它与 Counter(计数器) 的区别在于:Gauge 的值可以上升、下降甚至重置,而 Counter 的值只能单调递增(除非重置)。

一、Gauge 指标的特点

  1. 可变性
    • 值可以随时增加或减少,直接反映当前状态(如内存使用率、CPU 利用率、在线人数等)。
    • 示例:
bash 复制代码
node_memory_used_bytes  # 系统已用内存(字节)
process_open_fds        # 进程打开的文件描述符数量
http_inprogress_requests # 正在处理的 HTTP 请求数
  1. 瞬时性
    • 每个样本值代表某一时刻的状态,不累计变化过程。
    • 例如:node_cpu_usage 表示当前 CPU 使用率,而非一段时间内的累计值。
  1. 支持负值
    • 若指标状态下降,值可为负数(如释放内存时,node_memory_used_bytes 的变化量可能为负)。

二、常用 Gauge 指标操作函数

PromQL 提供多种函数处理 Gauge 指标,核心逻辑围绕变化量计算状态分析

1. delta(v range-vector)

  • 作用 :计算区间内 Gauge 的净变化量(末端值 - 起始值),包含正负。(\text{delta}(v) = v_{\text{end}} - v_{\text{start}})
  • 示例
ini 复制代码
delta(node_memory_used_bytes[1h])  # 1小时内内存使用量的净变化(+增加,-减少)

2. rate(v range-vector)

  • 作用 :计算区间内 Gauge 变化的平均速率(净变化量 / 区间时长)。(\text{rate}(v) = \frac{v_{\text{end}} - v_{\text{start}}}{\text{区间秒数}})
  • 示例
ini 复制代码
rate(node_cpu_usage[5m])  # 5分钟内 CPU 使用率的平均变化速率

3. avg_over_time(v range-vector)

  • 作用 :计算区间内 Gauge 的平均值,反映一段时间内的平均状态。(\text{avg_over_time}(v) = \frac{\sum_{t \in \text{区间}} v_t}{\text{样本数}})
  • 示例
ini 复制代码
avg_over_time(node_memory_used_bytes[1d])  # 1天内内存使用量的平均值

4. max_over_time(v range-vector) / min_over_time(v range-vector)

  • 作用 :获取区间内 Gauge 的最大值最小值,用于监控峰值或低谷。
  • 示例
ini 复制代码
max_over_time(http_inprogress_requests[30m])  # 30分钟内同时处理的最大请求数

三、Gauge 与 Counter 的对比

特性 Gauge Counter
值变化 可增、可减、可重置 仅增(允许重置为 0)
典型场景 内存、CPU、在线人数等状态 请求数、错误数、字节数等累计量
常用函数 delta、rate、avg increase、rate
重置影响 直接反映新值(如重启后重置为初始值) 重置后需用 increase 忽略负值

四、Gauge 指标的使用最佳实践

  1. 避免用于累计量统计
    • 若需统计累计量(如总请求数),应使用 Counter,而非通过 Gauge 的增量累加实现(可能因重置导致数据错误)。
  1. 结合时间窗口分析
    • 单独的 Gauge 值仅反映瞬时状态,需结合 delta/rate 等函数分析趋势。
    • 示例:
yaml 复制代码
# 分析 5 分钟内内存使用量的平均变化速率(单位:MB/分钟)
rate(node_memory_used_bytes[5m]) / 1024 / 1024
  1. 监控阈值报警
    • 直接针对 Gauge 的当前值设置阈值(如内存使用率 > 80% 时报警):

      node_memory_used_percent > 80

  1. 处理异常波动
    • 若 Gauge 值频繁剧烈波动(如网络延迟),可通过 avg_over_time 平滑数据后再报警。

五、常见 Gauge 指标示例

指标名称 含义 单位
node_cpu_usage CPU 使用率(0-100%) %
node_memory_used_bytes 已用内存 字节
process_resident_memory_bytes 进程常驻内存 字节
http_response_time_seconds HTTP 请求响应时间(瞬时值)
active_connections 活跃连接数

总结

Gauge 是 Prometheus 中用于实时状态监控的核心指标类型,适用于需要反映当前值及其波动的场景。合理使用 delta、rate 等函数可有效分析其变化趋势,结合阈值报警能及时发现系统异常。与 Counter 的配合使用(如用 Counter 统计累计量,Gauge 监控实时状态)可构建完整的监控体系。

相关推荐
恸流失5 小时前
DJango项目
后端·python·django
Mr Aokey8 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring
地藏Kelvin8 小时前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
菠萝019 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
长勺9 小时前
Spring中@Primary注解的作用与使用
java·后端·spring
小奏技术10 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹10 小时前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
lanfufu10 小时前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹10 小时前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹10 小时前
面试官:你知道如何在 Java 中创建对话框吗
后端