普罗米修斯 <aggregation>_over_time() 的集合?
aggregate of <aggregation>_over_time() in prometheus?
Prometheus 具有例如获取给定数据点范围的最大值或最小值或...请参阅 documentation for more info.
现在,当我需要 min(data) 和 max(data) 以及 avg 时,...我需要发送单独的请求。我怎样才能在一个查询中实现这一点?
[更新]
从Brian的回复中我看出我的问题不够明确,所以我改一下:
我有一个以 15 秒为间隔一天的时间序列 "temperature"。
我想要每个小时(或最后一个小时,并不重要)
min/max/avg/stddev, ...
使用 *_over_time()
函数,我需要为每个 min/max/avg/...(以及正确的时间间隔)发送一个查询。有没有一种方法可以在一个查询中这样做(所以基本上返回一个包含 min/max/avg/... 的 k-v-pairs 的散列)?
min(min_over_time(metric[1h]))
会让你这样做。
[更新]
最好为每个要计算的函数发送一个查询。您可以通过技巧将其合而为一,但它会更加复杂且难以维护。
在 label_replace function and or
operator 的帮助下,可以在单个查询中执行多个 PromQL 查询。 label_replace
函数用于为每个 *_over_time()
结果赋予不同的名称,而 or
运算符用于将多个 *_over_time()
结果组合成一个响应。
例如,以下查询 returns min
、max
和 avg
过去一小时的 temperature
时间序列的值:
label_replace(min_over_time(temperature[1h]), "__name__", "min", "", ".*")
or
label_replace(max_over_time(temperature[1h]), "__name__", "max", "", ".*")
or
label_replace(avg_over_time(temperature[1h]), "__name__", "avg", "", ".*")
P.S。此查询可以简化为更小的 MetricsQL query via rollup 函数:
rollup(temperature[1h])
如果必须计算 min
、max
和 avg
以外的结果,则可以使用 aggr_over_time 函数。例如,以下查询计算过去一小时内 temperature
的 median
、min
和 max
:
aggr_over_time(
("median_over_time", "min_over_time", "max_over_time"),
temperature[1h]
)
此外,MetricsQL 提供了 alias and label_set 函数,当必须将名称或标签设置为特定值时,这些函数可能比 label_replace()
更易于使用。例如,以下 MetricsQL 查询等同于上面的 PromQL 查询:
alias(min_over_time(temperature[1h]), "min")
or
alias(max_over_time(temperature[1h]), "max")
or
alias(avg_over_time(temperature[1h]), "avg")
MetricsQL 还支持 union 函数,当必须将多个查询结果合并为一个响应时,可以使用该函数代替 or
运算符:
union(
alias(min_over_time(temperature[1h]), "min"),
alias(max_over_time(temperature[1h]), "max"),
alias(avg_over_time(temperature[1h]), "avg"),
)
Prometheus 具有例如获取给定数据点范围的最大值或最小值或...请参阅 documentation for more info.
现在,当我需要 min(data) 和 max(data) 以及 avg 时,...我需要发送单独的请求。我怎样才能在一个查询中实现这一点?
[更新]
从Brian的回复中我看出我的问题不够明确,所以我改一下:
我有一个以 15 秒为间隔一天的时间序列 "temperature"。 我想要每个小时(或最后一个小时,并不重要) min/max/avg/stddev, ...
使用 *_over_time()
函数,我需要为每个 min/max/avg/...(以及正确的时间间隔)发送一个查询。有没有一种方法可以在一个查询中这样做(所以基本上返回一个包含 min/max/avg/... 的 k-v-pairs 的散列)?
min(min_over_time(metric[1h]))
会让你这样做。
[更新]
最好为每个要计算的函数发送一个查询。您可以通过技巧将其合而为一,但它会更加复杂且难以维护。
在 label_replace function and or
operator 的帮助下,可以在单个查询中执行多个 PromQL 查询。 label_replace
函数用于为每个 *_over_time()
结果赋予不同的名称,而 or
运算符用于将多个 *_over_time()
结果组合成一个响应。
例如,以下查询 returns min
、max
和 avg
过去一小时的 temperature
时间序列的值:
label_replace(min_over_time(temperature[1h]), "__name__", "min", "", ".*")
or
label_replace(max_over_time(temperature[1h]), "__name__", "max", "", ".*")
or
label_replace(avg_over_time(temperature[1h]), "__name__", "avg", "", ".*")
P.S。此查询可以简化为更小的 MetricsQL query via rollup 函数:
rollup(temperature[1h])
如果必须计算 min
、max
和 avg
以外的结果,则可以使用 aggr_over_time 函数。例如,以下查询计算过去一小时内 temperature
的 median
、min
和 max
:
aggr_over_time(
("median_over_time", "min_over_time", "max_over_time"),
temperature[1h]
)
此外,MetricsQL 提供了 alias and label_set 函数,当必须将名称或标签设置为特定值时,这些函数可能比 label_replace()
更易于使用。例如,以下 MetricsQL 查询等同于上面的 PromQL 查询:
alias(min_over_time(temperature[1h]), "min")
or
alias(max_over_time(temperature[1h]), "max")
or
alias(avg_over_time(temperature[1h]), "avg")
MetricsQL 还支持 union 函数,当必须将多个查询结果合并为一个响应时,可以使用该函数代替 or
运算符:
union(
alias(min_over_time(temperature[1h]), "min"),
alias(max_over_time(temperature[1h]), "max"),
alias(avg_over_time(temperature[1h]), "avg"),
)