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

相关推荐
9ilk21 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
码事漫谈21 小时前
十字路口的抉择:B端与C端C++开发者的职业路径全解析
后端
提笔了无痕1 天前
git基本了解、常用基本命令与使用
git·后端
java1234_小锋1 天前
Spring IoC的实现机制是什么?
java·后端·spring
喵个咪1 天前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:JWT 集成指南
后端·go
绝不收费—免费看不了了联系我1 天前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
喵个咪1 天前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:OPA 集成指南:从原理到实践
后端·go
Victor3561 天前
Netty(11) Netty的心跳机制是什么?为什么需要它?
后端
Victor3561 天前
Netty(12)Netty支持哪些协议和传输方式?
后端
无限大61 天前
为什么电脑需要"内存"和"硬盘"?——存储金字塔的秘密
后端