Kjører Syslog I En Docker Container-Project Atomic

Nylig mottok Jeg en feilrapport Om Docker som klaget over bruk av rsyslogd i en beholder.

brukeren kjørte EN RHEL7-beholder, installerte rsyslog, startet demonen, og sendte deretter en loggermelding, og ingenting skjedde.

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

Ingen melding dukket opp i /var/log/messages i beholderen, eller på vertsmaskinen for den saks skyld.

brukeren så og la merke til at /dev/log ikke eksisterte, og det var her logger skrev meldingen. Brukeren trodde dette var en feil.

problemet var AT I RHEL7 og Fedora bruker vi nå journald, som lytter på /dev/log for innkommende meldinger. I RHEL7 og Fedora leser rsyslog faktisk meldinger fra journalen via SIN API som standard.

men ikke alle docker-beholdere kjører systemd og journald. (De fleste gjør det ikke). For å få rsyslogd til å fungere slik brukeren ønsket, måtte han endre konfigurasjonsfilen, /etc/rsyslogd.conf:

  • I /etc/rsyslog.conf fjern $ModLoad imjournal.
  • Sett $OmitLocalLogging til off.
  • Kontroller at $ModLoad imuxsock er til stede.
  • også kommentere ut: $IMJournalStateFile imjournal.state.

etter å ha gjort disse endringene, vil rsyslogd begynne å lytte på /dev/log i beholderen, og loggermeldingene vil bli akseptert av rsyslogd og skrevet til /var/log/messages i beholderen.

hvis du vil logge meldinger for å gå til vertsloggeren, kan du volumfeste /dev/log i beholderen.

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

meldingen skal vises i vertens journalct logg, og hvis du kjører rsyslog på verten, skal meldingen ende opp i /var/log/messages.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.