我如何在 Kubernetes 中使用 Prometheus 获取 pod 的 (milli)core CPU 用法?
How do I get a pod's (milli)core CPU usage with Prometheus in Kubernetes?
我 运行 v1.9.2
Kubernetes 的自定义设置并使用 Prometheus v2.1.0
抓取各种指标。其中,我抓取了 kubelet
和 cAdvisor
指标。
我想回答这个问题:“在我的部署中由 requests
和 limits
定义的 CPU 资源中有多少实际被 pod 使用(及其容器)以(毫)核为单位?"
有很多可用的抓取指标,但没有这样的。也许可以用CPU使用时间秒数来计算,但我不知道怎么算。
我认为这是不可能的 - 直到一个朋友告诉我她 运行 在她的集群中有一个 Heapster,它在内置的 Grafana 中有一个图表 确切地告诉 那:它显示了 pod 及其容器在 (milli)cores 中的个别 CPU 使用情况。
由于 Heapster 还使用 kubelet
和 cAdvisor
指标,我想知道:我怎样才能计算出相同的指标? InfluxDB 中的指标名为 cpu/usage_rate
,但即使使用 Heapster 的代码,我也无法弄清楚他们是如何计算它的。
感谢任何帮助,谢谢!
我们使用 container_cpu_usage_seconds_total
指标来计算 Pod CPU 使用情况。该指标包含 容器被核心 消耗的 CPU 秒总量(这很重要,因为一个 Pod 可能包含多个容器,每个容器都可以跨多个调度核心;但是,该指标有一个 pod_name
注释,我们可以将其用于聚合)。特别感兴趣的是该指标的 变化率 (可以使用 PromQL's rate()
function 计算)。如果它在一秒内增加 1,则 Pod 在该秒内消耗 1 CPU 个核心(或 1000 milli-cores)。
以下 PromQL 查询就是这样做的:计算所有 Pods(使用 sum(...) by (pod_name)
操作)平均五分钟的 CPU 使用情况:
sum(rate(container_cpu_usage_seconds_total[5m])) by (pod_name)
以下 PromQL 查询 returns per-pod 使用的 CPU 个内核,从 Kubernetes v1.16 和更新版本开始:
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)
需要 {container!=""}
过滤器来过滤掉 cgroups 分层统计信息,它已经包含在 per-container 统计信息中。有关详细信息,请参阅 this answer。
以下 PromQL 查询必须用于 v1.16 以下的 Kubernetes,因为它使用不同的标签名称(例如 container_name
而不是 container
和 pod_name
而不是 pod
- 详见 this issue):
sum(rate(container_cpu_usage_seconds_total{container_name!=""}[5m])) by (pod_name)
我 运行 v1.9.2
Kubernetes 的自定义设置并使用 Prometheus v2.1.0
抓取各种指标。其中,我抓取了 kubelet
和 cAdvisor
指标。
我想回答这个问题:“在我的部署中由 requests
和 limits
定义的 CPU 资源中有多少实际被 pod 使用(及其容器)以(毫)核为单位?"
有很多可用的抓取指标,但没有这样的。也许可以用CPU使用时间秒数来计算,但我不知道怎么算。
我认为这是不可能的 - 直到一个朋友告诉我她 运行 在她的集群中有一个 Heapster,它在内置的 Grafana 中有一个图表 确切地告诉 那:它显示了 pod 及其容器在 (milli)cores 中的个别 CPU 使用情况。
由于 Heapster 还使用 kubelet
和 cAdvisor
指标,我想知道:我怎样才能计算出相同的指标? InfluxDB 中的指标名为 cpu/usage_rate
,但即使使用 Heapster 的代码,我也无法弄清楚他们是如何计算它的。
感谢任何帮助,谢谢!
我们使用 container_cpu_usage_seconds_total
指标来计算 Pod CPU 使用情况。该指标包含 容器被核心 消耗的 CPU 秒总量(这很重要,因为一个 Pod 可能包含多个容器,每个容器都可以跨多个调度核心;但是,该指标有一个 pod_name
注释,我们可以将其用于聚合)。特别感兴趣的是该指标的 变化率 (可以使用 PromQL's rate()
function 计算)。如果它在一秒内增加 1,则 Pod 在该秒内消耗 1 CPU 个核心(或 1000 milli-cores)。
以下 PromQL 查询就是这样做的:计算所有 Pods(使用 sum(...) by (pod_name)
操作)平均五分钟的 CPU 使用情况:
sum(rate(container_cpu_usage_seconds_total[5m])) by (pod_name)
以下 PromQL 查询 returns per-pod 使用的 CPU 个内核,从 Kubernetes v1.16 和更新版本开始:
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)
需要 {container!=""}
过滤器来过滤掉 cgroups 分层统计信息,它已经包含在 per-container 统计信息中。有关详细信息,请参阅 this answer。
以下 PromQL 查询必须用于 v1.16 以下的 Kubernetes,因为它使用不同的标签名称(例如 container_name
而不是 container
和 pod_name
而不是 pod
- 详见 this issue):
sum(rate(container_cpu_usage_seconds_total{container_name!=""}[5m])) by (pod_name)