Compartir comentarios
Las respuestas se generan en base a la documentación.

Controlador de registro Journald

El controlador de registro journald envía los registros de los contenedores al diario de systemd (systemd journal). Las entradas de registro se pueden recuperar utilizando el comando journalctl, a través de la API journal o utilizando el comando docker logs.

Además del propio texto del mensaje de registro, el controlador journald almacena los siguientes metadatos en el diario con cada mensaje:

CampoDescripción
CONTAINER_IDEl ID del contenedor truncado a 12 caracteres.
CONTAINER_ID_FULLEl ID completo del contenedor de 64 caracteres.
CONTAINER_NAMEEl nombre del contenedor en el momento en que se inició. Si utilizas docker rename para renombrar un contenedor, el nuevo nombre no se refleja en las entradas del diario.
CONTAINER_TAG, SYSLOG_IDENTIFIERLa etiqueta del contenedor (documentación de la opción de etiqueta de registro).
CONTAINER_PARTIAL_MESSAGEUn campo que marca la integridad del registro. Mejora el registro de líneas de registro largas.
IMAGE_NAMEEl nombre de la imagen del contenedor.

Uso

Para usar el controlador journald como el controlador de registro predeterminado, establece las claves log-driver y log-opts con los valores adecuados en el archivo daemon.json. Para obtener más información sobre cómo configurar Docker mediante daemon.json, consulta daemon.json.

Note

Si usas Docker Desktop, edita la configuración del demonio a través del panel de Docker Desktop. Abre Settings y selecciona Docker Engine. Para más detalles, consulta Configuración de Docker Engine.

El siguiente ejemplo establece el controlador de registro en journald:

{
  "log-driver": "journald"
}

Reinicia Docker para que los cambios surtan efecto.

Para configurar el controlador de registro para un contenedor específico, utiliza la opción --log-driver en el comando docker run.

$ docker run --log-driver=journald ...

Opciones

Utiliza la opción --log-opt NOMBRE=VALOR para especificar opciones adicionales del controlador de registro journald.

OpciónRequeridoDescripción
tagopcionalEspecifica la plantilla para establecer el valor de CONTAINER_TAG y SYSLOG_IDENTIFIER en los registros de journald. Consulta la documentación de la etiqueta de registro para personalizar el formato.
labelsopcionalLista de claves de etiquetas separadas por comas que deben incluirse en el mensaje, si estas etiquetas se especifican para el contenedor.
labels-regexopcionalSimilar y compatible con labels. Una expresión regular para hacer coincidir etiquetas relacionadas con el registro. Se utiliza para opciones avanzadas de etiquetas de registro.
envopcionalLista de claves de variables de entorno separadas por comas que deben incluirse en el mensaje, si estas variables se especifican para el contenedor.
env-regexopcionalSimilar y compatible con env. Una expresión regular para hacer coincidir variables de entorno relacionadas con el registro. Se utiliza para opciones avanzadas de etiquetas de registro.

Si ocurre una colisión entre las opciones label y env, el valor de env tiene prioridad. Cada opción añade campos adicionales a los atributos de un mensaje de registro.

El siguiente es un ejemplo de las opciones de registro requeridas para registrar en journald.

$ docker run \
    --log-driver=journald \
    --log-opt labels=location \
    --log-opt env=TEST \
    --env "TEST=false" \
    --label location=west \
    su/aplicacion

Esta configuración también indica al controlador que incluya en la carga útil el valor de la etiqueta location y la variable de entorno TEST. Si se omitieran los argumentos --env "TEST=false" o --label location=west, la clave correspondiente no se establecería en el registro de journald.

Nota sobre los nombres de los contenedores

El valor registrado en el campo CONTAINER_NAME es el nombre del contenedor establecido al arrancar. Si utilizas docker rename para renombrar un contenedor, el nuevo nombre no se refleja en las entradas del diario. Las entradas del diario continúan utilizando el nombre original.

Recuperar mensajes de registro con journalctl

Utiliza el comando journalctl para recuperar los mensajes de registro. Puedes aplicar expresiones de filtro para limitar los mensajes recuperados a aquellos asociados con un contenedor específico:

$ sudo journalctl CONTAINER_NAME=webserver

Puedes utilizar filtros adicionales para limitar aún más los mensajes recuperados. La opción -b solo recupera los mensajes generados desde el último arranque del sistema:

$ sudo journalctl -b CONTAINER_NAME=webserver

La opción -o especifica el formato para los mensajes de registro recuperados. Utiliza -o json para devolver los mensajes de registro en formato JSON.

$ sudo journalctl -o json CONTAINER_NAME=webserver

Ver los registros de un contenedor con un TTY habilitado

Si un contenedor tiene el TTY habilitado, es posible que veas [10B blob data] en la salida al recuperar los mensajes de registro. La razón de esto es que se añade \r al final de la línea y journalctl no lo elimina automáticamente a menos que se configure --all:

$ sudo journalctl -b CONTAINER_NAME=webserver --all

Recuperar mensajes de registro con la API de journal

Este ejemplo utiliza el módulo Python de systemd para recuperar los registros del contenedor:

import systemd.journal

reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')

for msg in reader:
    print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)