Recently I received a bug report on Docker reporting about using rsyslogd within a container.
käyttäjä ajoi RHEL7-säiliön, asensi rsyslogin, käynnisti taustaprosessin ja lähetti sitten metsuriviestin, eikä mitään tapahtunut.
# docker run -it --rm rhel /bin/bash # yum -y install rsyslog # /usr/sbin/rsyslogd # logger "this is a test"
/var/log/messages
konttiin tai muuten isäntäkoneeseen ei tullut viestiä.
käyttäjä katsoi sitten ja huomasi, että /dev/log
ei ollut olemassa ja tässä metsuri oli kirjoittamassa viestiä. Käyttäjä luuli tätä bugiksi.
ongelmana oli, että RHEL7: ssä ja Fedorassa käytetään nyt journaldia, joka kuuntelee /dev/log
saapuvia viestejä. Rhel7: ssä ja Fedorassa rsyslog itse asiassa lukee viestejä lehdestä oletuksena API: NSA kautta.
, mutta kaikki docker-kontit eivät kulje systemd: llä ja journaldilla. (Useimmat eivät). Jotta rsyslogd toimisi käyttäjän toivomalla tavalla, hänen täytyisi muokata asetustiedostoa, /etc/rsyslogd.conf
:
-
/etc/rsyslog.conf
poista$ModLoad imjournal
. - Aseta
$OmitLocalLogging
off
. - varmista, että
$ModLoad imuxsock
on läsnä. - kommentoi myös:
$IMJournalStateFile imjournal.state
.
näiden muutosten jälkeen rsyslogd alkaa kuunnella /dev/log
kontin sisällä ja rsyslogd hyväksyy metsuriviestit ja kirjoittaa /var/log/messages
kontin sisällä.
jos halusi kirjata viestejä siirtyäkseen isäntävetäjälle, saattoi volume mount /dev/log
konttiin.
# docker run -v /dev/log:/dev/log -it --rm rhel /bin/bash # logger "this is a test"
viestin pitäisi näkyä isännän journalct-lokissa, ja jos olet suorittamassa rsyslogia isännällä, viestin pitäisi päätyä /var/log/messages
.