Het uitvoeren van Syslog binnen een Docker Container – Project Atomic

onlangs ontving ik een bugrapport over Docker klagen over het gebruik van rsyslogd binnen een container.

de gebruiker runde een rhel7 container, installeerde rsyslog, startte de daemon, en stuurde vervolgens een logger bericht, en er gebeurde niets.

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

er is geen bericht gevonden in /var/log/messages in de container of op de hostmachine.

de gebruiker keek toen en merkte dat /dev/log niet bestond en dit was waar logger het bericht aan het schrijven was. De gebruiker dacht dat dit een bug was.

het probleem was dat we in RHEL7 en Fedora nu journald gebruiken, dat op /dev/log luistert voor inkomende berichten. In RHEL7 en Fedora leest rsyslog standaard berichten van het journaal via zijn API.

maar niet alle Docker containers draaien systemd en journald. (De meeste niet). Om de rsyslogd te laten werken zoals de gebruiker dat wil, moet hij het configuratiebestand aanpassen, /etc/rsyslogd.conf:

  • In /etc/rsyslog.conf verwijderen $ModLoad imjournal.
  • stel $OmitLocalLogging in op off.
  • Controleer of $ModLoad imuxsock aanwezig is.
  • ook commentaar geven: $IMJournalStateFile imjournal.state.

na het maken van deze wijzigingen zal rsyslogd beginnen te luisteren op /dev/log binnen de container en de logger berichten zullen worden geaccepteerd door rsyslogd en geschreven naar /var/log/messages binnen de container.

Als u berichten wilt loggen om naar de host logger te gaan, kunt u /dev/log volume mount in de container.

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

het bericht moet verschijnen in het journalct log van de host, en als u rsyslog op de host draait, moet het bericht eindigen in /var/log/messages.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.