如何用普罗米修斯计算kubernetes中容器的cpu使用情况作为监控?

Hao*_* Ge 19 kubernetes prometheus

我想计算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)
Run Code Online (Sandbox Code Playgroud)

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

Cam*_*mil 28

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

sum (rate (container_cpu_usage_seconds_total{id="/"}[1m])) / sum (machine_cpu_cores) * 100
Run Code Online (Sandbox Code Playgroud)

我还跟踪每个pod的CPU使用情况.

sum (rate (container_cpu_usage_seconds_total{image!=""}[1m])) by (pod_name)
Run Code Online (Sandbox Code Playgroud)

我在GitHub上有一个完整的kubernetes-prometheus解决方案,也许可以帮助你提供更多指标:https://github.com/camilb/prometheus-kubernetes

在此输入图像描述

在此输入图像描述

  • 我可以确认 `sum (rate (container_cpu_usage_seconds_total{id="/"}[1m])) / sum (machine_cpu_cores) * 100 ` 是否代表 cpu 使用率的百分比,或者只是容器消耗的核心数? (7认同)
  • 如何使用prompql计算pod的内存使用情况? (3认同)

val*_*ala 12

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

rate(container_cpu_usage_seconds_total{container!~"POD|"}[5m])
Run Code Online (Sandbox Code Playgroud)

方括号中的后视窗口(5m在上面的情况下)可以更改为所需的值。请参阅此处可能的持续时间值。

过滤container!~"POD|"器删除与 cgroups 层次结构相关的指标(有关更多详细信息,请参阅此答案pause)和容器等指标(请参阅这些文档)。

由于每个容器pod可以包含多个容器,因此可以使用以下查询返回过去 5 分钟内每个 Pod 平均使用的 CPU 数量:

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


ken*_*tor 7

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

sum(eagle_pod_container_resource_usage_cpu_cores)
Run Code Online (Sandbox Code Playgroud)

但是您也可以通过命名空间、节点或节点池轻松获取 CPU 使用率。

  • 这个答案是非常被低估的/很棒的工具。Prometheus 的一个大问题是缺乏标准化。kubernetes 资源限制和请求基于 milli cpu Prometheus Metrics 不在 Milli CPU 上进行标准化是没有意义的,我知道 Prometheus 不仅仅在 Kubernetes 上运行,但是您不能导出两种指标样式吗为了标准化,旁边甚至做 [经典 cpu % 使用] * 100 / 1000 进行到毫 CPU 的逻辑转换? (3认同)

zan*_*ngw 5

指标定义

\n
    \n
  • container_cpu_usage_seconds_total- 顾名思义,特定容器的 CPU 使用时间(以秒为单位)。除此之外的速率将显示容器每秒使用多少个 CPU 秒。

    \n
  • \n
  • container_spec_cpu_period- 表示跟踪容器 CPU 利用率的时间段。我将其理解为 CPU“周期”的持续时间。对于 docker 容器来说通常100000是微秒。

    \n
  • \n
  • container_spec_cpu_quota- 您的容器在每个 cpu_period 中拥有多少 CPU 时间(以微秒为单位)\xe2\x80\x94 将“CPU 单元”乘以container_spec_cpu_period. 仅当您为容器定义了限制时,您才拥有它

    \n
  • \n
\n

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

\n
\n

样品一份

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

来源:

\n

每个容器的平均 CPU 使用率%

\n