理解指标类型

2026-01-20 10:09:52 1453

Prometheus 支持四种类型的指标

Counter

Gauge

直方图

摘要

Counter(计数器)

Counter 是一种只能增加或重置的指标值,也就是说,其值不能比前一个值小。可用于统计请求数量、错误数量等指标。

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

go_gc_duration_seconds_count

PromQL 中的 rate() 函数会计算一段时间范围内的指标历史,并计算每秒的增长速度。Rate 函数仅适用于计数器(counter)指标。

rate(go_gc_duration_seconds_count[5m])

Gauge(仪表盘)

Gauge 是一个可以上升或下降的数字。可用于统计集群中的 Pod 数量、队列中的事件数量等指标。

go_memstats_heap_alloc_bytes

PromQL 函数如 max_over_time、min_over_time 和 avg_over_time 可用于 gauge 指标。

Histogram(直方图)

与前两种相比,直方图是一种更复杂的指标类型。直方图可用于根据存储桶值计数的任何计算值。存储桶边界可以由开发人员配置。一个常见的例子是响应请求所需的时间,称为延迟。

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

假设端点“/ping”的请求 1 需要 0.25 秒。存储桶的计数将是。

/ping

存储桶计数0 - 0.310 - 0.510 - 0.710 - 110 - 1.210 - +Inf1

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

(由于直方图是累积频率,因此将 1 添加到大于该值的所有存储桶中)

端点“/ping”的请求 2 需要 0.4 秒。存储桶的计数将是这样的。

/ping

存储桶计数0 - 0.310 - 0.520 - 0.720 - 120 - 1.220 - +Inf2

由于 0.4 小于 0.5,因此所有小于该边界的存储桶的计数都会增加。

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

prometheus_http_request_duration_seconds_bucket{handler="/graph"}

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

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

图表显示 90% 的分位数是 0.09。要查找过去 5 分钟内的直方图分位数,您可以使用 rate() 和时间范围

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

总结

摘要也衡量事件,是直方图的替代方案。它们更便宜但会丢失更多数据。它们是在应用程序级别计算的,因此无法聚合来自同一进程多个实例的指标。当指标的存储桶是事先未知时使用它们,但强烈建议尽可能使用直方图而不是摘要。

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