Prometheus 查询按特定标签随时间平均

Posted

技术标签:

【中文标题】Prometheus 查询按特定标签随时间平均【英文标题】:Prometheus query to average over time by a specific label 【发布时间】:2020-05-21 21:35:49 【问题描述】:

我需要查询一个指标并找出该指标在 24 小时内的平均值。但是直接在指标上使用 avg_over_time 是行不通的。有一个特定的ipaddr 标签。平均值必须按每个ipaddr 分组。现在,avg_over_time 中不允许分组。在这种情况下,如何找出每个ipaddr 24 小时内指标的平均值?

指标及其值是这样的

K_utilizationifName="Ds12:1/0/30",ipaddr="10.1.109.54",node="worker"  3.5
K_utilizationifName="Ds65:1/0/4",ipaddr="10.1.5.50",node="worker" 13.2
K_utilizationifName="Ds26:1/0/8",ipaddr="10.1.123.58",node="worker"   3.2
K_utilizationifName="Ds69:0/0/10",ipaddr="10.1.115.55",node="worker"  6.2
K_utilizationifName="Ds71:0/0/21",ipaddr="10.1.25.51",node="worker"   13.5

【问题讨论】:

【参考方案1】:

avg_over_time 函数需要一个范围向量,这意味着您可以(如果我理解正确的话)使用如下子查询:

avg_over_time(K_utilization[1h:5m])

这将以 5m 的分辨率查看过去 1 小时的 K_utilization 指标,结果应包含指标中的所有标签。

您还可以通过ipaddr 标签与sum 子查询聚合子查询中的指标,然后计算avg_over_time

avg_over_time(sum by (ipaddr) (K_utilization)[1h:5m])

更多关于Prometheus subqueries?的信息

【讨论】:

以上是关于Prometheus 查询按特定标签随时间平均的主要内容,如果未能解决你的问题,请参考以下文章

如何查询 Prometheus 中所有具有特定标签值的时间序列?

Prometheus 查询一个时间间隔下的总体平均值

Prometheus 按标签查询范围向量

在 Prometheus 查询中选择最大的标签值

#yyds干货盘点#Prometheus 之 exporter 及查询持久性

显示仪表标签值随时间增加