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

Controlador de registro Splunk

El controlador de registro splunk envía los registros de los contenedores al HTTP Event Collector (Colector de eventos HTTP) en Splunk Enterprise y Splunk Cloud.

Uso

Puedes configurar el sistema de registro de Docker para que utilice el controlador splunk de forma predeterminada o por contenedor.

Para usar el controlador splunk como el controlador de registro predeterminado, establece las claves log-driver y log-opts con los valores adecuados en el archivo de configuración daemon.json y reinicia Docker. Por ejemplo:

{
  "log-driver": "splunk",
  "log-opts": {
    "splunk-token": "",
    "splunk-url": "",
    ...
  }
}

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.

Note

Las opciones de configuración de log-opts en el archivo de configuración daemon.json deben proporcionarse como cadenas. Los valores booleanos y numéricos (como el valor para splunk-gzip o splunk-gzip-level) deben, por lo tanto, estar entre comillas (").

Para utilizar el controlador splunk para un contenedor específico, utiliza las opciones de la línea de comandos --log-driver y --log-opt con docker run:

$ docker run --log-driver=splunk --log-opt splunk-token=VALOR --log-opt splunk-url=VALOR ...

Opciones de Splunk

Las siguientes propiedades te permiten configurar el controlador de registro Splunk.

  • Para configurar el controlador splunk en todo el entorno de Docker, edita el archivo daemon.json con la clave "log-opts": {"NOMBRE": "VALOR", ...}.
  • Para configurar el controlador splunk para un contenedor individual, utiliza docker run con la opción --log-opt NOMBRE=VALOR ....
OpciónRequeridoDescripción
splunk-tokenrequeridoToken de Splunk HTTP Event Collector.
splunk-urlrequeridoRuta a tu instancia de Splunk Enterprise, instancia de autoservicio de Splunk Cloud o clúster gestionado de Splunk Cloud (incluyendo el puerto y el esquema utilizado por HTTP Event Collector) en uno de los siguientes formatos: https://tu_instancia_splunk:8088, https://input-prd-p-XXXXXXX.cloud.splunk.com:8088 o https://http-inputs-XXXXXXXX.splunkcloud.com.
splunk-sourceopcionalOrigen del evento.
splunk-sourcetypeopcionalTipo de origen del evento.
splunk-indexopcionalÍndice del evento.
splunk-capathopcionalRuta al certificado raíz.
splunk-canameopcionalNombre que se utilizará para validar el certificado del servidor; de forma predeterminada se utiliza el nombre de host de splunk-url.
splunk-insecureskipverifyopcionalIgnora la validación del certificado del servidor.
splunk-formatopcionalFormato del mensaje. Puede ser inline, json o raw. El valor predeterminado es inline.
splunk-verify-connectionopcionalVerifica al iniciar que Docker puede conectarse al servidor de Splunk. El valor predeterminado es true.
splunk-gzipopcionalHabilita/deshabilita la compresión gzip para enviar eventos a la instancia de Splunk Enterprise o Splunk Cloud. El valor predeterminado es false.
splunk-gzip-levelopcionalEstablece el nivel de compresión para gzip. Los valores válidos son -1 (predeterminado), 0 (sin compresión), 1 (mejor velocidad) ... 9 (mejor compresión). Por defecto es DefaultCompression.
tagopcionalEspecifica la etiqueta del mensaje, que interpreta algunas marcas de plantilla. El valor predeterminado es {{.ID}} (12 caracteres del ID del contenedor). Consulta la documentación de la opción de 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 claves de label y env, el valor de env tiene prioridad. Ambas opciones añaden campos adicionales a los atributos de un mensaje de registro.

A continuación se muestra un ejemplo de las opciones de registro especificadas para la instancia de Splunk Enterprise. La instancia está instalada localmente en la misma máquina en la que se ejecuta el demonio de Docker.

La ruta al certificado raíz y el Nombre Común (Common Name) se especifican utilizando un esquema HTTPS. Esto se utiliza para la verificación. El certificado SplunkServerDefaultCert se genera automáticamente a partir de los certificados de Splunk.

$ docker run \
    --log-driver=splunk \
    --log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
    --log-opt splunk-url=https://splunkhost:8088 \
    --log-opt splunk-capath=/ruta/al/certificado/cacert.pem \
    --log-opt splunk-caname=SplunkServerDefaultCert \
    --log-opt tag="{{.Name}}/{{.FullID}}" \
    --log-opt labels=location \
    --log-opt env=TEST \
    --env "TEST=false" \
    --label location=west \
    tu/aplicacion

La opción splunk-url para las instancias de Splunk alojadas en Splunk Cloud tiene un formato similar a https://http-inputs-XXXXXXXX.splunkcloud.com y no incluye un especificador de puerto.

Formatos de mensaje

Existen tres formatos de mensajería para el controlador de registro: inline (predeterminado), json y raw.

El formato predeterminado es inline, en el cual cada mensaje de registro se incrusta como una cadena. Por ejemplo:

{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "my message"
}
{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "{\"foo\": \"bar\"}"
}

Para formatear los mensajes como objetos json, establece --log-opt splunk-format=json. El controlador intenta analizar cada línea como un objeto JSON y enviarla como un objeto incrustado. Si no puede analizar el mensaje, se envía como inline. Por ejemplo:

{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "my message"
}
{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": {
    "foo": "bar"
  }
}

Para formatear los mensajes en modo raw, establece --log-opt splunk-format=raw. Los atributos (variables de entorno y etiquetas) y las etiquetas de registro se anteponen al mensaje. Por ejemplo:

MyImage/MyContainer env1=val1 label1=label1 my message
MyImage/MyContainer env1=val1 label1=label1 {"foo": "bar"}

Opciones avanzadas

El controlador de registro Splunk te permite configurar algunas opciones avanzadas estableciendo variables de entorno para el demonio de Docker.

Nombre de la variable de entornoValor predeterminadoDescripción
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_FREQUENCY5sEl tiempo de espera para agrupar más mensajes.
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE1000El número de mensajes que deben acumularse antes de enviarlos en un solo lote.
SPLUNK_LOGGING_DRIVER_BUFFER_MAX10 * 1000El número máximo de mensajes que se guardan en el búfer para reintentos.
SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE4 * 1000El número máximo de mensajes pendientes que pueden estar en el canal utilizado para enviar mensajes al trabajador de registro en segundo plano que los agrupa.