Uruchamianie Syslog w kontenerze Dockera-Project Atomic

niedawno otrzymałem raport o błędzie w Dockerze narzekającym na używanie rsyslogd w kontenerze.

użytkownik uruchomił kontener RHEL7, zainstalował rsyslog, uruchomił demona, a następnie wysłał wiadomość loggera i nic się nie stało.

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

żaden komunikat nie pojawił się w /var/log/messages w kontenerze lub na komputerze hosta.

użytkownik spojrzał i zauważył, że /dev/log nie istnieje i to tutaj logger pisał wiadomość. Użytkownik myślał, że to błąd.

problem polegał na tym, że w RHEL7 i Fedorze używamy teraz journalda, który nasłuchuje wiadomości przychodzących na /dev/log. W RHEL7 i Fedorze rsyslog domyślnie odczytuje wiadomości z dziennika za pośrednictwem swojego API.

ale nie wszystkie kontenery docker uruchamiają systemd i journald. (Większość nie). Aby rsyslogd działał tak, jak chciał użytkownik, musiałby zmodyfikować plik konfiguracyjny, /etc/rsyslogd.conf:

  • w /etc/rsyslog.confUsuń $ModLoad imjournal.
  • Ustaw $OmitLocalLogging na off.
  • upewnij się, że $ModLoad imuxsock jest obecny.
  • skomentuj także: $IMJournalStateFile imjournal.state.

po wprowadzeniu tych zmian rsyslogd zacznie nasłuchiwać na /dev/log w kontenerze, a wiadomości rejestratora zostaną zaakceptowane przez rsyslogd i zapisane na /var/log/messages w kontenerze.

jeśli chcesz rejestrować wiadomości, aby przejść do REJESTRATORA hosta, możesz zamontować wolumin /dev/log w kontenerze.

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

wiadomość powinna pojawić się w dzienniku dziennika hosta, a jeśli używasz rsyslog na hoście, wiadomość powinna skończyć się w /var/log/messages.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.