PromQL 中 histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) 背后的数学是啥

Posted

技术标签:

【中文标题】PromQL 中 histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) 背后的数学是啥【英文标题】:what's the math behind histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) in PromQLPromQL 中 histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) 背后的数学是什么 【发布时间】:2021-02-18 18:01:06 【问题描述】:

我正在试图弄清楚背后的计算方式

histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m]))

基于https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile,上述表达式计算了过去 10m 中请求持续时间的第 90 个百分位。

据我了解,http_request_duration_seconds_bucket 是一个带有le 和计数的桶数组。 le 指定存储桶边界。

那么rate(http_request_duration_seconds_bucket[10m])后面的计算是什么,是不是计算每秒每个bucket中counts的增加量?

根据上面的表达式,histogram_quantile(0.9, rate(...))rate(...) 部分类似于累积密度分布 (CDF)。

我理解正确吗?

【问题讨论】:

请参考我的anwser here 【参考方案1】:

rate(http_request_duration_seconds_bucket[10m]) 后面的计算是什么,它是计算每秒每个bucket中计数的增加吗?

正如post 所解释的,此处应用于存储桶的rate 计算了过去 10 分钟内所有存储桶上发生的一组rate of increments。因此,要回答您的问题,请使用cumulative density distribution 在给定时间范围内计算的变化率。

histogram_quantile 函数然后使用此数据计算分位数/百分位数。

【讨论】:

以上是关于PromQL 中 histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m])) 背后的数学是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 Prometheus/PromQL 中合并/加入两个指标

值数组中每个元素的 PromQL 增量

PromQL 中的 MetricQL 函数

PromQL:查询警报是不是被静音

PromQL的简单使用

PromQL 查询以选择其值包含在给定的多选变量中的指标