Cómo supervisar los registros de contenedores de Docker – CloudSavvy IT

Docker agrega automáticamente los flujos de error y de salida estándar del contenedor (stdout/stderr) en las fuentes de registro que conserva el demonio de Docker. Puede monitorear fácilmente los registros para comprender qué sucede en sus contenedores.

Los registros contienen la salida que vería en su terminal cuando se adjunta a un contenedor en modo interactivo (-it). Los registros solo estarán disponibles si el proceso de primer plano en su contenedor realmente emite algún resultado. Debe asegurarse de que sus contenedores registren errores stderr para que los comandos de Docker puedan exponerlos.

Puede ver los registros de contenedores en cualquier momento durante el ciclo de vida de un contenedor. Cuando se está ejecutando un contenedor, puede transmitir registros en tiempo real. Para los contenedores detenidos, puede acceder a todos los registros capturados antes de la terminación.

Visualización de registros de contenedores

Para ver troncos de contenedores, utilizar el docker logs mando:

docker logs my-container

Reemplazar my-container con el nombre o ID del contenedor que desea inspeccionar. Puedes usar docker ps -a para obtener los ID y nombres de sus contenedores.

La logs comando imprime la salida del registro completo del contenedor en su terminal. La salida no será continua. Si desea seguir transmitiendo nuevos registros, agregue el --follow bandera al comando. Esto es equivalente a usar tail -f con archivos de registro regulares en su máquina.

Personalizar lo que se muestra

La docker logs El comando admite varios indicadores que le permiten ajustar su salida:

  • –Marcas de tiempo – Mostrar marcas de tiempo completas al comienzo de cada línea de registro.
  • –Hasta y --since – Estas banderas le permiten buscar líneas registradas durante un período de tiempo particular. Pase una marca de tiempo completa (2021-04-30T20:00:00Z) o un tiempo familiar amistoso (p. ej. 1h = Hace 1 hora).
  • -cola – Obtener un número determinado de líneas del registro. --tail 10 mostrará las últimas diez líneas registradas por el contenedor.
  • -detalles – Esta es una bandera especial que agrega información adicional a la salida del registro, según las opciones pasadas al controlador de registro. Veremos los controladores de registro en la siguiente sección. Valores típicos mostrados con --details incluir etiquetas de contenedores y variables de entorno.

Puede combinar estos indicadores para obtener registros en el formato que necesite. La until, since y tail las banderas no tendrán efecto si estás usando follow para transmitir continuamente datos de registro.

Controladores de registro de Docker

Docker recopila y almacena registros de contenedores utilizando uno de varios controladores de registro. Puede configurar el controlador de registro activo por contenedor. Cuando no se especifica ningún controlador de registro, Docker usa el json-file conductor.

Este controlador almacena registros de contenedor en un archivo JSON. Este formato es bastante legible por humanos y puede ser consumido fácilmente por herramientas de terceros. Si no va a acceder a los archivos de registro directamente, cambie al local El controlador le ahorrará algo de espacio de almacenamiento. Utiliza un formato de almacenamiento de registros personalizado.

Otros controladores de registro integrados incluyen syslog (escribe al syslog demonio ejecutándose en su máquina), journald (usa una carrera journald instancia) y fluentd (usar un fluentd demonio). Los controladores también están disponibles para Amazon CloudWatch, Google Cloud Platform, Event Tracing para Windows y otras soluciones de monitoreo de registros.

Docker admite controladores de registro de terceros a través de complementos. Puede encontrar controladores en Docker Hub. Para instalar un controlador de complemento, ejecute docker plugin install plugin-name. Luego podrá hacer referencia a él como un controlador de registro como plugin-name.

Especificar un controlador de registro

Puede especificar el controlador de registro para un contenedor pasando el --log-driver bandera a docker run:

docker run --log-driver systemd my-image:latest

Puede cambiar el controlador de registro predeterminado de forma global actualizando la configuración del demonio de Docker. Editar (o crear) /etc/docker/daemon.json. Selecciona el log-driver clave para el nombre de un controlador de registro. Docker usará este controlador para todos los contenedores creados sin un --log-driver bandera.

{
    "log-driver": "systemd"
}

Muchos controladores de registro vienen con sus propias opciones de configuración. Estos se establecen utilizando el --log-opts bandera del contenedor, o log-opts en daemon.json. Aquí hay un ejemplo relevante para el valor predeterminado. json-file conductor. Indica a Docker que rote los archivos de registro una vez que superen los 8 MB. Solo se conservarán cinco archivos a la vez.

docker run

docker run --log-driver json-file --log-opts max-size=8M --log-opts max-file=5

/etc/docker/daemon.json

{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "8M",
        "max-file": 5
    }
}

Modos de entrega del conductor

Los registros se pueden entregar en modo de bloqueo o sin bloqueo. Docker bloquea la entrega de forma predeterminada. Los registros del contenedor se enviarán al conductor de inmediato. Esto garantiza la entrega de registros, pero podría afectar el rendimiento. La aplicación esperará hasta que se complete la escritura del registro. Esto puede causar un retraso perceptible si el controlador de registro está ocupado.

Cuando está en modo sin bloqueo, Docker escribe registros en un búfer en memoria. El contenedor no necesita esperar a que el controlador de registro complete su escritura. Esto puede mejorar significativamente el rendimiento en máquinas activas con almacenamiento lento.

La compensación con el modo sin bloqueo es la posibilidad de que se pierdan registros. Esto puede ocurrir cuando los registros se emiten más rápidamente de lo que el controlador puede procesarlos. El búfer en memoria podría llenarse, haciendo que los registros en caché se borren antes de que se entreguen al controlador.

Puede habilitar la entrega sin bloqueo configurando el mode opción de registro, ya sea con --log-opts o daemon.json. Puede establecer el tamaño del búfer de registro en memoria con el max-buffer-size opción. Establecer este valor alto reduce el riesgo de pérdida de registros, siempre que tenga suficiente RAM disponible.

docker run --log-opt mode=non-blocking --log-opt max-buffer-size=8M my-image:latest

Mejores prácticas de registro

Sus contenedores deben funcionar con el sistema de registro de Docker siempre que sea posible. Emitiendo registros a stdout y stderr permite que Docker y otras herramientas los agreguen de forma estandarizada.

La salida del registro no necesita incluir marcas de tiempo. Los controladores de registro de Docker registrarán automáticamente la hora a la que ocurrió un evento.

A veces puede tener requisitos de registro complejos que docker logs solo no puede satisfacer. Si ese es el caso, es posible que deba implementar su propia solución de registro dentro de su contenedor. Puede almacenar registros directamente en el sistema de archivos, utilizando un volumen Docker o llamar a un servicio API externo.

Algunas pilas requieren un contenedor de registro dedicado que se encuentre junto a los contenedores de su aplicación. El contenedor de registro, a menudo llamado «sidecar», lee archivos de registro temporales que los contenedores de su aplicación crean en un volumen Docker compartido. El sidecar maneja la agregación de estos registros en un formato que se puede cargar en un servicio de monitoreo de registros.

Este enfoque puede ser útil para implementaciones más complejas, aunque es más complicado de configurar y escalar. Por lo general, lo deja sin la conveniencia inmediata de los comandos de registro integrados de Docker.

Resumen

Docker tiene capacidades de monitoreo de registros versátiles proporcionadas por un conjunto de controladores de registro. Cada contenedor puede usar un controlador de registro único, lo que le permite almacenar registros en un formato apropiado para los requisitos de cada aplicación.

Los registros incluyen todo lo que emiten los flujos de salida estándar de un contenedor. Puedes usar echo, print, console.log() o el equivalente de su lenguaje de programación para agregar líneas al docker logs producción. Los registros se conservan hasta que su contenedor se elimina con docker rm.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad