Spuštěný Syslog v kontejneru Docker-Project Atomic

Nedávno jsem dostal zprávu o chybě v Dockeru, který si stěžoval na použití rsyslogd v kontejneru.

uživatel spustil kontejner RHEL7, nainstaloval rsyslog, spustil démona a poté poslal zprávu loggeru a nic se nestalo.

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

žádná zpráva se neobjevila v /var/log/messages v kontejneru nebo na hostitelském počítači.

uživatel se pak podíval a všiml si, že /dev/log neexistuje, a to bylo místo, kde logger psal zprávu. Uživatel si myslel, že to byla chyba.

problém byl v tom, že v RHEL7 a Fedoře nyní používáme žurnál, který poslouchá na /dev/log pro příchozí zprávy. V RHEL7 a Fedora, rsyslog vlastně čte zprávy z deníku přes jeho API ve výchozím nastavení.

ale ne všechny kontejnery docker běží systemd a journald. (Většina ne). Aby rsyslogd fungoval tak, jak uživatel chtěl, musel by upravit konfigurační soubor, /etc/rsyslogd.conf:

  • v /etc/rsyslog.conf odstranit $ModLoad imjournal.
  • nastavte $OmitLocalLogging na off.
  • ujistěte se, že je přítomen $ModLoad imuxsock.
  • také komentář: $IMJournalStateFile imjournal.state.

po provedení těchto změn rsyslogd začne poslouchat na /dev/log v kontejneru a zprávy loggeru budou přijímány rsyslogd a zapsány na /var/log/messages v kontejneru.

pokud chcete protokolovat zprávy pro přechod do hostitelského loggeru, můžete do kontejneru připojit svazek /dev/log.

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

zpráva by se měla zobrazit v protokolu journalct hostitele, a pokud používáte rsyslog na hostiteli, zpráva by měla skončit v /var/log/messages.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.