2

我正在尝试估计资源(cpu)请求和限制值,我想知道最近一个月使用 prometheus 的 pod 的最大 cpu 使用率。

我检查了这个问题,但无法得到我想要的从 Prometheus 查询中的返回值生成范围向量

我试过了,但似乎 max_over_time 并没有超过费率

max (  
  max_over_time(
    rate(
      container_cpu_usage_seconds_total[5m]
    )[30d]
  )
) by (pod_name)

无效参数“查询”:字符 64 处的解析错误:范围规范必须在度量选择器之前,但在 *promql.Call 之后

4

2 回答 2

6

您需要捕获内部表达式(容器 cpu 使用率)作为记录规则

- record: container_cpu_usage_seconds_total:rate5m
  expr: rate(container_cpu_usage_seconds_total[5m])

然后使用这个新的时间序列来计算 max_over_time:

max (  
  max_over_time(container_cpu_usage_seconds_total:rate5m[30d])
) by (pod_name)

这仅在 Prometheus 2.7 之前的版本中才需要,因为可以动态计算子查询,有关更多详细信息,请参阅此博客文章

但请记住,如果您打算使用此复合查询(过去 30 天内收集的数据的 max_per_time 的最大值)进行警报或可视化(而不是一次性查询),那么您仍然希望使用记录规则以提高查询的性能。它是经典的 CS 计算复杂度权衡(将记录规则存储为单独的时间序列所需的内存/存储空间与处理 30 天数据所需的计算资源!)

于 2019-11-10T11:09:51.970 回答
0

请尝试这样的事情:

max_over_time(sum(rate(container_cpu_usage_seconds_total{pod="pod-name-here-759b8f",container_name!="POD", container_name!=""}[1m])) [720h:1s])

于 2020-01-14T19:04:36.577 回答