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.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_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等。