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

571 阅读3分钟

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

一、Gauge 指标的特点

  1. 可变性
    • 值可以随时增加或减少,直接反映当前状态(如内存使用率、CPU 利用率、在线人数等)。
    • 示例:
node_memory_used_bytes  # 系统已用内存(字节)
process_open_fds        # 进程打开的文件描述符数量
http_inprogress_requests # 正在处理的 HTTP 请求数

2. 瞬时性

    • 每个样本值代表某一时刻的状态,不累计变化过程。
    • 例如: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}})
  • 示例
delta(node_memory_used_bytes[1h])  # 1小时内内存使用量的净变化(+增加,-减少)

2. rate(v range-vector)

  • 作用:计算区间内 Gauge 变化的平均速率(净变化量 / 区间时长)。(\text{rate}(v) = \frac{v_{\text{end}} - v_{\text{start}}}{\text{区间秒数}})
  • 示例
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{样本数}})
  • 示例
avg_over_time(node_memory_used_bytes[1d])  # 1天内内存使用量的平均值

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

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

三、Gauge 与 Counter 的对比

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

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

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

3. 监控阈值报警

    • 直接针对 Gauge 的当前值设置阈值(如内存使用率 > 80% 时报警):
node_memory_used_percent > 80

4. 处理异常波动

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

五、常见 Gauge 指标示例

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

总结

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

image.png

image.png

image.png

image.png