Prometheus 指标类型详解
 · 阅读需 5 分钟
在 Prometheus 生态系统中,指标(Metrics)是最基础的数据类型。理解不同类型的指标及其适用场景,对于构建有效的监控系统至关重要。本文将详细介绍 Prometheus 的四种核心指标类型。
Counter(计数器)
定义
Counter 是一个只增不减的累计指标。它的值只能增加或在重启时重置为零。
特点
- 单调递增
 - 只能增加或重置为零
 - 常用于计数场景
 
使用场景
# 常见的 Counter 指标
http_requests_total         # HTTP 请求总数
node_network_receive_bytes  # 网络接收字节数
errors_total               # 错误总数
最佳实践
# 计算速率(每秒请求数)
rate(http_requests_total[5m])
# 计算一段时间内的增量
increase(http_requests_total[1h])
Gauge(仪表盘)
定义
Gauge 是可以任意上下波动的指标,可增可减。
特点
- 可增可减
 - 反映瞬时状态
 - 适合记录当前状态
 
使用场景
# 常见的 Gauge 指标
node_memory_MemAvailable_bytes  # 可用内存
node_cpu_usage_percent         # CPU 使用率
temperature_celsius            # 温度
最佳实践
# 直接使用当前值
node_memory_MemAvailable_bytes
# 计算变化率
delta(temperature_celsius[1h])
Histogram(直方图)
定义
Histogram 对观察值进行采样,并将其计入可配置的桶(bucket)中,同时提供所有观察值的总和。
特点
- 包含多个桶计数
 - 自动计算总和和样本数
 - 支持分位数计算
 
组成部分
# 一个 Histogram 指标会自动生成以下数据:
<basename>_bucket{le="<upper inclusive bound>"}  # 桶计数
<basename>_sum                                   # 所有观察值的总和
<basename>_count                                 # 观察值的总数
使用场景
# HTTP 请求延迟分布
http_request_duration_seconds_bucket{le="0.1"}  # 100ms 内的请求数
http_request_duration_seconds_sum               # 总延迟时间
http_request_duration_seconds_count             # 总请求数
# 计算 P90 延迟
histogram_quantile(0.9, 
  rate(http_request_duration_seconds_bucket[5m])
)
Summary(摘要)
定义
Summary 类似于 Histogram,但它直接在客户端计算分位数。
特点
- 客户端计算分位数
 - 提供总和和计数
 - 配置固定的分位数
 
组成部分
# 一个 Summary 指标会自动生成:
<basename>{quantile="<φ>"}  # φ-分位数值
<basename>_sum              # 所有观察值的总和
<basename>_count            # 观察值的总数
使用场景
# 应用响应时间
http_request_duration_seconds{quantile="0.95"}  # P95 延迟
http_request_duration_seconds_sum               # 总延迟
http_request_duration_seconds_count             # 总请求数
指标类型选择建议
- 
Counter 适用于:
- 请求计数
 - 错误计数
 - 任务完成数
 
 - 
Gauge 适用于:
- 内存使用量
 - 温度
 - 当前并发连接数
 
 - 
Histogram 适用于:
- 请求延迟
 - 响应大小
 - 需要计算分位数的场景
 
 - 
Summary 适用于:
- 需要精确分位数的场景
 - 客户端计算分位数的场景
 
 
最佳实践
1. 命名规范
# 好的命名示例
http_requests_total
http_request_duration_seconds
node_memory_usage_bytes
2. 标签使用
# 合理使用标签
http_requests_total{method="GET", status="200", path="/api/v1/users"}
3. 单位规范
- 使用基本单位(秒、字节等)
 - 在指标名称中包含单位信息
 
总结
选择合适的指标类型对于构建有效的监控系统至关重要:
- Counter 适合累计型数据
 - Gauge 适合状态型数据
 - Histogram 适合需要分析分布的数据
 - Summary 适合需要客户端计算分位数的场景
 
理解这些指标类型的特点和使用场景,可以帮助我们更好地设计监控系统。