Ejecutar Syslog Dentro de un contenedor de Docker –Project Atomic

Recientemente recibí un informe de error sobre Docker quejándose de usar rsyslogd dentro de un contenedor.

El usuario ejecutó un contenedor RHEL7, instaló rsyslog, inició el demonio y luego envió un mensaje del registrador, y no pasó nada.

# docker run -it --rm rhel /bin/bash # yum -y install rsyslog # /usr/sbin/rsyslogd # logger "this is a test" 

No apareció ningún mensaje en /var/log/messages dentro del contenedor, o en la máquina host para el caso.

El usuario miró y se dio cuenta de que /dev/log no existía y aquí era donde logger estaba escribiendo el mensaje. El usuario pensó que era un error.

El problema era que en RHEL7 y Fedora ahora usamos journald, que escucha en /dev/log los mensajes entrantes. En RHEL7 y Fedora, rsyslog lee mensajes del diario a través de su API de forma predeterminada.

Pero no todos los contenedores docker ejecutan systemd y journald. (La mayoría no). Para que el rsyslogd funcione de la manera que el usuario desea, tendría que modificar el archivo de configuración, /etc/rsyslogd.conf:

  • En /etc/rsyslog.conf eliminar $ModLoad imjournal.
  • Establezca $OmitLocalLogging en off.
  • Asegúrese de que $ModLoad imuxsock esté presente.
  • También comenta: $IMJournalStateFile imjournal.state.

Después de realizar estos cambios, rsyslogd comenzará a escuchar en /dev/log dentro del contenedor y los mensajes del registrador serán aceptados por rsyslogd y escritos en /var/log/messages dentro del contenedor.

Si desea registrar mensajes para ir al registrador de host, puede montar el volumen /dev/log en el contenedor.

# docker run -v /dev/log:/dev/log -it --rm rhel /bin/bash # logger "this is a test" 

El mensaje debe aparecer en el registro de journalct del host, y si está ejecutando rsyslog en el host, el mensaje debe terminar en /var/log/messages.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.