在 Prometheus 监控体系中,Gauge(仪表盘) 是用于衡量当前状态值 的指标类型,反映系统在某个时刻的即时状态。它与 Counter(计数器) 的区别在于:Gauge 的值可以上升、下降甚至重置,而 Counter 的值只能单调递增(除非重置)。
一、Gauge 指标的特点
- 可变性
-
- 值可以随时增加或减少,直接反映当前状态(如内存使用率、CPU 利用率、在线人数等)。
-
- 示例:
bash
node_memory_used_bytes # 系统已用内存(字节)
process_open_fds # 进程打开的文件描述符数量
http_inprogress_requests # 正在处理的 HTTP 请求数
- 瞬时性
-
- 每个样本值代表某一时刻的状态,不累计变化过程。
-
- 例如:node_cpu_usage 表示当前 CPU 使用率,而非一段时间内的累计值。
- 支持负值
-
- 若指标状态下降,值可为负数(如释放内存时,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 指标的使用最佳实践
- 避免用于累计量统计
-
- 若需统计累计量(如总请求数),应使用 Counter,而非通过 Gauge 的增量累加实现(可能因重置导致数据错误)。
- 结合时间窗口分析
-
- 单独的 Gauge 值仅反映瞬时状态,需结合 delta/rate 等函数分析趋势。
-
- 示例:
yaml
# 分析 5 分钟内内存使用量的平均变化速率(单位:MB/分钟)
rate(node_memory_used_bytes[5m]) / 1024 / 1024
- 监控阈值报警
-
-
直接针对 Gauge 的当前值设置阈值(如内存使用率 > 80% 时报警):
node_memory_used_percent > 80
-
- 处理异常波动
-
- 若 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 监控实时状态)可构建完整的监控体系。



