Cómo escribir la salida de Docker en stdout/stderr como demonio

Cómo escribir la salida de Docker en stdout/stderr como demonio

Entonces podemos ejecutar un contenedor acoplable como un demonio:

docker run -d --name foo foo

y luego lea los registros:

docker logs -f foo

pero me pregunto cómo escribir solo en stdout/stderr, para poder enviar los registros a Splunk o Cloudwatch, etc. Algo como:

(
  docker run --name foo foo &|  capture_logs
) & disown

¿Cuál es la forma oficial de hacer esto?

Respuesta1

Puede utilizar las opciones de registro como señaló @Michael y como se describe a continuacióndocumentos

En términos generales, existen al menos dos formas de hacerlo, que se analizarán brevemente a continuación.

  1. Usando splunkel controlador como se muestra enaquí.

Comience creando un token de recopilador de eventos como se describe en ladocumentos. El token se utilizará dentro de la configuración del controlador Splunk.

ejemplo de ventana acoplable cli

docker run -d \
           --log-driver=splunk \
           --log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
           --log-opt splunk-url=https://splunkhost:8088 \
           --log-opt tag=foo-logs \
           --name foo foo

ejemplo de composición de Docker

version: '3.7'
services:
  foo_app:
  ...
  logging:
    driver: splunk
    options:
      tag: foo-logs
      splunk-token: 176FCEBF-4CF5-4EDF-91BC-703796522D20
      splunk-url: https://splunkhost:8088
  ...
  1. Usando syslogel controlador como se muestra enaquí.

Ejemplo de ventana acoplable CLI:

docker run \
      -–log-driver syslog –-log-opt tag=foo-logs \
      --name foo foo

Ejemplo de composición acoplable:

version: '3.7'
services:
  foo_app:
  ...
  logging:
    driver: syslog
    options:
      tag: foo-logs
  ...

Esto enviará todos los registros del contenedor al syslog local, puede tomarlo desde allí y reenviarlos al puerto udp externo donde Splunk está listo para recibir sus registros.

Entonces, digamos que el servidor Splunk recibirá los registros en el puerto, 514luego deberá agregar esto a rsyslogdla configuración y luego reiniciar el servicio rsyslogd.

# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format

Alternativamente, si tiene la intención de hacerlo global para todos los contenedores, puede configurar el registro a través del /etc/docker/daemon.jsonarchivo como se muestra a continuación (y no olvide reiniciar el servicio Docker):

En caso desyslog

{
  "log-driver": "syslog"
}

En caso desplunk

{
  "log-driver": "splunk",
  "log-opts": {
    "splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
    "splunk-url": "https://splunkhost:8088",
    ...
  }
}

Consulte la lista decontrolador de registro compatible

información relacionada