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 监控实时状态)可构建完整的监控体系。

相关推荐
JohnYan9 分钟前
Bun技术评估 - 26 Abort
javascript·后端·bun
逛逛GitHub13 分钟前
国产首个开源 AI 原生后端平台,这次是真起飞了。
后端·github
Python私教13 分钟前
Rust 编程语言基础知识全面介绍
开发语言·后端·rust
鬼火儿14 分钟前
网卡驱动架构以及源码分析
java·后端
一 乐1 小时前
农产品销售系统|农产品电商|基于SprinBoot+vue的农产品销售系统(源码+数据库+文档)
java·javascript·数据库·vue.js·spring boot·后端·农产品销售系统
蒲公英源码1 小时前
java企业OA自动化办公源码
java·spring boot·后端
go4it1 小时前
聊聊spring-boot-autoconfigure的模块化
后端
鬼火儿2 小时前
集成RabbitMQ+MQ常用操作
java·后端
Merrick2 小时前
Java 方法参数默认值新方案:使用DefArgs!
java·后端
IT_陈寒2 小时前
Python数据处理速度慢?5行代码让你的Pandas提速300% 🚀
前端·人工智能·后端