
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.
- Usando
splunk
el 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
...
- Usando
syslog
el 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, 514
luego deberá agregar esto a rsyslogd
la 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.json
archivo 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