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.
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 (ex1h
= 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