2015-07-21 189 views
3

有没有什么办法可以获得码头集装箱内的cpu百分比,而不是在它之外? docker stats DOCKER_ID显示正是我需要的百分比,但我需要它作为变量。我需要在容器内部获得cpu百分比,并对其进行一些操作。 我已经看过不同的东西,如cgroup和docker rest API,但它们不提供cpu百分比。如果有一种方法可以获得容器内的cpu百分比,而不是外部的,那么它将是完美的。我在下面的链接中找到了一个由某人提供的解决方案,该解决方案仍然在其他api的容器之外,但是我没有真正知道如何计算百分比。码头CPU百分比

Get Docker Container CPU Usage as Percentage

回答

0

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

截图用的CPU的报告方式位于所述页的底部的例子:https://axibase.com/products/axibase-time-series-database/writing-data/docker-cadvisor/

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

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

top -b -d 5 -n 2 | awk '$1 == "PID" {block_num++; next} block_num == 2 {sum += $9;} END {print sum}' 
+0

感谢您的回复,但是这并未如我所料。它让获得单个CPU百分比的事情变得复杂化,并且从外部观察容器。它在axibase容器中的某处保存了我必须通过容器并提取cpu的地方。不仅仅是一个简单的方法来获得容器本身的cpu百分比,就像docker的统计数据一样吗? – secret

+0

公平起见,docker stats控制台在主机级收集所选容器的CPU使用率,是否正确?它只是不会将其存储在任何数据库中,但仍然无法从容器中获得这些统计信息。 您是否愿意测量容器CPU使用率作为容器内运行的所有进程的总CPU使用率? –

+0

是的,我希望容器的CPU使用总量不是按进程进行处理。 – secret

0

我已经使用ctop这给出了一个更图形化的方式比docker_stats 但是我发现,它显示CPU个百分点,比一路走高什么顶部显示为系统。基本上它是相对于根本过程而言的。 Docker容器作为运行的子进程

为了用一个例子

首先说明找到在其下所有的容器中运行

搬运工-containerd-垫片根进程 - ..the泊坞架构被分成四个组件: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。

随着管理人员收集到Promethus并在Grafana中查看,这是容器使用的实际CPU百分比的最接近和最准确的表示形式;关于主机。该图说明了这一点。 cTop和码头统计数据占CPU百分比的23%。 Docker父进程的实际CPU百分比约为2%,而Grafana的cAdvisor输出显示了与主机相关的容器CPU百分比的最“准确”值。

graphana-cadvisor-top-ptree-docker