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!