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

相关推荐
Cyan_RA97 分钟前
操作系统面试题 — Linux中如何查看某个端口有没有被占用?
linux·后端·面试
悟空码字17 分钟前
Spring Boot 整合 Elasticsearch 及实战应用
java·后端·elasticsearch
JienDa17 分钟前
PHP与八字命理的跨次元对话:当代码遇见命运的量子纠缠
后端
BingoGo19 分钟前
PHP 8.5 在性能、调试和运维方面的新特性
后端·php
sino爱学习19 分钟前
Guava 常用工具包完全指南
java·后端
WindrunnerMax20 分钟前
基于 NodeJs 的分布式任务队列与容器优雅停机
javascript·后端·node.js
JienDa23 分钟前
PHP漏洞全解:从“世界上最好的语言”到“黑客的提款机”,你的代码真的安全吗?
后端
随风飘的云34 分钟前
spring的单例对象是否线程安全
后端
掂掂三生有幸35 分钟前
多系统 + 可视化实操:openGauss 从部署到业务落地的真实体验
后端
我很忙6541 分钟前
wxhook + nodeJS实现对微信数据的整合
后端