Kører Syslog i en Docker Container-Project Atomic

for nylig modtog jeg en fejlrapport om Docker, der klagede over at bruge rsyslogd i en container.

brugeren kørte en RHEL7-container, installerede rsyslog, startede dæmonen og sendte derefter en logger-besked, og der skete ikke noget.

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

ingen besked dukkede op i /var/log/messages i containeren eller på værtsmaskinen for den sags skyld.

brugeren kiggede derefter og bemærkede, at /dev/log ikke eksisterede, og det var her logger skrev beskeden. Brugeren troede, at dette var en fejl.

problemet var, at vi i RHEL7 og Fedora nu bruger journald, som lytter på /dev/log til indgående meddelelser. I RHEL7 og Fedora læser rsyslog faktisk meddelelser fra tidsskriftet via dets API som standard.

men ikke alle docker-containere kører systemd og journald. (De fleste gør det ikke). For at få rsyslogd til at fungere som brugeren ønskede, skulle han ændre konfigurationsfilen, /etc/rsyslogd.conf:

  • i /etc/rsyslog.conf fjern $ModLoad imjournal.
  • sæt $OmitLocalLoggingtil off.
  • sørg for, at $ModLoad imuxsock er til stede.
  • kommenter også: $IMJournalStateFile imjournal.state.

efter at have foretaget disse ændringer begynder rsyslogd at lytte på /dev/log i beholderen, og loggermeddelelserne accepteres af rsyslogd og skrives til /var/log/messages i beholderen.

hvis du vil logge beskeder for at gå til værtsloggeren, kan du volumenmontere /dev/log i containeren.

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

meddelelsen skal vises i værtens journalct-log, og hvis du kører rsyslog på værten, skal meddelelsen ende i /var/log/messages.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.