Ich frage mich, ob systemd-journald eine neue Implementierung des Syslog-Protokolls ist oder vielmehr Syslog-Implementierungen wie rsyslog, syslog-ng verwendet
Ich habe ein bisschen gegoogelt, aber ich fand nichts überzeugend.
Ich frage mich, ob systemd-journald eine neue Implementierung des Syslog-Protokolls ist oder vielmehr Syslog-Implementierungen wie rsyslog, syslog-ng verwendet
Ich habe ein bisschen gegoogelt, aber ich fand nichts überzeugend.
Antworten:
Was die Protokolle betrifft, systemd-journald
…
/run/systemd/journal/stdout
. systemd verbindet die unformatierten Standardausgaben und Fehler von Diensten (die standardmäßig oder explizit StandardOutput=journal
/ haben StandardError=journal
) mit diesem Socket. Es empfängt somit das Protokoll von frei formatierten Datensätzen variabler Länge, die mit Zeilenvorschüben abgeschlossen sind./run/systemd/journal/dev-log
, von dem symbolisch verlinkt wird /dev/log
. Dies empfängt das Protokoll, das die syslog()
Bibliotheksfunktion in der GNU C-Bibliothek, die mit Anwendungen verknüpft ist, spricht./run/systemd/journal/syslog
. Dies empfängt auch das Protokoll, das die syslog()
Bibliotheksfunktion in der GNU C-Bibliothek spricht (obwohl systemd-journald
tatsächlich eine andere Bibliothek und eine andere Funktion zum Sprechen verwendet wird)./dev/kmsg
. Dieser empfängt das Protokoll, das der Linux-Kernel spricht. Hierbei handelt es sich um ein Protokoll mit variabler Länge und weitgehend freiem Format, bei dem Datensätze mit Zeilenumbrüchen abgeschlossen werden./run/systemd/journal/socket
. Dies ist analog zum GNU C-Bibliotheksfall, in dem Anwendungen eine Verknüpfung zu einer Bibliothek herstellen, die ein bestimmtes Protokoll für diesen Socket spricht. mit der Ausnahme, dass sich die Funktion sd_journal_sendv()
in einer System-C-Bibliothek befindet, zu der Anwendungen eine Verbindung herstellen, und das Protokoll nicht standardisiert ist, sondern ein reines System-D-Protokoll, das in jedem Datagramm ein Array von Schlüssel-Wert-Paaren und optional einen lesbaren Dateideskriptor enthält .Das Protokoll, das von der syslog()
Funktion in der GNU C-Bibliothek gesprochen wird, ist weder RFC 5424 noch RFC 3164 und praktisch ein eigener De-facto-Standard. Es ist nicht RFC 5424, da es nicht die richtige Menge an Leerzeichen und die Bindestriche enthält, die optionale Felder mit NIL-Werten kennzeichnen. Es handelt sich nicht um RFC 3164, da es ein PROCID
Feld anstelle von a enthält HOSTNAME
.
Vor ein paar Jahren hätte Ihr Betriebssystem systemd Folgendes gehabt:
systemd-journald
all dies zu tun (und einige Dinge, die für Protokolle irrelevant sind ) und der Server zu sein, mit dem die GNU C-Bibliothek und die systemd C-Bibliothek über ihre jeweiligen Protokolle sprechenxinetd
/ -style aufgerufen wird, inetd
wenn versucht wird, Nachrichten an /run/systemd/journal/syslog
den Socket zu senden und ihn als offenen Dateideskriptor zu empfangen, oder als direkter Dienst, der zum Öffnen und Abhören /run/systemd/journal/syslog
mit seinem (entspricht dem imuxsock
Modul rsyslog) ; und Sprechen des GNU C-BibliotheksprotokollsHeutzutage verfügt Ihr Betriebssystem über:
systemd-journald
Wiederholen Sie die obigen Schritte und stellen Sie den Server dar, mit dem die GNU C-Bibliothek und die systemd C-Bibliothek kommunizieren imjournal
Modul direkt aus den systemd-Journaldateien liest