Docker stats: Métricas fáciles para contenedores

Dejadme que hoy os hable de una herramienta, llamada docker stats, que nos permite comprobar en directo el uso de los contenedores que tengamos desplegados. Ya sea el uso del procesador, de la memoria o de la red. Además, la información que nos ofrece se puede customizar, para ver únicamente lo que nosotros deseemos.

El comando docker stats muestra información en vivo de los contenedores que se estén ejecutando. Para limitar los datos a uno o más contenedores específicos, podemos especificar una lista de estos o bien separados por un espacio. También existe la posibilidad de seleccionar un contenedor detenido, no entonces no devolverán ningún dato.

Su uso es el siguiente:

docker stats [OPCIONES] [CONTENEDORES…]

Respecto a las opciones principales:

  • –all, -a Muestra información de todos los contenedores en funcionamiento
  • –format Información más amigable utilizando una plantilla en Go
  • –no-stream Se deshabilita la estadística de transmisión y solo se obtiene el primer resultado
  • –no-trunc No trunca la salida

Aprovechando el VPS que tengo creado en mi compañía de confianza Clouding.io, que tiene un buen puñado de contenedores en funcionamiento, vamos a ver el funcionamiento de la herramienta. Primero de todo veamos su uso básico.

$ docker stats

Con el resultado en mi caso:

CONTAINER ID        NAME                    CPU %     MEM USAGE / LIMIT     MEM %     NET I/O             BLOCK I/O           PIDS
0a5903c2b25f        wordpress_wordpress_1   0.01%     98.41MiB / 3.852GiB   2.49%     16.4MB / 21.3MB     71.6MB / 38.5MB     12
2460b583428a        wordpress_mariadb_1     0.09%     87.17MiB / 3.852GiB   2.21%     3MB / 9.8MB         61.8MB / 804MB      30
cb58260d6f6e        dudle                   0.08%     6.543MiB / 3.852GiB   0.17%     70.6kB / 111kB      7.52MB / 4.1kB      57
3274ba73ee01        odoo_web_1              0.01%     59.96MiB / 3.852GiB   1.52%     23.9kB / 777B       72.9MB / 0B         4
3e690a1674f5        odoo_db_1               0.01%     9.715MiB / 3.852GiB   0.25%     27.6kB / 846B       39.3MB / 49.8MB     7
32914ef36135        webdav                  0.00%     8.48MiB / 3.852GiB    0.21%     36.5kB / 3.08kB     32.8MB / 8.19kB     4
0595f0fdf591        nextcloud_app_1         0.00%     12.47MiB / 3.852GiB   0.32%     27.4kB / 0B         71.8MB / 4.1kB      6
35b5e2b70fdf        nextcloud_db_1          0.06%     76.15MiB / 3.852GiB   1.93%     24.6kB / 0B         78.5MB / 2.17MB     30
4201e2852e00        nextcloud_redis_1       0.14%     2.137MiB / 3.852GiB   0.05%     25.8kB / 0B         11.6MB / 0B         4
6878623e79e4        telegraf                0.03%     12.46MiB / 3.852GiB   0.32%     8.12MB / 84.3MB     63.4MB / 0B         11
686e93009c49        grafana                 0.02%     31.05MiB / 3.852GiB   0.79%     10.7MB / 7.36MB     79.8MB / 85MB       12
16f638dd7fed        influxdb                0.06%     212.2MiB / 3.852GiB   5.38%     1.18GB / 26.5MB     262MB / 2.73GB      1

Para muestra un botón:

Uso básico de docker stats

Tal y como se observa, nos muestra información del ID de los contenedores, el uso de CPU y memoria, el limite de memoria que pueden utilizar, el uso de la red, el uso de disco en lo que respecta a lectura y escritura, además de su PID

Ya he comentado que podemos mostrar la información de uno o varios contenedores, de la siguiente manera:

$ docker stats dudle 32914ef36135

Los contenedores se pueden llamar por su nombre o por su ID

Datos de contenedores

Si queremos formatear la salida, únicamente con la información que queramos, sería así:

$ docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" dudle 32914ef36135

Con el resultado:

CONTAINER           CPU %               MEM USAGE / LIMIT
dudle               0.06%               6.543MiB / 3.852GiB
32914ef36135        0.00%               8.48MiB / 3.852GiB

Formateo de la información

Cuando se usa la opción --format, el comando docker stats genera los datos exactamente como declara la plantilla o, cuando se usa la directiva de tabla, también incluye encabezados de columna.

Posición Descripción
.Container Nombre del contenedor o su ID
.Name Nombre del contenedor
.ID ID del contenedor
.CPUPerc Porcentaje de CPU
.MemUsage Memoria utilizada
.NetIO IO de la red
.BlockIO Block IO
.MemPerc Porcentaje de memoria
.PIDs Número de PIDs

Para más información os recomiendo la página de la herramienta, ubicada en la web de Docker

Si queréis obtener información mas vistosa, con información histórica correspondiente, podéis consultar la entrada que escribí en su día:

Controlar Docker Swarm con Telegraf, InfluxDB y Grafana

Y esto es todo. Espero que esta información os pueda ser de utilidad en algún momento. Nos vamos leyendo.