Systemd-journald è un'implementazione di syslog?


22

Mi chiedo se systemd-journald è una nuova implementazione del protocollo syslog, o piuttosto, utilizza implementazioni syslog, come rsyslog, syslog-ng

Ho cercato su Google un po ', ma non ho trovato nulla di convincente al riguardo.


Potresti voler chiarire se per "protocollo syslog" intendi ricevere syslog su tcp | udp 514, o inviare, o entrambi.
Alex Stragies,

Risposte:


33

Per quanto riguarda i protocolli, systemd-journald...

  • ... è l'ascoltatore su un socket di flusso denominato /run/systemd/journal/stdout. systemd collega gli output standard non elaborati e gli errori dei servizi (che sono diventati predefiniti o che hanno esplicitamente StandardOutput=journal/ StandardError=journal) a questo socket. Riceve così il protocollo di record a formato libero di lunghezza variabile terminati con avanzamenti di riga.
  • ... è l'ascoltatore su socket di datagramma chiamato /run/systemd/journal/dev-log, che è simbolicamente collegato da /dev/log. Questo riceve il protocollo che la syslog()funzione della libreria nella libreria GNU C, collegata alle applicazioni, parla.
  • ... cerca di essere cliente di un altro servizio in ascolto su un socket di datagramma chiamato /run/systemd/journal/syslog. Questo riceve anche il protocollo di cui syslog()parla la funzione di libreria nella libreria GNU C (sebbene systemd-journaldutilizzi effettivamente un'altra libreria e un'altra funzione per parlarla).
  • ... è un lettore di un dispositivo personaggio chiamato /dev/kmsg. Questo riceve il protocollo di cui parla il kernel Linux, che è un protocollo di lunghezza variabile, in gran parte formato libero, record terminato con linefeed.
  • ... è l'ascoltatore su un socket di datagramma chiamato /run/systemd/journal/socket. Questo è analogo al caso della libreria GNU C in quanto le applicazioni si collegano a una libreria che parla un certo protocollo a questo socket; a parte il fatto che la funzione è sd_journal_sendv(), è in una libreria C di systemd a cui si collegano le applicazioni e il protocollo non è standardizzato ma è un protocollo solo di sistema comprendente un array di coppie chiave = valore e facoltativamente un descrittore di file leggibile, in ogni datagramma .

Il protocollo parlato dalla syslog()funzione nella libreria GNU C non è né RFC 5424 né RFC 3164, ed è effettivamente il suo standard di fatto. Non è RFC 5424 perché non ha la quantità corretta di spazi bianchi e i trattini che designano campi opzionali con valori NIL. Non è RFC 3164 perché ha un PROCIDcampo invece di a HOSTNAME.

Un paio di anni fa, il tuo sistema operativo avrebbe avuto:

  • systemd-journaldfacendo tutto quanto sopra (e alcune cose che sono irrilevanti quando si tratta di protocolli ) ed essendo il server con cui la libreria GNU C e la libreria systemd C parlano usando i loro rispettivi protocolli
  • un programma opzionale syslog o rsyslog o syslog-ng richiamato, o xinetd/ inetdstyle quando qualcosa tenta di inviare messaggi /run/systemd/journal/sysloge ricevere il socket come descrittore di file aperto o come servizio diretto configurato per aprire e ascoltare /run/systemd/journal/syslogcon il suo (equivalente del rsyslog) imuxsockmodulo; e parlando il protocollo della libreria GNU C.
  • un servizio opzionale syslog o rsyslog o syslog-ng o udp-syslog-ascolto del traffico RFC 5426

Oggi il tuo sistema operativo ha:

  • systemd-journald di nuovo facendo tutto quanto sopra ed essendo il server con cui parlano la libreria C GNU e la libreria C systemd
  • un programma rsyslog opzionale invocato come un servizio diretto anziché tramite un socket, che legge direttamente le cose dai file journal del sistema usando il suo imjournalmodulo
  • un servizio opzionale syslog o rsyslog o syslog-ng o udp-syslog-ascolto del traffico RFC 5426

Ulteriori letture

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.