Kör Syslog inom en Docker Container-Project Atomic

nyligen fick jag en felrapport om Docker som klagade över att använda rsyslogd i en behållare.

användaren körde en RHEL7-Behållare, installerade rsyslog, startade demonen och skickade sedan ett loggmeddelande och ingenting hände.

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

inget meddelande dök upp i /var/log/messages i behållaren eller på värddatorn för den delen.

användaren tittade sedan och märkte att /dev/log inte existerade och det var här logger skrev meddelandet. Användaren trodde att detta var en bugg.

problemet var att vi i RHEL7 och Fedora nu använder journald, som lyssnar på /dev/log för inkommande meddelanden. I RHEL7 och Fedora läser rsyslog faktiskt meddelanden från tidskriften via dess API som standard.

men inte alla Docker-behållare kör systemd och journald. (De flesta gör det inte). För att få rsyslogd att fungera som användaren ville, måste han ändra konfigurationsfilen, /etc/rsyslogd.conf:

  • i /etc/rsyslog.conf ta bort $ModLoad imjournal.
  • Ställ in $OmitLocalLoggingtill off.
  • se till att $ModLoad imuxsock är närvarande.
  • kommentera också: $IMJournalStateFile imjournal.state.

efter att ha gjort dessa ändringar börjar rsyslogd lyssna på /dev/log i behållaren och loggmeddelandena accepteras av rsyslogd och skrivs till /var/log/messages i behållaren.

om du vill logga meddelanden för att gå till värd logger, kan du volym montera /dev/log i behållaren.

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

meddelandet ska visas i värdens journalct-logg, och om du kör rsyslog på värden ska meddelandet hamna i /var/log/messages.

Lämna ett svar

Din e-postadress kommer inte publiceras.