如何在kubernetes中计算容器的cpu使用情况,并使用prometheus进行监控?

k5ifujac  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(5)|浏览(164)

我想计算一个kubernetes集群中所有pod的cpu使用情况。我发现Prometheus中的两个指标可能有用:

container_cpu_usage_seconds_total: Cumulative cpu time consumed per cpu in seconds.
process_cpu_seconds_total: Total user and system CPU time spent in seconds.

Cpu Usage of all pods = increment per second of sum(container_cpu_usage_seconds_total{id="/"})/increment per second of sum(process_cpu_seconds_total)

字符串
但是,我发现container_cpu_usage{id="/"}每秒的增量大于sum(process_cpu_seconds_total)的增量。因此,使用可能大于1…

oyjwcjzk

oyjwcjzk1#

我使用它来获取集群级别的CPU使用率:

sum (rate (container_cpu_usage_seconds_total{id="/"}[1m])) / sum (machine_cpu_cores) * 100

字符串
我还跟踪每个pod的CPU使用情况。

sum (rate (container_cpu_usage_seconds_total{image!=""}[1m])) by (pod_name)


我在GitHub上有一个完整的kubernetes-prometheus解决方案,也许可以帮助您获得更多指标:https://github.com/camilb/prometheus-kubernetes
x1c 0d1x的数据


waxmsbnn

waxmsbnn2#

我创建了自己的prometheus导出器(https://github.com/google-cloud-tools/kube-eagle),主要是为了更好地了解每个节点的资源利用情况。但它也提供了一种更直观的方式来监控CPU和RAM资源。获取群集范围CPU使用率的查询如下所示:

sum(eagle_pod_container_resource_usage_cpu_cores)

字符串
但是你也可以很容易地通过命名空间、节点或节点池获得CPU使用情况。

jaql4c8m

jaql4c8m3#

以下查询返回过去5分钟内每个容器使用的CPU平均数:

rate(container_cpu_usage_seconds_total{container!~"POD|"}[5m])

字符串
可以将方括号中的lookbehind窗口(在上述情况下为5m)更改为所需的值。请在此处查看可能的持续时间值。
container!~"POD|"过滤器删除与cgroups层次结构相关的指标(更多细节请参见此答案)和例如pause容器(参见these docs)。
由于每个pod可以包含多个容器,因此可以使用以下查询返回过去5分钟内每个pod使用的CPU平均数:

sum(
  rate(container_cpu_usage_seconds_total{container!~"POD|"}[5m])
) by (namespace,pod)

y0u0uwnf

y0u0uwnf4#

你也可以使用下面的查询:

avg (rate (container_cpu_usage_seconds_total{id="/"}[1m]))

字符串

hpxqektj

hpxqektj5#

指标定义

  • container_cpu_usage_seconds_total-特定容器的CPU使用时间(以秒为单位),顾名思义。在此之上的速率将显示容器每秒使用多少CPU秒。
  • container_spec_cpu_period-表示跟踪容器CPU利用率的时间段。我将其理解为CPU“周期”的持续时间。对于docker容器,通常为100000微秒。
  • container_spec_cpu_quota-您的容器在每个cpu_period中有多少CPU时间(以微秒为单位)-结果是将“CPU单位”乘以container_spec_cpu_period只有在为容器定义限制时才有

container_spec_cpu_quota / container_spec_cpu_period实际上会告诉你每秒有多少CPU秒,那么容器的CPU使用率可能是container_cpu_usage_seconds_total/(container_spec_cpu_quota / container_spec_cpu_period)。
一个样品

sum(rate(container_cpu_usage_seconds_total{name!~".*prometheus.*", image!="", container_name!="POD"}[5m])) by (pod_name, container_name)
/sum(container_spec_cpu_quota{name!~".*prometheus.*", image!="", container_name!="POD"}
  /container_spec_cpu_period{name!~".*prometheus.*", image!="", container_name!="POD"}) by (pod_name, container_name)

字符串
资料来源:
Average CPU % usage per container

相关问题