Prometheus 查询按特定标签随时间平均
Prometheus query to average over time by a specific label
我需要查询一个指标并找出该指标在 24 小时内的平均值。但是直接在指标上使用 using avg_over_time
是行不通的。有一个特定的 ipaddr
标签。平均值必须按每个 ipaddr
分组。现在,avg_over_time
中不允许分组。在这种情况下,我如何才能找出每个 ipaddr
的 24 小时指标的平均值?
指标及其值是这样的
K_utilization{ifName="Ds12:1/0/30",ipaddr="10.1.109.54",node="worker"} 3.5
K_utilization{ifName="Ds65:1/0/4",ipaddr="10.1.5.50",node="worker"} 13.2
K_utilization{ifName="Ds26:1/0/8",ipaddr="10.1.123.58",node="worker"} 3.2
K_utilization{ifName="Ds69:0/0/10",ipaddr="10.1.115.55",node="worker"} 6.2
K_utilization{ifName="Ds71:0/0/21",ipaddr="10.1.25.51",node="worker"} 13.5
avg_over_time
函数需要一个范围向量,这意味着您可以(如果我理解正确的话)使用子查询,例如:
avg_over_time(K_utilization[1h:5m])
这将以 5 米的分辨率查看最近 1 小时的 K_utilization
指标,结果应包含指标中的所有标签。
您还可以通过 ipaddr
标签和 sum
子查询聚合子查询中的指标,然后计算 avg_over_time
:
avg_over_time(sum by (ipaddr) (K_utilization)[1h:5m])
有关 Prometheus subqueries 的更多信息
以下 PromQL 查询 returns 过去 24 小时的平均值 K_utilization
按 ipaddr
分组:
sum(sum_over_time(K_utilization[24h])) by (ipaddr)
/
sum(count_over_time(K_utilization[24h])) by (ipaddr)
它使用sum_over_time and count_over_time个函数来计算平均值。
这个查询大致相当于下面的SQL:
SELECT ipaddr, avg(value)
FROM K_utilization
WHERE timestamp > now() - interval '24 hours'
GROUP BY ipaddr
假定 K_utilization
table 包含以下字段:
ipaddr string
timestamp int
value float
The following PromQL query returns the average K_utilization over the last 24 hours grouped by ipaddr:
sum(sum_over_time(K_utilization[24h])) by (ipaddr)
/
sum(count_over_time(K_utilization[24h])) by (ipaddr)
这对我有用。关于如何使用 avg_over_time promql 函数对查询进行分组,我有与 OP 相同的问题。在 aws_over_time 之后应用总和。
我需要查询一个指标并找出该指标在 24 小时内的平均值。但是直接在指标上使用 using avg_over_time
是行不通的。有一个特定的 ipaddr
标签。平均值必须按每个 ipaddr
分组。现在,avg_over_time
中不允许分组。在这种情况下,我如何才能找出每个 ipaddr
的 24 小时指标的平均值?
指标及其值是这样的
K_utilization{ifName="Ds12:1/0/30",ipaddr="10.1.109.54",node="worker"} 3.5
K_utilization{ifName="Ds65:1/0/4",ipaddr="10.1.5.50",node="worker"} 13.2
K_utilization{ifName="Ds26:1/0/8",ipaddr="10.1.123.58",node="worker"} 3.2
K_utilization{ifName="Ds69:0/0/10",ipaddr="10.1.115.55",node="worker"} 6.2
K_utilization{ifName="Ds71:0/0/21",ipaddr="10.1.25.51",node="worker"} 13.5
avg_over_time
函数需要一个范围向量,这意味着您可以(如果我理解正确的话)使用子查询,例如:
avg_over_time(K_utilization[1h:5m])
这将以 5 米的分辨率查看最近 1 小时的 K_utilization
指标,结果应包含指标中的所有标签。
您还可以通过 ipaddr
标签和 sum
子查询聚合子查询中的指标,然后计算 avg_over_time
:
avg_over_time(sum by (ipaddr) (K_utilization)[1h:5m])
有关 Prometheus subqueries 的更多信息
以下 PromQL 查询 returns 过去 24 小时的平均值 K_utilization
按 ipaddr
分组:
sum(sum_over_time(K_utilization[24h])) by (ipaddr)
/
sum(count_over_time(K_utilization[24h])) by (ipaddr)
它使用sum_over_time and count_over_time个函数来计算平均值。
这个查询大致相当于下面的SQL:
SELECT ipaddr, avg(value)
FROM K_utilization
WHERE timestamp > now() - interval '24 hours'
GROUP BY ipaddr
假定 K_utilization
table 包含以下字段:
ipaddr string
timestamp int
value float
The following PromQL query returns the average K_utilization over the last 24 hours grouped by ipaddr:
sum(sum_over_time(K_utilization[24h])) by (ipaddr) / sum(count_over_time(K_utilization[24h])) by (ipaddr)
这对我有用。关于如何使用 avg_over_time promql 函数对查询进行分组,我有与 OP 相同的问题。在 aws_over_time 之后应用总和。