在 Prometheus 中的 sum 函数上计算随时间变化的最大值

问题描述 投票:0回答:2

我正在我的 kubernetes 集群中运行 prometheus。 我在 kubernetes 中有以下系统:

我有4个节点。我想计算可用内存。我想要这四个节点的总和。然后我想找到 1 天内的最大值。所以,举个例子,

时间=t1 节点1:500 MB 节点2:600 MB 节点3:200 MB 节点4:300 MB 总计 = 1700 MB

时间=t2 节点1:400 MB 节点2:700 MB 节点3:100 MB 节点4:200 MB 总计 = 1300 MB

时间=t3 节点1:600 MB 节点2:800 MB 节点3:1200 MB 节点4:1300 MB 总计 = 3900 MB

时间=t4 节点1:100 MB 节点2:200 MB 节点3:300 MB 节点4:400 MB 总计 = 1000 MB

所以,我的查询的答案应该是 3900 MB。我无法计算总和的 max_over_time 。

我已经这样做了(根本不起作用):

max_over_time(sum(node_memory_MemFree)[2m])
kubernetes monitoring prometheus
2个回答
17
投票

版本2.7(2019年1月)起,Prometheus支持子查询:

max_over_time( sum(node_memory_MemFree_bytes{instance=~"foobar.*"})[1d:1h] )

(过去 2 天的指标,分辨率为 1 小时。)

阅读文档以获取有关使用记录规则的更多信息:https://prometheus.io/docs/prometheus/latest/querying/examples/#subquery

但是,请注意博客推荐:

结语

虽然子查询非常方便地用来代替记录规则,但不必要地使用它们会对性能产生影响。为了提高效率,繁重的子查询最终应该转换为记录规则。

也不建议在记录规则中包含子查询。如果您确实需要在记录规则中使用子查询,请创建更多记录规则。

记录规则的使用在brian brazil文章中有解释: https://www.robustperception.io/composition-range-vector-functions-in-promql/


2
投票

这在一个表达式中是不可能的,您需要对中间表达式使用记录规则。看 https://www.robustperception.io/composition-range-vector-functions-in-promql/

© www.soinside.com 2019 - 2024. All rights reserved.