Prometheus 查询 promql 以在同一字段上进行平均

Posted

技术标签:

【中文标题】Prometheus 查询 promql 以在同一字段上进行平均【英文标题】:Prometheus query promql to make average on the same field 【发布时间】:2021-09-30 18:05:23 【问题描述】:

在我的 prometheus 数据库中,我从三个不同的主机获得了指标,我想在它们之间取平均值,这样我可以进行聚合:

informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom01"
informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom02"
informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom03"

我尝试在唯一的查询命令上将这三个指标相加并减去三,就像这样:

(informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom01" +
informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom02" +
informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom03")/3

但它不起作用

另外,我尝试了sum + rate,也不行

sum by (host) (rate(informationapplication=~"$app",access=~"$access",quantile="0.99")[5m])

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

(scalar(informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom01") +
 scalar(informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom02") +
 scalar(informationapplication=~"$app",access=~"$access",quantile="0.99", host="prom03")
) / 3

但如果你这样做会更容易:

(sum(informationapplication=~"$app",access=~"$access",quantile="0.99", host=~"prom0(1|2|3)"))
) / 3

或者简单地说:

avg(informationapplication=~"$app",access=~"$access",quantile="0.99", host=~"prom0(1|2|3)")

【讨论】:

以上是关于Prometheus 查询 promql 以在同一字段上进行平均的主要内容,如果未能解决你的问题,请参考以下文章

在单个 promql 查询中需要两个 Prometheus 指标值

PromQL

#yyds干货盘点#Prometheus 之 PromQL 介绍

彻底理解Prometheus查询语法

第七篇Prometheus PromQL 简单用法

Prometheus:PromQL 减法,相同的标签,不同的值