Cómo monitorear los registros de contenedores de Docker

Docker agrega automáticamente los flujos de error y de salida estándar del contenedor (stdout/stderr) en las fuentes de registro que mantiene 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 conecta a un contenedor en modo interactivo (-it). Los registros solo estarán disponibles si el proceso de primer plano en su contenedor realmente genera una salida. Asegúrese 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 un contenedor se está ejecutando, puede transmitir registros en tiempo real. Para los contenedores detenidos, puede acceder a todos los registros capturados antes del cierre.

→ Índice de contenidos

Ver registros de contenedores

Para ver registro de contenedor, 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 El comando imprime toda la salida del registro del contenedor en su terminal. La salida no será continua. Si desea continuar transmitiendo nuevos registros, agregue el archivo --follow bandera al comando. Esto es equivalente a usar tail -f con archivos de registro normales en su máquina.

Personalización de lo que se muestra

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

  • –Marcas de tiempo - Muestra marcas de tiempo completas al comienzo de cada línea de registro.
  • -Hasta que --since - Estas banderas le permiten recuperar las filas registradas durante un cierto período de tiempo. O pase una marca de tiempo completa (2021-04-30T20:00:00Z) o un tiempo relativamente amistoso (ex 1h = Hace 1 hora).
  • -cola - Recuperar un cierto número 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 cómo registrar los controladores 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 los registros en el formato requerido. La until, since es tail banderas no tendrán ningún efecto si está utilizando follow para transmitir continuamente datos de registro.

Controlador de registro de Docker

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

Este controlador almacena los registros del contenedor en un archivo JSON. Este formato es bastante legible por humanos y puede ser utilizado fácilmente por herramientas de terceros. Si no planea acceder a los archivos de registro directamente, vaya al archivo local el controlador le ahorrará algo de espacio de almacenamiento. Utilice un formato de almacenamiento de registros personalizado.

Otros controladores de registro integrados incluyen syslog (escribir a syslog demonio corriendo en su máquina), journald (usa una carrera journald instancia) y fluentd (usar un fluentd demonio). También hay controladores 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 los controladores en Docker Hub. Para instalar un controlador de complemento, ejecute docker plugin install plugin-name. A continuación, podrá referirse 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 archivo --log-driver marcar un docker run:

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

Puede cambiar globalmente el controlador de registro predeterminado 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 archivo --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. A continuación, se muestra 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
    }
}

Entrega del conductor

Los registros se pueden proporcionar en modo de bloqueo o no bloqueo. De forma predeterminada, Docker bloquea la entrega. Los registros del contenedor se enviarán al conductor de inmediato. Esto asegura la entrega de registros, pero puede 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 tiene que 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 perder registros. Esto puede ocurrir cuando los registros se emiten más rápido de lo que el controlador puede procesarlos. El búfer en la memoria puede estar lleno, lo que hace que los registros en caché se borren antes de que se hayan entregado al controlador.

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

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

Registro de mejores prácticas

Sus contenedores deben funcionar con el sistema de registro de Docker siempre que sea posible. Problema de inicio de sesión stdout es stderr permite que Docker y otras herramientas los agreguen de forma estandarizada.

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

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

Algunas pilas requieren un contenedor de registro dedicado que se encuentra junto a los contenedores de la aplicación. El contenedor de registro, a menudo llamado "sidecar", lee los archivos de registro temporales que los contenedores de aplicaciones crean en un volumen Docker compartido. El sidecar gestiona la agregación de estos registros en un formato que se puede cargar en un servicio de supervisión 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, 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 archivo docker logs producción. Los registros se guardan hasta que se borra el contenedor con docker rm.

Deja una respuesta

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

Subir Change privacy settings