7

如果我使用以下查询

topk(5,sum(container_memory_usage_bytes{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}) by (kubernetes_namespace,kubernetes_container_name))

它返回预期的 5 个结果。

然而随着

topk(5,sum(irate(container_cpu_usage_seconds_total{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}[20s])) by (kubernetes_namespace,kubernetes_container_name))

返回大约 18 个结果。知道为什么会这样吗?我需要在第二个查询中进行哪些更改才能仅获得前 5 名?

4

3 回答 3

6

有同样的问题,我在查询中打开了“即时”,我得到了正确的金额

于 2019-12-05T15:01:32.887 回答
2

从角度来看,这些是相同的查询topk,两者都应该返回不超过 5 个结果。

我是否正确地说您不是将其作为查询运行,而是作为图表运行?如果是这样,您希望选择哪 5 个?

于 2016-08-05T07:39:46.840 回答
0

以下解决方案可以帮助使用 Prometheus 的每个人:

Formula: sum(irate(container_cpu_usage_seconds_total{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}[20s])) by (kubernetes_namespace,kubernetes_container_name)

如果我们查询过去 3 小时,计算 avg_over_time 的 topk(公式[$__range: 4h ])。

topk(5,avg_over_time(sum(irate(container_cpu_usage_seconds_total{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}[20s])) by (kubernetes_namespace,kubernetes_container_name)[$__range:4h]))

然后将该值添加到现有公式中:

Final Formula: sum(irate(container_cpu_usage_seconds_total{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}[20s])) by (kubernetes_namespace,kubernetes_container_name) + topk(5,avg_over_time(sum(irate(container_cpu_usage_seconds_total{kubernetes_container_name=~".+", kubernetes_namespace=~".+"}[20s])) by (kubernetes_namespace,kubernetes_container_name)[$__range:4h]))*0

为我工作。不要忘记将 topk 结果乘以0

于 2021-11-12T07:39:44.550 回答