Controlador de registro Fluentd
El controlador de registro fluentd envía los registros de los contenedores al recolector de Fluentd en forma de datos de registro estructurados. A continuación, los usuarios pueden emplear cualquiera de los diversos complementos (plugins) de salida de Fluentd para escribir estos registros en diferentes destinos.
Además del propio mensaje de registro, el controlador de registro fluentd envía los siguientes metadatos en el mensaje de registro estructurado:
| Campo | Descripción |
|---|---|
container_id | El ID completo del contenedor de 64 caracteres. |
container_name | El 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. |
source | stdout o stderr |
log | El registro del contenedor |
Uso
Se admiten algunas opciones especificando --log-opt tantas veces como sea necesario:
fluentd-address: especifica una dirección de socket para conectarse al demonio de Fluentd, por ejemplofluentdhost:24224ounix:///ruta/al/fluentd.sock.tag: especifica una etiqueta para los mensajes de Fluentd. Admite algunas marcas de plantilla de Go, por ejemplo{{.ID}},{{.FullID}}o{{.Name}}docker.{{.ID}}.
Para usar el controlador fluentd como el controlador de registro predeterminado, establece las claves log-driver y log-opt 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.
NoteSi 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 fluentd y configura la opción fluentd-address.
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "fluentdhost:24224"
}
}Reinicia Docker para que los cambios surtan efecto.
NoteLas opciones de configuración de
log-optsen el archivo de configuracióndaemon.jsondeben proporcionarse como cadenas. Los valores booleanos y numéricos (como el valor parafluentd-asyncofluentd-max-retries) deben, por lo tanto, estar entre comillas (").
Para establecer el controlador de registro para un contenedor específico, pasa la opción --log-driver a docker run:
$ docker run --log-driver=fluentd ...
Antes de utilizar este controlador de registro, inicia un demonio de Fluentd. El controlador de registro se conecta a este demonio a través de localhost:24224 de forma predeterminada. Utiliza la opción fluentd-address para conectarte a una dirección diferente.
$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
Si el contenedor no puede conectarse al demonio de Fluentd, el contenedor se detiene inmediatamente a menos que se utilice la opción fluentd-async.
Opciones
Los usuarios pueden utilizar la opción --log-opt NOMBRE=VALOR para especificar opciones adicionales del controlador de registro de Fluentd.
fluentd-address
Por defecto, el controlador de registro se conecta a localhost:24224. Proporciona la opción fluentd-address para conectarte a una dirección diferente. Se admiten sockets tcp (predeterminado) y unix.
$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=tcp://fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=unix:///ruta/al/fluentd.sock
Dos de las opciones anteriores especifican la misma dirección, ya que tcp es la predeterminada.
tag
Por defecto, Docker utiliza los primeros 12 caracteres del ID del contenedor para etiquetar los mensajes de registro. Consulta la documentación de la opción de etiqueta de registro para personalizar el formato de la etiqueta de registro.
labels, labels-regex, env, y env-regex
Las opciones labels y env aceptan cada una una lista de claves separadas por comas. Si hay una colisión entre las claves de label y env, el valor de env tiene prioridad. Ambas opciones añaden campos adicionales a los atributos adicionales de un mensaje de registro.
Las opciones env-regex y labels-regex son similares y compatibles respectivamente con env y labels. Sus valores son expresiones regulares para hacer coincidir variables de entorno y etiquetas relacionadas con el registro. Se utiliza para opciones avanzadas de etiquetas de registro.
fluentd-async
Docker se conecta a Fluentd en segundo plano. Los mensajes se almacenan en el búfer hasta que se establece la conexión. El valor predeterminado es false.
fluentd-async-reconnect-interval
Cuando fluentd-async está habilitado, la opción fluentd-async-reconnect-interval define el intervalo, en milisegundos, en el que se restablece la conexión con fluentd-address. Esta opción es útil si la dirección se resuelve en una o más direcciones IP, por ejemplo, una dirección de servicio de Consul.
fluentd-buffer-limit
Establece la cantidad de eventos almacenados en el búfer en memoria. Los registros se almacenarán en memoria hasta este número. Si el búfer está lleno, la llamada para registrar los registros fallará. El valor predeterminado es 1048576. (https://github.com/fluent/fluent-logger-golang/tree/master#bufferlimit)
fluentd-retry-wait
Cuánto tiempo esperar entre reintentos. El valor predeterminado es 1 segundo.
fluentd-max-retries
El número máximo de reintentos. El valor predeterminado es 4294967295 (2**32 - 1).
fluentd-sub-second-precision
Genera registros de eventos con resolución de nanosegundos. El valor predeterminado es false.
fluentd-write-timeout
Establece el tiempo de espera (timeout) para la llamada de escritura al demonio de fluentd. Por defecto, las escrituras no tienen tiempo de espera y se bloquearán indefinidamente.
Gestión del demonio de Fluentd con Docker
Sobre Fluentd en sí, consulta la página web del proyecto y sus documentos.
Para usar este controlador de registro, inicia el demonio de fluentd en un host. Se recomienda utilizar la imagen de docker de Fluentd. Esta imagen es especialmente útil si deseas agregar múltiples registros de contenedores en cada host y, posteriormente, transferir los registros a otro nodo de Fluentd para crear un almacenamiento agregado.
Probar los registradores del contenedor
Escribe un archivo de configuración (
test.conf) para volcar los registros de entrada:<source> @type forward </source> <match *> @type stdout </match>Inicia el contenedor de Fluentd con este archivo de configuración:
$ docker run -it -p 24224:24224 -v /ruta/a/conf/test.conf:/fluentd/etc/test.conf -e FLUENTD_CONF=test.conf fluent/fluentd:latestInicia uno o más contenedores con el controlador de registro
fluentd:$ docker run --log-driver=fluentd tu/aplicacion