在 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 指标会自动生成以下数据:
使用场景
# 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 指标会自动生成:
使用场景
# 应用响应时间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_totalhttp_request_duration_secondsnode_memory_usage_bytes
2. 标签使用
# 合理使用标签http_requests_total{method="GET", status="200", path="/api/v1/users"}
3. 单位规范
使用基本单位(秒、字节等)
在指标名称中包含单位信息
总结
选择合适的指标类型对于构建有效的监控系统至关重要:
Counter 适合累计型数据
Gauge 适合状态型数据
Histogram 适合需要分析分布的数据
Summary 适合需要客户端计算分位数的场景
理解这些指标类型的特点和使用场景,可以帮助我们更好地设计监控系统。
参考资料
Prometheus 指标类型文档
Prometheus 最佳实践
Histogram vs Summary