请参与 Prometheus 用户调研(2026 年 3 月版) ,帮助社区确定未来开发工作的优先级!

理解指标类型

Prometheus 支持四种类型的指标

  • 计数器
  • Gauge (仪表盘)
  • 直方图
  • 摘要

Counter(计数器)

Counter (计数器) 是一种只能增加或重置的指标值,即其值不能低于之前的值。它适用于请求数、错误数等指标。

在查询栏中输入以下查询并执行。

go_gc_duration_seconds_count

Counter

PromQL 中的 rate() 函数会获取一段时间内的指标历史记录,并计算其值每秒增加的速度。Rate 仅适用于 Counter 值。

rate(go_gc_duration_seconds_count[5m]) Rate Counter

Gauge(仪表盘)

Gauge 是一种数值,既可以升高也可以降低。它适用于集群中 Pod 数量、队列中事件数量等指标。

go_memstats_heap_alloc_bytes Gauge

PromQL 函数如 max_over_time, min_over_timeavg_over_time 可用于 Gauge 指标

Histogram(直方图)

Histogram (直方图) 是一种比前两种更复杂的指标类型。直方图可用于计算任何基于桶(bucket)值进行统计的值。桶边界可以由开发人员配置。一个常见的例子是响应请求所花费的时间,即延迟。

示例:假设我们要观察处理 API 请求所花费的时间。直方图允许我们将其存储在桶中,而不是为每个请求存储请求时间。我们定义时间消耗的桶,例如 小于或等于 0.3, le 0.5, le 0.7, le 1, 和 le 1.2。这就是我们的桶,一旦计算出请求所花费的时间,它就会被添加到所有桶边界高于测量值的桶计数中。

假设“/ping”端点的请求 1 花费了 0.25 秒。各个桶的计数值如下。

/ping

桶 (Bucket)计数值 (Count)
0 - 0.31
0 - 0.51
0 - 0.71
0 - 11
0 - 1.21
0 - +Inf1

注意:+Inf 桶是默认添加的。

(由于直方图是累积频率,因此 1 会被加到所有大于该测量值的桶中)

“/ping”端点的请求 2 花费了 0.4 秒。各个桶的计数值将变为这样。

/ping

桶 (Bucket)计数值 (Count)
0 - 0.31
0 - 0.52
0 - 0.72
0 - 12
0 - 1.22
0 - +Inf2

由于 0.4 低于 0.5,因此直到该边界的所有桶的计数值都会增加。

让我们从 Prometheus UI 中探索一个直方图指标并应用一些函数。

prometheus_http_request_duration_seconds_bucket{handler="/graph"}

Histogram

histogram_quantile() 函数可用于从直方图中计算分位数

histogram_quantile(0.9,prometheus_http_request_duration_seconds_bucket{handler="/graph"})

Histogram Quantile

图表显示第 90 百分位数为 0.09。要查找过去 5 分钟的 histogram_quantile,可以使用 rate() 和时间范围

histogram_quantile(0.9, rate(prometheus_http_request_duration_seconds_bucket{handler="/graph"}[5m]))

Histogram Quantile Rate

总结

Summaries (摘要) 也可以测量事件,并且是直方图的替代方案。它们计算成本更低,但丢失的数据更多。它们是在应用程序级别计算的,因此无法聚合来自同一进程的多个实例的指标。当预先不知道指标的桶时,可以使用它们,但在可能的情况下,强烈建议优先使用直方图而非摘要。

在本教程中,我们详细介绍了指标类型,以及一些 PromQL 操作,如 rate, histogram_quantile 等。

本页内容