3

有什么方法可以让我在 docker 容器内而不是在它之外获取 cpu 百分比?!docker stats DOCKER_ID显示的百分比正是我需要的,但我需要它作为变量。我需要在容器本身内获取 cpu 百分比并对其进行一些操作。我研究了不同的东西,例如 cgroup 和 docker rest API,但它们不提供 cpu 百分比。如果有办法在容器内而不是在容器外获取 cpu 百分比将是完美的。我在下面的链接中找到了某人提供的一种解决方案,该解决方案仍在其余 api 的容器之外,但是我并没有真正了解如何计算百分比。

以百分比形式获取 Docker 容器 CPU 使用率

4

2 回答 2

0

我使用了ctop,它提供了比docker_stats更图形化的方式, 但我发现它显示的 CPU 百分比比 Top 为系统显示的要高。基本上它显示相对于根进程。Docker 容器作为子进程运行

举例说明

首先找到所有容器运行的根进程

docker -containerd-shim - ..Docker 架构分为四个组件:Docker 引擎、containerd、containerd-shm 和 runC。这些二进制文件分别称为 docker、docker-containerd、docker-containerd-shim 和 docker-runc。 - https://hackernoon.com/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426

root 1843 1918 0 Aug31 ? 00:00:00 docker-containerd-shim 611bd9... /var/run/docker/libcontainerd/611bd92.... docker-runc

您可以使用该命令查看所有正在运行的容器

pstree -p 1918

现在说我们有兴趣查看fluentdb的CPU消耗。

获得孩子 pid 的简单方法是

pstree -p 1918 |grep fluentd

这给出了 21670

现在您可以运行top -p 21670查看此子进程的 CPU 份额,也 top -p 1918可以查看父进程的整体 CPU。

使用 cadvisor 收集到 Promethus 并在 Grafana 中查看,这是容器使用的实际 CPU 百分比最接近和最准确的表示;相对于主机。该图说明了这一点。cTop 和 docker stats 给出 23% 作为 CPU 百分比。docker 父进程的实际 CPU 百分比约为 2%,Grafana 的 cAdvisor 输出显示了与主机相关的容器 CPU 百分比的最“准确”值。

graphana-cadvisor-top-ptree-docker

于 2017-09-01T09:17:50.143 回答
0

您可以使用 Axibase 时间序列数据库存储驱动程序安装 Google cAdvisor。它将收集和存储以核心单位和百分比衡量的 CPU 利用率。

带有如何报告 CPU 示例的屏幕截图位于页面底部:https ://axibase.com/products/axibase-time-series-database/writing-data/docker-cadvisor/

在集中式配置中,ATSD 容器本身可以从安装在多个 docker 主机上的多个 cAdvisor 实例中获取指标。

编辑 1:计算容器内运行的所有进程的总 CPU 使用率的一个衬垫。调整 -d 参数以更改样本之间的间隔以平滑尖峰:

top -b -d 5 -n 2 | awk '$1 == "PID" {block_num++; next} block_num == 2 {sum += $9;} END {print sum}'
于 2015-07-21T12:05:32.810 回答