指标类型。

Prometheus 支持四种类型的指标,分别是 - Counter(计数器) - Gauge(仪表盘) - Histogram(直方图) - Summary(摘要)

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 是一种更复杂的指标类型。Histogram 可用于基于桶值计数的任何计算值。桶的边界可以由开发人员配置。一个常见的例子是响应请求所需的时间,称为延迟(latency)。

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

假设端点“/ping”的请求 1 花费 0.25 秒。这些桶的计数将是:

/ping

计数
0 - 0.3 1
0 - 0.5 1
0 - 0.7 1
0 - 1 1
0 - 1.2 1
0 - +Inf 1

注意:默认会添加 +Inf 桶。

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

端点“/ping”的请求 2 花费 0.4 秒。这些桶的计数将是这样。

/ping

计数
0 - 0.3 1
0 - 0.5 2
0 - 0.7 2
0 - 1 2
0 - 1.2 2
0 - +Inf 2

由于 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

Summary(摘要)

Summary 也测量事件,并且是 Histogram 的一种替代方案。它们更廉价,但会丢失更多数据。它们是在应用程序级别计算的,因此无法聚合同一进程多个实例的指标。当指标的桶预先未知时可以使用它们,但强烈建议尽可能使用 Histogram 而不是 Summary。

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

本文档是开源的。请通过提交 issue 或 pull request 帮助改进它。