Relazione di rsyslog e journald su Ubuntu 16.04


18

Sto eseguendo quello che è un server Ubuntu 16.04 vanilla e sto cercando di capire come è impostata la registrazione per impostazione predefinita. Posso vedere che entrambi journalde rsyslogsono installati e in esecuzione, ma non è affatto chiaro per me come i messaggi di log sono in fase di elaborazione.

La maggior parte dei messaggi sembra essere visualizzata sia in /var/log/syslogche via journalctl, ma non riesco a vedere alcuna configurazione esplicita per l'inoltro tra i due in entrambi /etc/systemd/journald.conf(che è sostanzialmente tutto commentato per impostazione predefinita), /etc/rsyslog.confoppure /etc/rsyslog.d/50-default.conf. Ho cercato di cercare documentazione ufficiale, o anche un post sul blog che spiegasse come sono stati installati questi due in Ubuntu, ma non sono riuscito a trovare nulla.

Per aggiungere ulteriore confusione, ho eseguito logger -p local1.info Testl'host e ho scoperto che non era stato scritto nulla /var/log/syslog, mentre il messaggio veniva visualizzato sotto journalctl.

Le mie domande sono:

  1. Come funzionano esattamente journald e rsyslog su Ubuntu 16.04 (per impostazione predefinita)?
  2. Come mai i messaggi inviati loggersembrano finire nel diario, ma non in syslog?

Aggiornamento: risulta loggernon funzionare come previsto è stato un errore da parte mia, quindi non è rilevante per la domanda principale.

Risposte:


12

Per impostazione predefinita rsyslogutilizza il modulo "imuxsock", il modulo fornisce:

la capacità di accettare messaggi syslog tramite socket Unix locali. Ancora più importante, questo è il meccanismo mediante il quale la chiamata syslog (3) recapita i messaggi syslog a rsyslogd [1] .

È possibile rsyslogimportare messaggi di registro strutturati da systemd-journal usando un modulo chiamato "imjournal" [2] .

Può essere caricato come:

module(load="imjournal") 

nel:

/etc/rsyslog.conf

D'altra parte "systemd-journald" acquisisce tutti i dati stessi:

man systemd-journald

systemd-journald è un servizio di sistema che raccoglie e archivia i dati di registrazione. Crea e mantiene riviste strutturate e indicizzate basate sulle informazioni di registrazione ricevute da una varietà di fonti:

   ·   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

Puoi disabilitare rsyslogdmentre hai ancora accesso ai log di sistema usando 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

Ad esempio, centos sta usando il modulo "imuxsock" per acquisire tutti i dati "systemd-journald" tramite rsyslogmentre opensuse non ha affatto "syslog".


Per scoprire perché il tuo messaggio non è finito /var/log/syslog, dovresti controllare questo file:

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

cercare *.info, vedere dove verranno archiviati, potrebbe essere un altro file come messages.

Per me si presenta in entrambi journalctle syslog.


logger -p .info hellonon è valido. Non hai fornito alcun nome di struttura.
luv.preet,

Aggiornata la risposta ....
Ravexina,

Come ho notato nella mia modifica, loggernon funzionare è stata colpa mia, quindi ora è stato risolto (grazie comunque per i suggerimenti). Per quanto riguarda i log che imuxsockappaiono in due punti, la tua nota sembra essere la chiave: sembra che sia rsyslog che journald stiano ascoltando i messaggi syslog locali, quindi perché queste voci vanno in due log separati.
motns

Ho seguito quanto sopra su Ubuntu e ora non ricevo alcun registro dal logger, hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Non sono stati trovati file journal. - Nessuna voce - qualche idea?
Hackeron,

Bella risposta. Quello che mi manca, tuttavia, è una nota su come Journald sa come aprire un socket syslog (o, in caso contrario, come ottiene i messaggi syslog in caso contrario) quando rsyslog è disabilitato? O è necessaria una configurazione manuale di journald?
Matthijs Kooijman

4

Systemd è un sistema init utilizzato per avviare i servizi all'avvio del sistema. Journald è responsabile della creazione di registri per i servizi avviati da systemd. Integrando journald con systemd, anche i primi messaggi del processo di avvio sono disponibili per journald.

Rsyslog è un demone creato appositamente per l'elaborazione dei log, nulla a che fare con journald. Può accettare i log in molti modi e riprodurli in molti modi. Non è abilitato per impostazione predefinita che accetta anche i messaggi di registro da journald. Per questo, devi scrivere nel file /etc/rsyslog.conf,

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

Ora, accetterà anche i registri di Journald. Ma suggerisco di non modificare il file /etc/rsyslog.conf.

Alla fine del file /etc/rsyslog.conf, c'è una riga scritta,

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

Significa che tutti i file che hanno .conf terminano nella cartella /etc/rsyslog.d/ durante il caricamento di rsyslog. Quindi, tutte le tue configurazioni personalizzate dovrebbero andare in questi file

Ti suggerirei di creare un file /etc/rsyslog.d/journald.conf e incollare lo snippet di seguito in quello.

Di seguito è riportato il frammento della pagina ufficiale di rsyslog di 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")

Riga 1: carica il modulo imjournal per accettare i log da journald

2 - Il modulo mmjsonparse viene caricato utilizzato nell'analisi dei registri

3 - Sono strutturati nel formato descritto nel modello

4 - Analizza quei registri usando il modulo mmjsonparse.

5 - Invia quei log ad un file, ovvero / var / log / ceelog secondo la struttura fornita nel modello dato, usando il modulo omfile (file del modulo di output - output al file).

Apporta modifiche alla configurazione in base alle tue esigenze.


Grazie per la spiegazione, ma penso che la risposta di @Ravexina sia più vicina ad aiutarmi a capire cosa sta succedendo con rsyslog e journald, per impostazione predefinita (senza configurazione aggiuntiva).
motns
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.