如何获得普罗米修斯平均值的第 95 个百分位数?

How to get the 95th percentile of an average in Prometheus?

所以我知道 PromQL 中的一些百分位函数,例如 histogram_quantile,它用于这样的情况:

// Over the past 5 minutes, what's the maximum http response time experienced by 95% of our users
histogram_quantile(0.95, rate(http_request_duration_bucket[5m])

我们可以这样计算平均值:

// Over the past 5 mins, what the average http response time?
avg by (webId) (rate(http_request_duration_sum[5m])/rate(http_request_duration_count[5m])

是否可以将这两个函数结合起来得到如下含义的查询: 在过去 5 分钟内,我们 95% 的用户体验到的最长平均 HTTP 响应时间是多少?也就是平均值的 95 个百分点?

我试过类似的方法:

histogram_quantile(0.95, avg by (webId) (rate(http_request_duration_sum[5m])/rate(http_request_duration_count[5m]))

但是好像不行。我的理解有什么建议或差距吗?

尝试以下查询:

quantile(0.95, avg by (webId) (rate(http_request_duration_sum[5m])/rate(http_request_duration_count[5m])))

它使用 quantile() 聚合函数来计算每个 webId 计算的平均响应时间的给定分位数。

我发现上面的答案不适合我的情况,但是 quantile_over_time 允许我从 sum:

中提取百分位数
quantile_over_time(0.95,
  (sum by (component_name) (
     node_memory_MemTotal_bytes 
     - node_memory_MemFree_bytes 
     - node_memory_Cached_bytes)[2w:]
  )
)