Usar docker logs con controladores de registro remotos
Descripción general
Puedes utilizar el comando docker logs para leer los registros de los contenedores independientemente del controlador de registro o complemento configurado. Docker Engine utiliza el controlador de registro local para actuar como caché para leer los registros más recientes de tus contenedores. Esto se denomina registro doble (dual logging). Por defecto, la caché tiene habilitada la rotación de archivos de registro y está limitada a un máximo de 5 archivos de 20 MB cada uno (antes de la compresión) por contenedor.
Consulta la sección Opciones de configuración para personalizar estos valores predeterminados, o la sección Deshabilitar el registro doble para desactivar esta característica.
Prerrequisitos
Docker Engine habilita automáticamente el registro doble si el controlador de registro configurado no admite la lectura de registros.
Los siguientes ejemplos muestran el resultado de ejecutar un comando docker logs con y sin disponibilidad de registro doble:
Sin capacidad de registro doble
Cuando un contenedor está configurado con un controlador de registro remoto como splunk y el registro doble está deshabilitado, se muestra un error al intentar leer los registros del contenedor localmente:
Paso 1: Configurar el demonio de Docker
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { "cache-disabled": "true", ... (opciones para el controlador de registro "splunk") } }Paso 2: Iniciar el contenedor
$ docker run -d busybox --name testlog topPaso 3: Leer los registros del contenedor
$ docker logs testlog Error response from daemon: configured logging driver does not support reading
Con capacidad de registro doble
Con la caché de registro doble habilitada, se puede usar el comando docker logs para leer los registros, incluso si el controlador de registro no admite la lectura de los mismos. El siguiente ejemplo muestra una configuración del demonio que utiliza el controlador de registro remoto splunk por defecto, con la caché de registro doble habilitada:
Paso 1: Configurar el demonio de Docker
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { ... (opciones para el controlador de registro "splunk") } }Paso 2: Iniciar el contenedor
$ docker run -d busybox --name testlog topPaso 3: Leer los registros del contenedor
$ docker logs testlog 2019-02-04T19:48:15.423Z [INFO] core: marked as sealed 2019-02-04T19:48:15.423Z [INFO] core: pre-seal teardown starting 2019-02-04T19:48:15.423Z [INFO] core: stopping cluster listeners 2019-02-04T19:48:15.423Z [INFO] core: shutting down forwarding rpc listeners 2019-02-04T19:48:15.423Z [INFO] core: forwarding rpc listeners stopped 2019-02-04T19:48:15.599Z [INFO] core: rpc listeners successfully shut down 2019-02-04T19:48:15.599Z [INFO] core: cluster listeners successfully shut down
NotePara los controladores de registro que admiten la lectura de registros, como
local,json-fileyjournald, no hay diferencias en la funcionalidad antes o después de que la capacidad de registro doble estuviera disponible. Para estos controladores, los registros se pueden leer utilizandodocker logsen ambos escenarios.
Opciones de configuración
La caché de registro doble acepta las mismas opciones de configuración que el controlador de registro local, pero con el prefijo cache-. Estas opciones se pueden especificar por contenedor, y los valores predeterminados para nuevos contenedores se pueden establecer utilizando el
archivo de configuración del demonio.
Por defecto, la caché tiene habilitada la rotación de archivos de registro y está limitada a un máximo de 5 archivos de 20 MB cada uno (antes de la compresión) por contenedor. Utiliza las opciones de configuración que se describen a continuación para personalizar estos valores predeterminados.
| Opción | Predeterminado | Descripción |
|---|---|---|
cache-disabled | "false" | Deshabilita la caché local. Valor booleano pasado como una cadena (true, 1, 0 o false). |
cache-max-size | "20m" | El tamaño máximo de la caché antes de rotarla. Un número entero positivo más un modificador que representa la unidad de medida (k, m o g). |
cache-max-file | "5" | El número máximo de archivos de caché que pueden estar presentes. Si la rotación de los registros crea un exceso de archivos, se elimina el archivo más antiguo. Un entero positivo. |
cache-compress | "true" | Habilita o deshabilita la compresión de los archivos de registro rotados. Valor booleano pasado como una cadena (true, 1, 0 o false). |
Deshabilitar la caché de registro doble
Utiliza la opción cache-disabled para deshabilitar la caché de registro doble. Deshabilitar la caché puede ser útil para ahorrar espacio de almacenamiento en situaciones donde los registros solo se leen a través de un sistema de registro remoto y no hay necesidad de leer los registros mediante docker logs para fines de depuración.
La caché se puede deshabilitar para contenedores individuales o por defecto para contenedores nuevos, utilizando el archivo de configuración del demonio.
El siguiente ejemplo utiliza el archivo de configuración del demonio para emplear el controlador de registro splunk de forma predeterminada, con la caché deshabilitada:
$ cat /etc/docker/daemon.json
{
"log-driver": "splunk",
"log-opts": {
"cache-disabled": "true",
... (opciones para el controlador de registro "splunk")
}
}
NotePara los controladores de registro que admiten la lectura de registros, como
local,json-fileyjournald, el registro doble no se utiliza y deshabilitar la opción no tiene ningún efecto.
Limitaciones
- Si un contenedor que utiliza un controlador de registro o complemento que envía registros de forma remota tiene un problema de red, no se produce ninguna escritura en la caché local.
- Si una escritura en el controlador de registro (
logdriver) falla por cualquier motivo (sistema de archivos lleno, permisos de escritura eliminados), la escritura en la caché falla y se registra en el registro del demonio. La entrada de registro en la caché no se vuelve a intentar. - Es posible que se pierdan algunos registros de la caché en la configuración predeterminada debido a que se utiliza un búfer circular (ring buffer) para evitar bloquear el stdio del contenedor en caso de escrituras lentas de archivos. Un administrador debe reparar esto mientras el demonio está apagado.