Prometheus 理解度量类型

理解度量类型 | Prometheus

Prometheus支持四种类型的度量,分别是:

  • 计数器(Counter)

  • 仪表盘(Gauge)

  • 直方图(Histogram)

  • 摘要(Summary)

计数器(Counter)

计数器是一种度量值,只能增加或重置,即值不能低于之前的值。它可用于诸如请求数量、错误数量等度量。

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

go_gc_duration_seconds_count

PromQL中的
rate()函数可以在时间框架内对度量的历史进行计算,计算每秒值增加的速度。
rate()只适用于计数器值。

rate(go_gc_duration_seconds_count[5m])

仪表盘(Gauge)

仪表盘是一个可以上升或下降的数字。它可用于诸如集群中的Pod数量、队列中的事件数量等度量。

go_memstats_heap_alloc_bytes

可以在仪表盘度量上使用
max_over_time
min_over_time
avg_over_time等PromQL函数。

直方图(Histogram)

与前两种度量类型相比,直方图是一种更复杂的度量类型。直方图可用于任何基于桶值计数的计算值。桶边界可以由开发者配置。一个常见的例子是回复请求所需的时间,称为延迟。

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

假设对于“/ping”端点的请求1需要0.25秒。桶的计数值将是:

/ping

计数
0 - 0.31
0 - 0.51
0 - 0.71
0 - 11
0 - 1.21
0 - +Inf1

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

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

对于“/ping”端点的请求2需要0.4秒。桶的计数值将是:

/ping

计数
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_quantile()函数从直方图中计算分位数

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

图表显示90百分位数是0.09,要找到过去5分钟内的histogram_quantile,可以使用rate()和时间框架

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

摘要(Summary)

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

在本教程中,我们详细讨论了度量类型和一些PromQL操作,如rate、histogram_quantile等。

江达小记