Cómo supervisar el uso de recursos de contenedores de Docker

Aunque Docker es mucho más liviano que las máquinas virtuales tradicionales, demasiados contenedores pueden consumir rápidamente los recursos del host. A continuación, se explica cómo verificar el uso de hardware y monitorear los recuentos de procesos dentro de los contenedores.

Índice de contenidos
  1. El comando Estadísticas de Docker
  2. Obtener mas informacion
  3. Encuentre métricas de recursos con la API de Docker
  4. Ver procesos en ejecución
  5. Resumen

El comando Estadísticas de Docker

El mecanismo integrado de Docker para ver el consumo de recursos es docker stats. Este comando le brinda una vista tabular de sus contenedores. Cada contenedor muestra una transmisión en vivo de sus métricas críticas.

La salida del comando incluye el consumo de CPU y una medida de la red y el almacenamiento de cada contenedor durante su vida útil. La columna Memoria muestra el uso de memoria en tiempo real y el límite de memoria configurado en el gabinete. Cuando no se establece ningún límite, verá la cantidad de RAM disponible en su host. La columna final, PIDS, es un recuento del número de procesos iniciados por el contenedor.

Los contenedores bloqueados están excluidos de forma predeterminada. Puede agregarlos a la tabla pasando el -a (--all) bandera al comando. El uso de CPU y memoria no estará disponible, pero podrá ver métricas agregadas durante la vida útil del contenedor, como la actividad de la red.

Puede ver estadísticas de contenedores únicos y múltiples de la misma manera que otros contenedores comunes. docker Comandos CLI. Pase una lista de identificadores o nombres de contenedores separados por espacios. La salida mostrará las métricas de los contenedores especificados, eliminando todo lo demás.

docker stats first-container second-container

docker stats admite el formato personalizado para que pueda seleccionar solo las columnas que necesita. El --format flag acepta una cadena de marcador de posición Go que le permite crear vistas de datos personalizadas.

A continuación, se explica cómo mostrar los nombres de los contenedores con métricas de uso de memoria y CPU:

docker stats --format "table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}"

El table el tipo de formato antepone encabezados de columna a la salida. Omitirlo si desea datos brutos sin pestañas. Si usa regularmente la misma cadena de formato, considere agregarla como un alias de shell para facilitar el acceso.

Obtener mas informacion

Se puede obtener información más detallada sobre el uso de recursos de un contenedor examinando su grupo de control (cgroup). Este mecanismo del kernel rastrea el consumo de un grupo de procesos, exponiendo las métricas recopiladas en un pseudo-sistema de archivos.

Hay dos versiones del sistema cgroup disponibles. v2 solo es compatible con Docker 20.10 o posterior con el kernel de Linux v4.15. Las versiones anteriores usarán v1. La documentación de v2 aún está incompleta, por lo que puede ser más fácil trabajar con v1.

Para encontrar el cgroup de un contenedor, debe determinar qué versión está activa y conocer el ID completo del contenedor. Esta debe ser la versión completa, no el módulo truncado que se muestra en docker ps Y docker stats producción. Puedes encontrarlo corriendo docker ps --no-trunc.

Combine el ID del contenedor con la ruta del directorio del grupo de control de su sistema. Docker documenta las rutas para v1 y v2. Luego, puede inspeccionar el pseudo-sistema de archivos para encontrar estadísticas de recursos detalladas. Aquí está la ruta para encontrar el uso de memoria de un contenedor cuando se usa cgroups v1:

cat /sys/fs/cgroup/memory/docker/<full container id>/memory.stat

El archivo de memoria proporciona información detallada sobre el consumo, los límites, la paginación y el uso de intercambio.

Encuentre métricas de recursos con la API de Docker

Una forma más sencilla de acceder a esta información es a través de la API de Docker. Esto está habilitado de forma predeterminada a través del socket Unix del demonio Docker. El /containers/{id}/stats endpoint proporciona detalles detallados sobre el uso de recursos. Reemplazar {id} con su ID de contenedor.

curl --unix-socket /var/run/docker.sock "http://localhost/v1.41/containers/{id}/stats" | jq

estamos usando curl en este ejemplo. Se le indica que utilice el zócalo del demonio de Docker a través del --unix-socket bandera. La API de Docker devolverá los datos en formato JSON; esto se canaliza a jq para hacerlo más legible en la terminal.

Cada respuesta de la API contiene información detallada sobre el uso actual y pasado de los recursos del contenedor. Se trata de datos numéricos destinados al consumo de máquinas herramienta. Los valores se presentan "sin procesar" y pueden no ser comprensibles de inmediato sin un procesamiento posterior o asimilación en una herramienta de tablero.

Ver procesos en ejecución

Un comando separado, docker top, muestra la lista de procesos actuales de un contenedor especificado:

docker top my-container

Enumera la lista de procesos contenedor en el momento en que se ejecuta el comando. a diferencia de stats, no proporciona un flujo de datos en tiempo real. Puede ver el ID de cada proceso, el usuario que lo inició y el comando que se ejecuta.

También puede obtener esta información de la API. Utilice el mismo enfoque descrito anteriormente, reemplazando el /containers/{id}/stats punto final para /containers/{id}/top.

Docker no proporciona una forma integrada de ver el uso de recursos por proceso. Si desea esta información, es mejor adjuntarla al contenedor e instalarla. top o htop. Estas herramientas le brindarán una visión mucho más profunda de la actividad del contenedor.

docker exec -it my-container sh

# substitute your package manager's commands
apt update && apt install htop -y

htop

Resumen

El demonio de Docker recopila y expone estadísticas históricas y de consumo de recursos en tiempo real para contenedores. Puede acceder a una vista gráfica básica de los datos utilizando docker stats pero para lecturas más avanzadas, necesita la API de Docker o la inspección manual del grupo de control.

También puede enumerar los procesos en ejecución de un contenedor, pero el docker top El comando no proporciona ninguna indicación de métricas de recursos. Esto significa que tiene un uso limitado durante la inspección. porque un gabinete contiene un exceso de CPU o memoria. Deberá iniciar sesión manualmente e inspeccionar desde el interior.

Las herramientas de Docker tienen como objetivo el monitoreo y la observabilidad generales, no una inspección detallada para facilitar la resolución de problemas. La mayoría de las veces, son perfectamente adecuadas, pero comprenden bien las herramientas de supervisión de Linux más amplias que funcionan. dentro Los contenedores serán más efectivos en la resolución de problemas.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir Change privacy settings