Beziehung von rsyslog und journald auf Ubuntu 16.04

17

Ich verwende einen Vanilla-Ubuntu-16.04-Server und versuche, mich damit zu beschäftigen, wie die Protokollierung standardmäßig eingerichtet ist. Ich kann sehen , dass beide journaldund rsysloginstalliert sind und ausgeführt, aber es ist nicht klar , für mich , wie Log - Nachrichten verarbeitet werden.

Die meisten Nachrichten scheinen sowohl in /var/log/syslogals auch über zu erscheinen journalctl, aber ich kann keine explizite Konfiguration für die Weiterleitung zwischen den beiden in /etc/systemd/journald.conf(die im Grunde alle standardmäßig auskommentiert ist) /etc/rsyslog.confoder sehen /etc/rsyslog.d/50-default.conf. Ich habe versucht, eine offizielle Dokumentation oder sogar einen Blog-Beitrag zu finden, in dem erklärt wird, wie diese beiden in Ubuntu eingerichtet sind, habe aber nichts gefunden.

Um meine Verwirrung noch weiter zu verstärken, habe ich logger -p local1.info Testauf dem Host ausgeführt und festgestellt, dass nichts geschrieben wurde /var/log/syslog, während die Nachricht unter angezeigt wurde journalctl.

Meine Fragen sind:

  1. Wie genau arbeiten journald und rsyslog unter Ubuntu 16.04 zusammen (standardmäßig)?
  2. Wie kommt es, dass Nachrichten, die loggerscheinbar von gesendet wurden , im Journal, aber nicht im Syslog landen?

Update: Es stellte sich heraus logger, dass es ein Fehler war, dass ich nicht wie erwartet funktionierte. Daher ist es für die Hauptfrage nicht relevant.

motns
quelle

Antworten:

11

Standardmäßig rsyslogverwendet das Modul "imuxsock" und bietet Folgendes:

die Fähigkeit, Syslog-Nachrichten über lokale Unix-Sockets anzunehmen. Dies ist vor allem der Mechanismus, mit dem der syslog (3) -Aufruf Syslog-Nachrichten an rsyslogd [1] übermittelt .

Es ist möglich , rsyslogzu importieren strukturierte Log - Meldungen von systemd-Journal ein Modul mit dem Namen „imjournal“ mit [2] .

Es kann geladen werden wie:

module(load="imjournal") 

im:

/etc/rsyslog.conf

Andererseits erfasst "systemd-journald" alle Daten selbst:

man systemd-journald

systemd-journald ist ein Systemdienst, der Protokolldaten sammelt und speichert. Es erstellt und verwaltet strukturierte, indizierte Journale auf der Grundlage von Protokollinformationen, die aus verschiedenen Quellen eingehen:

   ·   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

Sie können rsyslogdmithilfe von deaktivieren, während Sie noch Zugriff auf Systemprotokolle haben 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

Beispielsweise verwendet centos das Modul "imuxsock", um alle "systemd-journald" -Daten über zu erfassen, rsyslogwährend opensuse überhaupt kein "syslog" hat.


Um herauszufinden, warum Ihre Nachricht nicht erfolgreich war /var/log/syslog, sollten Sie diese Datei überprüfen:

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

suchen *.info, sehen, wo sie gespeichert werden, es könnte sich um eine andere Datei handeln messages.

Für mich taucht es in beiden journalctlund auf syslog.

Ravexina
quelle
logger -p .info helloist ungültig. Sie haben keinen Einrichtungsnamen angegeben.
luv.preet
Aktualisierte die Antwort ....
Ravexina
Wie ich in meiner Bearbeitung feststellte, loggerwar es meine Schuld, dass ich nicht funktionierte. Das ist jetzt behoben (trotzdem danke für die Tipps). Bei Protokollen, die an zwei Stellen imuxsockangezeigt werden, scheint Ihre Notiz zu der Schlüsselrolle zu gehören: Offenbar warten sowohl rsyslog als auch journald auf lokale Syslog-Nachrichten, weshalb diese Einträge in zwei separate Protokolle geschrieben werden.
motns
Ich habe die obigen Anweisungen auf Ubuntu befolgt und erhalte jetzt keine Protokolle von Logger. Hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Es wurden keine Journaldateien gefunden. - Keine Einträge - irgendwelche Ideen?
Hackeron
Gute Antwort. Was mir jedoch fehlt, ist eine Notiz darüber, wie Journald einen Syslog-Socket öffnen kann (oder, falls nicht, wie es sonst zu Syslog-Nachrichten kommt), wenn rsyslog deaktiviert ist. Oder ist eine manuelle Konfiguration des Journals erforderlich?
Matthijs Kooijman
4

Systemd ist ein Init-System, mit dem die Dienste beim Systemstart gestartet werden. Journald ist dafür verantwortlich, Protokolle für Dienste zu erstellen, die von systemd gestartet werden. Durch die Integration von Journald in systemd stehen Journald auch die frühesten Startprozessnachrichten zur Verfügung.

Rsyslog ist ein speziell für die Protokollverarbeitung entwickelter Daemon, der nichts mit Journald zu tun hat. Es kann Protokolle auf viele Arten annehmen und auf viele Arten ausgeben. Es ist nicht standardmäßig aktiviert, dass es auch Protokollnachrichten von Journald entgegennimmt. Dazu müssen Sie in die Datei /etc/rsyslog.conf schreiben,

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

Jetzt werden auch Protokolle aus dem Journal akzeptiert. Aber ich schlage vor, Sie sollten Ihre /etc/rsyslog.conf-Datei nicht ändern.

Am Ende der Datei /etc/rsyslog.conf steht die folgende Zeile:

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

Dies bedeutet, dass alle Dateien mit der Endung .conf im Ordner /etc/rsyslog.d/ beim Laden von rsyslog eingeschlossen werden sollten. Alle Ihre benutzerdefinierten Konfigurationen sollten daher in diesen Dateien gespeichert werden

Ich würde Ihnen vorschlagen, eine Datei /etc/rsyslog.d/journald.conf zu erstellen und das folgende Snippet darin einzufügen.

Unten ist das Snippet von der offiziellen Seite von rsyslog imjournal

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")

Zeile 1 - Lädt das Imjournal-Modul zum Akzeptieren der Protokolle von Journald

2 - Das Modul mmjsonparse wird geladen, um die Protokolle zu analysieren

3 - Sie sind in dem in der Vorlage beschriebenen Format strukturiert

4 - Diese Protokolle werden mit dem Modul mmjsonparse analysiert.

5 - Diese Protokolle werden gemäß der in der angegebenen Vorlage angegebenen Struktur unter Verwendung des Moduls omfile (Ausgabemodul Datei - Ausgabe in Datei) an eine Datei gesendet, nämlich / var / log / ceelog.

Nehmen Sie die gewünschten Änderungen in der Konfiguration vor.

luv.preet
quelle
Vielen Dank für die Erklärung, aber ich denke, die Antwort von @Ravexina hilft mir eher zu verstehen, was mit rsyslog und journald los ist ( standardmäßig ohne zusätzliche Konfiguration).
motns