Esecuzione di Syslog all’interno di un contenitore Docker –Progetto Atomic

Recentemente ho ricevuto una segnalazione di bug su Docker lamentando l’utilizzo di rsyslogd all’interno di un contenitore.

L’utente ha eseguito un contenitore RHEL7, installato rsyslog, avviato il demone e quindi inviato un messaggio di logger e non è successo nulla.

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

Nessun messaggio è apparso in /var/log/messages all’interno del contenitore o sulla macchina host.

L’utente ha quindi guardato e notato che /dev/log non esisteva e questo era dove logger stava scrivendo il messaggio. L’utente pensava che questo fosse un bug.

Il problema era che in RHEL7 e Fedora ora usiamo journald, che ascolta su /dev/log per i messaggi in arrivo. In RHEL7 e Fedora, rsyslog legge effettivamente i messaggi dal journal tramite la sua API per impostazione predefinita.

Ma non tutti i contenitori docker eseguono systemd e journald. (La maggior parte non lo fanno). Per far sì che rsyslogd funzioni nel modo desiderato dall’utente, dovrebbe modificare il file di configurazione, /etc/rsyslogd.conf:

  • In /etc/rsyslog.conf rimuovi $ModLoad imjournal.
  • Imposta $OmitLocalLogging su off.
  • Assicurati che $ModLoad imuxsock sia presente.
  • Commenta anche: $IMJournalStateFile imjournal.state.

Dopo aver apportato queste modifiche rsyslogd inizierà l’ascolto su /dev/log all’interno del contenitore e i messaggi del logger verranno accettati da rsyslogd e scritti su /var/log/messages all’interno del contenitore.

Se si desidera registrare i messaggi per andare al logger host, è possibile montare il volume /dev/log nel contenitore.

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

Il messaggio dovrebbe apparire nel registro journalct dell’host e, se si esegue rsyslog sull’host, il messaggio dovrebbe finire in /var/log/messages.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.