Rularea Syslog într –un container Docker-proiect Atomic

recent am primit un raport de eroare pe Docker plângându-se despre utilizarea rsyslogd într-un container.

utilizatorul a rulat un container RHEL7, a instalat rsyslog, a pornit daemonul și apoi a trimis un mesaj de înregistrare și nu s-a întâmplat nimic.

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

niciun mesaj Nu a apărut în /var/log/messages în container sau pe mașina gazdă.

utilizatorul s-a uitat apoi și a observat că /dev/log nu exista și aici scria logger mesajul. Utilizatorul a crezut că este un bug.

problema a fost că în RHEL7 și Fedora folosim acum journald, care ascultă pe /dev/log pentru mesajele primite. În RHEL7 și Fedora, rsyslog citește de fapt mesaje din jurnal prin API-ul său în mod implicit.

dar nu toate containerele docker rulează systemd și journald. (Majoritatea nu). Pentru ca rsyslogd să funcționeze așa cum dorea utilizatorul, ar trebui să modifice fișierul de configurare, /etc/rsyslogd.conf:

  • în /etc/rsyslog.conf eliminați $ModLoad imjournal.
  • setați $OmitLocalLogging la off.
  • asigurați-vă că $ModLoad imuxsock este prezent.
  • de asemenea, comentați: $IMJournalStateFile imjournal.state.

după efectuarea acestor modificări rsyslogd va începe să asculte pe /dev/log în interiorul containerului și mesajele logger vor fi acceptate de rsyslogd și scrise la /var/log/messages în interiorul containerului.

dacă doriți să logare mesaje pentru a merge la logger gazdă, ai putea volum mount /dev/log în container.

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

mesajul ar trebui să apară în Jurnalul journalct al gazdei și, dacă executați rsyslog pe gazdă, mesajul ar trebui să ajungă în /var/log/messages.

Lasă un răspuns

Adresa ta de email nu va fi publicată.