Docker proporciona el comando docker stats para monitorizar el uso de CPU, memoria, etc de los contenedores en ejecución:

$ sudo docker stats
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
51b4b11494dc        jenkins             0.21%               179.6MiB / 1.877GiB   9.35%               452kB / 1.12MB      1.27GB / 7.02MB     43
46a343a03526        sonarqube           2.65%               637.8MiB / 1.877GiB   33.19%              58.5MB / 61.4MB     8.15GB / 496MB      163
aee4587d47c1        gogs                0.00%               20.25MiB / 1.877GiB   1.05%               5.61MB / 6.55MB     961MB / 2.7MB       18
9dd9023adf46        maildev             0.00%               2.535MiB / 1.877GiB   0.13%               742kB / 1.91MB      246MB / 0B          10
4426d99884ae        mysql-gogs          0.12%               8.59MiB / 1.877GiB    0.45%               1.67MB / 6.12MB     259MB / 573MB       32
54d330316fba        portainer           0.00%               3.219MiB / 1.877GiB   0.17%               487kB / 5.8MB       65MB / 65.5kB       5
6966a54978df        mysql-sonarqube     0.37%               13.05MiB / 1.877GiB   0.68%               206MB / 142MB       998MB / 148MB       34
d3202c39fbe4        nexus               2.98%               405.7MiB / 1.877GiB   21.11%              1.51MB / 20.4MB     19.8GB / 946MB      118

Al ejecutar el comando tal cual, se muestra el consumo en tiempo real, actualizándo los valores cada dos o tres segundos aproximadamente (al estilo de top).

Podemos lanzar el comando para obtener el estado de manera puntual (es decir, que no se actualice automáticamente) mediante el parámetro --no-stream.

Este comando puede ser la base de un sistema de monitorización sencillo, pero para ello deberíamos exportar la salida de docker stats --no-stream a un fichero; usando la redirección de Linux por ejemplo: docker stats --no-stream > stats.txt.

El fichero lo podemos importar después en una herramienta que pueda ingestar estos valores separados por tabulaciones… O podemos usar el parámetro --format, para definir convertir la salida en un fichero CSV:

sudo docker stats --no-stream --format "{{ .Container }}, {{ .Name }}, {{ .MemUsage }}, {{ .MemPerc }}, {{ .CPUPerc }}" >> stats.csv

Con esta parametrización, la salida del comando sería:

$ cat stats.csv
$ 51b4b11494dc, jenkins, 180.2MiB / 1.877GiB, 9.38%, 0.19%
46a343a03526, sonarqube, 634.1MiB / 1.877GiB, 33.00%, 3.35%
aee4587d47c1, gogs, 20.88MiB / 1.877GiB, 1.09%, 0.00%
9dd9023adf46, maildev, 2.266MiB / 1.877GiB, 0.12%, 0.00%
4426d99884ae, mysql-gogs, 8.594MiB / 1.877GiB, 0.45%, 0.08%
54d330316fba, portainer, 3.219MiB / 1.877GiB, 0.17%, 0.00%
6966a54978df, mysql-sonarqube, 12.86MiB / 1.877GiB, 0.67%, 0.08%
d3202c39fbe4, nexus, 413.8MiB / 1.877GiB, 21.53%, 2.34%
$

Si lo ejecutamos de manera periódica -vía cron- tenemos la base para una monitorización simple de nuestros contenedores…

Quizás hay que darle una vuelta, pero teniendo la información, ahora la ¡imaginación es el límite!