计算普罗米修斯中和函数的最大时间

时间:2017-07-13 01:29:44

标签: kubernetes monitoring prometheus

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

我有4个节点。我想计算空闲记忆。我希望得到这四个节点的总和。然后我想找到超过1天的最大值。所以,例如,

时间= t1 node1:500 MB node2:600 MB node3:200 MB node4:300 MB 总计= 1700 MB

时间= t2 node1:400 MB node2:700 MB node3:100 MB node4:200 MB 总计= 1300 MB

时间= t3 node1:600 MB node2:800 MB node3:1200 MB node4:1300 MB 总计= 3900 MB

时间= t4 node1:100 MB node2:200 MB node3:300 MB node4:400 MB 总计= 1000 MB

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

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

max_over_time(sum(node_memory_MemFree)[2m])

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Since 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巴西的文章中进行了解释:  https://www.robustperception.io/composing-range-vector-functions-in-promql/