Running Syslog Within a Docker Container-Project Atomic

Recently I received a bug report on Docker reclaming about using rsyslogd within a container.

o usuário executou um container RHEL7, instalou o rsyslog, iniciou o daemon, e então enviou uma mensagem de logger, e nada aconteceu.

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

nenhuma mensagem apareceu em /var/log/messages dentro do recipiente,ou na máquina hospedeira.

o usuário então olhou e percebeu que /dev/log não existia e foi aqui que logger estava escrevendo a mensagem. O utilizador pensou que isto era um erro.

o problema era que em RHEL7 e Fedora agora usamos journald, que escuta em /dev/log para mensagens recebidas. Em RHEL7 e Fedora, rsyslog realmente lê mensagens da revista através de sua API por padrão.

But not all docker containers run systemd and journald. (A maioria não). Para que o rsyslogd funcione como o usuário queria, ele teria que modificar o arquivo de configuração, /etc/rsyslogd.conf:

  • in /etc/rsyslog.conf remove $ModLoad imjournal.
  • Set $OmitLocalLogging to off.
  • certifique-se que $ModLoad imuxsock está presente.
  • também comente: $IMJournalStateFile imjournal.state.

depois de fazer estas alterações, o rsyslogd começará a ouvir em /dev/log dentro do recipiente e as mensagens do logger serão aceites pelo rsyslogd e escritas em /var/log/messages dentro do recipiente.Se quiser registar as mensagens para ir para o registo da máquina, poderá montar o volume /dev/log no contentor.

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

a mensagem deve aparecer no diário de bordo do hospedeiro, e se você estiver executando o rsyslog no host, a mensagem deve terminar em /var/log/messages.

Deixe uma resposta

O seu endereço de email não será publicado.