9.5.1. Principi e meccanismi
A partire da Debian Bookworm, non è più installato di default il pacchetto rsyslog, che in passato forniva la funzionalità di log predefinita. I log vengono invece forniti dal journal di systemd
, a cui si accede con il comando journalctl(5).
Ci sono situazioni, dove è necessario o desiderabile installare rsyslog, ad esempio, per inviare i log a un server centrale. Dopo l'installazione, il demone rsyslogd
è responsabile della raccolta dei messaggi di servizio provenienti dalle applicazioni e dal kernel, distribuendoli nei file di log (di solito memorizzati nella directory /var/log/
). La configurazione è contenuta nel file /etc/rsyslog.conf
.
Ciascun messaggio di log è associato a un sottosistema di applicazioni (denominata "facility" nella documentazione):
auth
e authpriv
: per l'autenticazione;
cron
: proviene da servizi di pianificazione delle attività, cron
e atd
;
daemon
: interessa un demone senza alcuna classificazione speciale (DNS, NTP, ecc.);
ftp
: riguarda il server FTP;
kern
: messaggio proveniente dal kernel;
lpr
: deriva dal sottosistema di stampa;
mail
: proviene dal sottosistema per la posta elettronica;
news
: messaggio del sottosistema Usenet (specialmente da un server NNTP, Network News Transfer Protocol, che gestisce i newsgroup);
syslog
: messaggi dal server syslogd
stesso;
user
: messaggi utente (generico);
uucp
: messaggi dal server UUCP (Unix to Unix Copy Program, un vecchio protocollo utilizzato in particolare per distribuire i messaggi di posta elettronica);
da local0
a local7
: riservato per l'uso locale.
Ogni messaggio è anche associato a un livello di priorità. Ecco l'elenco in ordine decrescente:
emerg
: "Aiuto!" C'è un'emergenza, il sistema è probabilmente inutilizzabile.
alert
: affrettarsi, ogni ritardo può essere pericoloso, bisogna agire immediatamente;
crit
: le condizioni sono critiche;
err
: errore;
warn
: avvertimento (potenziale errore);
notice
: le condizioni sono normali, ma il messaggio è importante;
info
: messaggio informativo;
debug
: messaggio di debug.
9.5.2. Il file di configurazione
La sintassi del file /etc/rsyslog.conf
viene specificata nella pagina di manuale rsyslog.conf(5), ma è anche disponibile documentazione in HTML presente nel pacchetto rsyslog-doc (/usr/share/doc/rsyslog-doc/html/index.html
). Il principio generale è quello di scrivere coppie di "selettori" e "azioni". Il selettore definisce tutti i messaggi rilevanti, e le azioni descrivono come trattarli.
9.5.2.1. Sintassi del selettore
Il selettore è un elenco separato da punti e virgola di coppie sottosistema.priorità
(esempio: auth.notice;mail.info
). Un asterisco può rappresentare tutti i sottosistemi o tutte le priorità (esempi: *.alert
o mail.*
). Vari sottosistemi possono essere raggruppati, separandoli con una virgola (esempio: auth,mail.info
). La priorità indicata copre anche i messaggi di priorità uguale o superiore: così auth.alert
indica i messaggi del sottosistema auth
con priorità alert
o emerg
. Se fatta precedere da un punto esclamativo (!), indica il contrario, in altre parole le priorità strettamente inferiori; auth.!notice
, perciò, indica i messaggi emessi da auth
con priorità info
odebug
. Se preceduto da un segno di uguale (=) corrisponde solo ed esclusivamente alla priorità indicata (auth.=notice
riguarda solo i messaggi provenienti da auth
con priorità notice
).
Ogni elemento della lista sul selettore sovrascrive gli elementi precedenti. È così possibile limitare un insieme o escludere alcuni elementi da esso. Per esempio, kern.info;kern.!err
significa i messaggi dal kernel con priorità compresa tra info
e warn
. La priorità none
indica l'insieme vuoto (nessuna priorità), e può servire per escludere un sottosistema da un insieme di messaggi. Perciò, *.crit;kern.none
indica tutti i messaggi con priorità uguale o superiore a crit
che non provengono dal kernel.
9.5.2.2. Sintassi delle azioni
Le varie azioni possibili sono:
aggiungere il messaggio ad un file (esempio: /var/log/messages
);
inviare il messaggio ad un server syslog
remoto (esempio: @log.falcot.com
);
inviare il messaggio ad una pipe con nome esistente (esempio: |/dev/xconsole
);
inviare il messaggio ad uno o più utenti, se sono connessi (esempio: root,rhertzog
);
inviare un messaggio a tutti gli utenti connessi (ad esempio: *
);
scrivere il messaggio in una console di testo (ad esempio: /dev/tty8
).