Związek rsyslog z dziennikiem na Ubuntu 16.04

18

Używam waniliowego serwera Ubuntu 16.04 i staram się zawrócić, aby domyślnie skonfigurować rejestrowanie. Widzę, że oba journaldi rsyslogsą zainstalowane i działa, ale to nie jest w ogóle dla mnie jasne, w jaki sposób wiadomości dziennika są przetwarzane.

Wygląda na to, że większość wiadomości pojawia się zarówno w, jak /var/log/syslogi za pośrednictwem journalctl, ale nie widzę żadnej wyraźnej konfiguracji przekazywania między nimi w obu /etc/systemd/journald.conf(co w zasadzie wszystkie są domyślnie skomentowane) /etc/rsyslog.conflub /etc/rsyslog.d/50-default.conf. Próbowałem poszukać oficjalnej dokumentacji lub nawet wpisu na blogu wyjaśniającego, jak te dwa są skonfigurowane w Ubuntu, ale nic nie udało mi się znaleźć.

Aby jeszcze bardziej zwiększyć zamieszanie, wykonałem logger -p local1.info Testna hoście i stwierdziłem, że nic nie zostało napisane /var/log/syslog, podczas gdy komunikat pojawił się pod journalctl.

Moje pytania to:

  1. Jak dokładnie dziennik i rsyslog współpracują ze sobą w systemie Ubuntu 16.04 (domyślnie)?
  2. Dlaczego wiadomości wysłane z loggerpozornie trafiają do dziennika, ale nie do syslog?

Aktualizacja: Okazało się, że loggernie działa zgodnie z oczekiwaniami, to był mój błąd, więc nie ma to związku z głównym pytaniem.

motns
źródło

Odpowiedzi:

12

Domyślnie rsyslogużywa modułu „imuxsock”, moduł zapewnia:

możliwość przyjmowania wiadomości syslog przez lokalne gniazda Unix. Co najważniejsze, jest to mechanizm, za pomocą którego wywołanie syslog (3) dostarcza wiadomości syslog do rsyslogd [1] .

Możliwe jest rsyslogimportowanie uporządkowanych komunikatów z dziennika systemd za pomocą modułu o nazwie „imjournal” [2] .

Może być ładowany jak:

module(load="imjournal") 

w:

/etc/rsyslog.conf

Z drugiej strony „systemd-journald” przechwytuje wszystkie same dane:

man systemd-journald

systemd-journald to usługa systemowa, która gromadzi i przechowuje dane logowania. Tworzy i utrzymuje ustrukturyzowane, indeksowane czasopisma na podstawie informacji o logowaniu otrzymywanych z różnych źródeł:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

Możesz wyłączyć, rsyslogdgdy nadal masz dostęp do dzienników systemu za pomocą journalctl.

$ sudo systemctl mask rsyslogd
$ sudo systemctl stop syslog.socket
$ sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

Na przykład centos używa modułu „imuxsock” do przechwytywania wszystkich danych „systemd-journald” za pośrednictwem, rsyslogpodczas gdy opensuse w ogóle nie ma „syslog”.


Aby dowiedzieć się, dlaczego Twoja wiadomość się nie skończyła /var/log/syslog, sprawdź ten plik:

less /etc/rsyslog.d/50-default.conf

poszukaj *.info, zobacz, gdzie będą przechowywane, może to być inny plik messages.

Dla mnie to pojawia się zarówno w, jak journalctli syslog.

Ravexina
źródło
logger -p .info hellonie jest poprawny. Nie podałeś żadnej nazwy obiektu.
luv.preet
Zaktualizowano odpowiedź ....
Ravexina
Jak zauważyłem w mojej edycji, loggerniedziałanie było moją winą, więc teraz zostało to naprawione (i tak dzięki za wskazówki). Jeśli chodzi o logi wyświetlane w dwóch miejscach, twoja notatka imuxsockwydaje się być kluczem: wydaje się, że zarówno rsyslog, jak i journald nasłuchują lokalnych komunikatów syslog, dlatego te wpisy przechodzą do dwóch osobnych logów.
motns
Postępowałem zgodnie z powyższym na Ubuntu i teraz nie otrzymuję żadnych logów z loggera, hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Nie znaleziono plików dziennika. - Brak wpisów - jakieś pomysły?
Hackeron,
Świetna odpowiedź. Brakuje mi jednak notatki o tym, jak Journald wie, jak otworzyć gniazdo syslog (a jeśli nie, to w jaki sposób dostaje się do wiadomości syslog, gdy rsyslog jest wyłączony? A może potrzebna jest ręczna konfiguracja dziennika?
Matthijs Kooijman
4

Systemd to system inicjujący używany do uruchamiania usług podczas uruchamiania systemu. Journald jest odpowiedzialny za tworzenie dzienników usług uruchamianych przez systemd. Dzięki zintegrowaniu dziennika z systememd, nawet najwcześniejsze komunikaty o procesie uruchamiania są dostępne dla dziennika.

Rsyslog to demon specjalnie stworzony do przetwarzania logów, nie mający nic wspólnego z dziennikiem. Może pobierać logi na wiele sposobów i generować je na wiele sposobów. Domyślnie nie jest włączone, aby pobierało również dzienniki z dziennika. W tym celu musisz napisać w pliku /etc/rsyslog.conf,

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

Teraz przyjmie także dzienniki z dziennika. Ale sugeruję, że nie powinieneś zmieniać pliku /etc/rsyslog.conf.

Na końcu pliku /etc/rsyslog.conf zapisany jest wiersz:

$IncludeConfig /etc/rsyslog.d/*.conf

Oznacza to, że wszystkie pliki z rozszerzeniem .conf na tym końcu w folderze /etc/rsyslog.d/ powinny zostać uwzględnione podczas ładowania rsyslog. Wszystkie niestandardowe konfiguracje powinny więc znajdować się w tych plikach

Sugeruję utworzenie pliku /etc/rsyslog.d/journald.conf i wklejenie w nim poniższego fragmentu.

Poniżej znajduje się fragment oficjalnej strony imjournal z rsyslog

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

Wiersz 1 - ładuje moduł imjournal do przyjmowania dzienników z dziennika

2 - Moduł parsowania mmjsonparse jest używany do analizowania dzienników

3 - Zbudowano je w opisanym formacie w szablonie

4 - Analizuje te dzienniki za pomocą modułu mmjsonparse.

5 - Wysyła te dzienniki do pliku, a mianowicie / var / log / ceelog zgodnie ze strukturą podaną w danym szablonie, za pomocą modułu omfile (moduł wyjściowy plik - wyjście do pliku).

Wprowadź zmiany w konfiguracji zgodnie z potrzebami.

luv.preet
źródło
Dziękuję za wyjaśnienie, ale myślę, że odpowiedź @Ravexina jest bliższa pomocy w zrozumieniu, co domyślnie dzieje się z rsyslog i Journald (bez dodatkowej konfiguracji).
motns