docker资源的监控方案

如何监控docker容器整体的资源利用率呢?如何监控独立docker容器的资源利用率呢?

先说结论:前者用kubesphere或者rancher(大厂都是自己搞的监控系统);后者使用命令docker stats 容器id

有一个坑需要大家了解! 如果使用命令 docker exec 容器id /bin/bash 在容器中执行命令,并使用top进行监控,监控的是整个宿主机的资源!

详解docker stats

接下来我重点介绍一下docker stats命令的使用

默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容,输出结果如下:ctrl + c 终止命令输出。

详解docker容器的资源监控方案_docker

输出参数含义如下:

[CONTAINER ID]:显示容器的 ID。

[Name]:显示容器名称。

[CPU %]:CPU 的使用情况。

[MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。

[MEM %]:以百分比的形式显示内存使用情况。

[NET I/O]:网络 I/O 数据。

[BLOCK I/O]:磁盘 I/O 数据。

[PIDS]:PID 号。

如果不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态:

docker stats  --no-stream 容器id

我们还可以格式化docker stats 的输出结果,例如只显示容器id和cpu的信息,可以执行如下命令

docker stats --format "{{.ID}}: {{.CPUPerc}}"

详解docker容器的资源监控方案_Memory_02

docker stats --format 详细参数介绍如下:

.Container    Container name or ID

.Name          Container name

.ID                Container ID

.CPUPerc     CPU 利用率

.MemUsage  Memory 使用情况

.NetIO           Network IO

.BlockIO        Block IO

.MemPerc      Memory percentage (Windows不可用)

.PIDs               Number of PIDs (Windows不可用)

docker资源日志图像生成思路

如果我们想生成漂亮的图形界面,实现思路如下,

1.执行命令 docker stats --format "{{.Container}}: {{.CPUPerc}}">file , 生成cpu数据(同理生成内存、磁盘以及网络等数据)

 2.然后解析file中的数据,生成图形界面(可以考虑python的 matplotlib库)