使用 PromQL 分组

Posted

技术标签:

【中文标题】使用 PromQL 分组【英文标题】:Divide groups with PromQL 【发布时间】:2019-02-14 22:53:18 【问题描述】:

我想通过将使用的内核数除以 CPU 限制(可分配的内核数)来计算实际的 Container CPU 使用率。因此,我得到了 4 个 pod 的两个不同指标:

每个 pod 使用的核心数 每个 pod 的可用内核数

我的问题:

我想获取每个容器的 CPU 使用率(已用内核数/可用内核数)。

我尝试了什么:

这两个查询中的每一个都返回我想要的结果:

    每个 pod 当前使用的核心数:

(我使用 label_replace 是因为一个指标使用 pod_name 作为指标名称,而另一个使用 pod

label_replace(sum(rate(container_cpu_usage_seconds_totalpod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)")

回复:https://monosnap.com/direct/6EPuLF59HBJaYsAmKG6CM0fRPyUXDk

    每个 pod 的可用内核数:

sum(kube_pod_container_resource_limits_cpu_corespod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods") by (pod)

回复:https://monosnap.com/direct/dRBfitwcxHIrTRYDmYHwV5YkomYJjH

此查询无效(未返回任何数据点):

label_replace(sum(rate(container_cpu_usage_seconds_totalpod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)") / sum(kube_pod_container_resource_limits_cpu_corespod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods") by (pod)

我的问题:

如何实现查询,返回每个 pod 的 CPU 使用率(已用内核数/可用内核数)?

【问题讨论】:

【参考方案1】:

您还需要使用on() 函数。所以应该是这样的。

label_replace(sum(rate(container_cpu_usage_seconds_totalpod_name=~"rewe-bd-palantir-vernemq.*", container_name="vernemq"[1m])) by (pod_name), "pod", "$1", "pod_name", "(.*)") / on(pod) sum(kube_pod_container_resource_limits_cpu_corespod=~"rewe-bd-palantir-vernemq.*", container="vernemq", job="kubernetes-pods") by (pod)

【讨论】:

我找不到任何关于这个 on() 函数的文档。谁有链接?

以上是关于使用 PromQL 分组的主要内容,如果未能解决你的问题,请参考以下文章

PromQL:在按实例分组时访问实例的指标

在 PromQL/MetricsQL 中按时间分组和聚合

PromQL:rate() 函数的用途是啥?

PromQL的简单使用

PromQL 中的 MetricQL 函数

如何使用 PromQL 的 hour() 函数?