[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 128.   Gestione del registro del sistema

Un sistema operativo complesso, quale può essere un sistema Unix, richiede l'annotazione di alcuni eventi importanti in un registro, composto da uno o più file specifici. Il sistema che si occupa della compilazione di questo registro, può intervenire solo localmente, oppure può ricevere queste informazioni anche da elaboratori remoti, attraverso la rete; nello stesso modo, può rinviare la registrazione a un elaboratore remoto.

La tabella seguente elenca i programmi e i file a cui si accenna in questo capitolo.

Tabella 128.1. Riepilogo dei programmi e dei file per la gestione del registro del sistema.

Nome Descrizione
syslogd Demone per l'annotazione nel registro del sistema.
/etc/syslog.conf Configurazione di syslogd.
logger Aggiunge delle annotazioni nel registro del sistema.
klogd Demone per la registrazione dei messaggi del kernel.

In questo capitolo, la questione riguardante la rete viene accennata, contando sulla conoscenza delle problematiche essenziali legate ai protocolli TCP/IP; si veda eventualmente il volume VIII al riguardo.

128.1   Registro del sistema

Il registro del sistema (system log, o anche syslog) è la procedura di registrazione degli eventi importanti all'interno di un cosiddetto file di log, ovvero un file delle registrazioni. Questa procedura è gestita principalmente dal demone syslogd, che viene configurato attraverso /etc/syslog.conf. Altri programmi o demoni possono aggiungere annotazioni al registro inviando messaggi a syslogd.

Anche se potrebbe sembrare che la conoscenza di questo sistema di registrazione sia uno strumento utile principalmente per chi ha già esperienza di GNU/Linux o dei sistemi Unix in generale, la consultazione dei file delle registrazioni può essere di aiuto al principiante che si trova in difficoltà e non sa quale sia la causa del mancato funzionamento di qualcosa.

Figura 128.2. Schema di massima dei flussi di dati che coinvolgono il demone syslogd.

syslogd

128.1.1   Utilizzo di «syslogd»

Il programma syslogd è il demone che si occupa delle annotazioni nel registrazione del sistema. (1)

syslogd [opzioni]

Di norma viene avviato durante la procedura di avvio del sistema. Utilizza un file di configurazione che di solito è /etc/syslog.conf. Questo file viene letto nel momento in cui syslogd si avvia e, per fare in modo che venga riletto (per esempio dopo una modifica), occorre inviare al processo di syslogd un segnale di aggancio (SIGHUP).

kill -HUP pid_di_syslogd

Tabella 128.3. Alcune opzioni.

Opzione Descrizione
-f file_di_configurazione
Specifica un file di configurazione diverso da quello predefinito.
-m minuti
Stabilisce l'intervallo espresso in minuti tra i messaggi di marcatura. Il valore predefinito è 20.
-p log_socket
Specifica un socket di dominio Unix diverso da quello predefinito che è /dev/log.
-a log_socket
Specifica un socket di dominio Internet addizionale, per la ricezione; quello predefinito è di norma 514/UDP.

128.1.2   File «/etc/syslog.conf»

Il file /etc/syslog.conf contiene la configurazione di syslogd che definisce in che modo devono essere gestiti i messaggi da registrare. Se si vogliono apportare modifiche a questo file è necessario fare in modo che venga riletto da syslogd. Per fare questo è possibile mandare a syslogd il segnale SIGHUP:

kill -HUP pid_di_syslogd

Tuttavia, in certi casi, questo segnale può anche provocare la conclusione del funzionamento del programma. Se necessario si può riavviare semplicemente:

syslogd[Invio]

La sintassi per l'utilizzo di questo file di configurazione è relativamente semplice. Le righe vuote e quelle che iniziano con il simbolo # sono ignorate. Le altre sono record composti da due campi: il primo definisce la selezione, il secondo l'azione.

Il campo che definisce la selezione, serve a indicare per quali eventi effettuare un'annotazione attraverso l'azione indicata nel secondo campo. Questo primo campo si divide in due sottocampi, uniti da un punto singolo (.), i quali si riferiscono ai servizi e alle priorità. I servizi sono rappresentati da una serie di parole chiave che individuano una possibile origine di messaggi, mentre le priorità sono altre parole chiave che identificano il livello di gravità dell'informazione.

Le parole chiave riferite ai servizi possono essere:

Volendo identificare tutti i servizi si può usare l'asterisco (*), mentre per indicarne un gruppo se ne può inserire un elenco separato da virgole (,).

Le parole chiave riferite alle priorità possono essere quelle seguenti, elencate in ordine di importanza crescente, per cui l'ultima è quella che rappresenta un evento più importante:

In linea di massima, l'indicazione di una parola chiave che rappresenta una priorità implica l'inclusione dei messaggi che si riferiscono a quel livello, insieme a tutti quelli dei livelli superiori. Per indicare esclusivamente un livello di priorità, occorre fare precedere la parola chiave corrispondente dal simbolo =. Si possono indicare assieme più gruppi di servizi e priorità, in un solo campo, unendoli attraverso un punto e virgola (;). Si possono escludere delle priorità ponendo anteriormente un punto esclamativo (!).

Il secondo campo, quello che definisce l'azione, serve a indicare la destinazione dei messaggi riferiti a un certo gruppo di servizi e priorità, come definito dal primo campo. Può trattarsi di un file o di altro, a seconda del primo carattere utilizzato per identificarlo. Segue l'elenco.

Tabella 128.4. Destinazione dei messaggi.

Primo carattere Descrizione
/
Se il primo carattere è una barra obliqua normale, si intende che si tratti dell'indicazione di un percorso assoluto di un file destinatario dei messaggi. Può trattarsi anche di un file di dispositivo opportuno, come quello di una console virtuale.
|
Se il primo carattere è una barra verticale, si intende che la parte restante sia l'indicazione del percorso assoluto di un file FIFO (pipe con nome), generato attraverso mkfifo (181.1.1).
@
Se il primo carattere è il simbolo @, si intende che la parte restante sia l'indicazione di un elaboratore remoto, che ricevendo tali messaggi li inserisce nel proprio sistema di registrazione.
utente[,...]
Se il primo carattere non è scelto tra quelli elencati fino a questo punto, si intende che si tratti di un elenco di utenti (separati da virgole) a cui inviare i messaggi sullo schermo del terminale, se questi stanno accedendo in quel momento.
*
Se il primo e unico carattere è un asterisco (*), si intende che i messaggi debbano essere inviati sullo schermo del terminale di tutti gli utenti connessi in quel momento.

È importante osservare che gli stessi messaggi possono essere inviati anche a destinazioni differenti, attraverso più record in cui si definiscono le stesse coppie di servizi e priorità, oppure coppie differenti che però si sovrappongono.

Vedere anche la pagina di manuale syslog.conf(5).

Segue la descrizione di alcuni esempi.

128.1.3   Archiviazione dei file delle registrazioni del sistema

Per archiviare i file generati da kerneld, se la propria distribuzione GNU/Linux non gestisce già questo problema, si possono copiare i file delle registrazioni altrove, eventualmente anche comprimendoli, quindi si può azzerare il loro contenuto semplicemente copiandovi sopra il file /dev/null.

Supponendo di dovere gestire i file /var/log/messages e /var/log/syslog, si potrebbe procedere come segue:

cat /var/log/messages | gzip -9 > /var/log/messages.1.gz[Invio]

cat /var/log/syslog | gzip -9 > /var/log/syslog.1.gz[Invio]

cp /dev/null /var/log/messages[Invio]

cp /dev/null /var/log/syslog[Invio]

killall -HUP syslogd[Invio]

128.1.4   Riservatezza delle informazioni

Le informazioni che vengono memorizzate nel registro del sistema potrebbero essere delicate, sia per la sicurezza del sistema, sia per i singoli utenti. Per questo, è bene ricordare che i file che compongono il registro del sistema non dovrebbero essere accessibili in lettura agli utenti comuni.

128.1.5   Utilizzo di «logger»

Il programma logger permette di aggiungere delle annotazioni all'interno del registro del sistema locale. (2) Se non vengono forniti argomenti, il messaggio da registrare viene atteso dallo standard input. Se si utilizza la tastiera, per concludere è necessario utilizzare il codice di EOF che di norma si ottiene con la combinazione [Ctrl d].

logger [opzioni] [messaggio]
Opzione Descrizione
-f file
Permette di includere il file indicato all'interno del registro del sistema.

128.1.6   Utilizzo di «klogd»

Il programma klogd è il demone specifico per l'intercettazione e la registrazione dei messaggi del kernel Linux. (3) Di norma viene avviato dalla procedura di inizializzazione del sistema, subito dopo syslogd.

klogd [opzioni]

Il demone klogd, oltre a inviare i messaggi del kernel al registro, visualizza sulla console i messaggi più importanti. Il livello di importanza dei messaggi da inviare anche sulla console dipende dall'opzione -c. Normalmente, il valore predefinito associato a questa opzione è quattro; per ridurre la quantità di messaggi che si ricevono sulla console basta portare questo valore a tre. Per modificare questo valore, di norma è necessario intervenire nello script della procedura di inizializzazione del sistema che si occupa del suo avvio.

Tabella 128.12. Alcune opzioni.

Opzione Descrizione
-f file_delle_registrazioni
Specifica un file particolare per le registrazioni, invece di dirigere i messaggi direttamente al demone della gestione del registro del sistema, cioè syslogd.
-c n
Specifica il livello di priorità dei messaggi da non inviare alla console. In pratica, normalmente è predefinito il livello quattro, che comporta la visualizzazione dei messaggi da zero a tre (che sono più importanti).

128.2   Rotazione dei file

I file utilizzati per annotare ciò che accade nel sistema possono essere generati da syslogd, o da un programma analogo, ma nel sistema si aggiungono normalmente altri file generati specificatamente per il controllo di altri programmi. L'unico punto in comune dei vari programmi che generano file di questo tipo è la directory di partenza, all'interno della quale questi file vengono collocati: /var/log/. A parte questo, il problema che si incontra normalmente sta nel sistemare una procedura di rotazione dei file, che includa tutto ciò di cui c'è bisogno.

Può essere necessario conoscere la struttura del sistema di rotazione dei file delle registrazioni della propria distribuzione, nel caso il proprio utilizzo del sistema implichi l'obbligo di conservare questi dati per un certo tempo. Infatti, di solito il sistema automatico di archiviazione si occupa di mantenere solo pochi giorni di informazioni.

128.2.1   Rotazione dei file delle registrazioni di sistema nelle distribuzioni Debian

Le distribuzioni GNU/Linux Debian gestiscono un proprio sistema per la rotazione dei file delle registrazioni generati dalla configurazione del file /etc/syslog.conf.

Per la precisione, il meccanismo si appoggia su due script avviati periodicamente dal sistema Cron: /etc/cron.daily/sysklogd e /etc/cron.weekly/sysklogd. Come si può comprendere, il primo viene avviato ogni giorno e il secondo ogni settimana.

Questi script si avvalgono di due programmi: syslogd-listfiles (4) e savelog. (5) Il primo di questi due programmi serve a estrapolare dal file /etc/syslog.conf l'elenco dei file delle registrazioni utilizzati effettivamente, distinguendo in qualche modo tra quelli che vanno ruotati giornalmente e quelli che invece richiedono un ciclo settimanale. In base all'elenco ottenuto, viene poi usato savelog che si occupa effettivamente di creare il ciclo di file.

Per esempio, se nel file /etc/syslog.conf esiste una riga come quella seguente, savelog viene utilizzato giornalmente per salvare il file /var/log/registro:

*.*                             /var/log/registro

Per la precisione, analizzando lo script /etc/cron.daily/sysklogd si potrebbe leggere un ciclo come quello seguente:

cd /var/log
for LOG in `syslogd-listfiles`
do
   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u root -c 3 $LOG >/dev/null
   fi
done

Si può osservare in questo caso che savelog viene avviato con l'opzione -c 3, che richiede una rotazione in tre file differenti, generando in pratica i file:

File Descrizione
/var/log/registro file corrente;
/var/log/registro.0 ultima archiviazione del file (non compressa);
/var/log/registro.1.gz penultima archiviazione del file (compressa);
/var/log/registro.2.gz terzultima archiviazione del file (compressa).

Come si può intendere, aumentando il valore dell'opzione -c aumenta di conseguenza la quantità di archivi precedenti del file che viene ruotato. In questo caso, volendo eventualmente conservare un anno di file delle registrazioni, nello script /etc/cron.daily/sysklogd occorrerebbe usare l'opzione -c 365 e nello script /etc/cron.weekly/sysklogd occorrerebbe usare l'opzione -c 53.

128.2.2   Logrotate

Logrotate (6) è un sistema di archiviazione dei file delle registrazioni, con un sistema di configurazione che consente l'inclusione e l'eliminazione di file, senza creare troppe complicazioni. Tutto quanto si basa sul programma eseguibile logrotate, a cui si associa un file di configurazione, generalmente /etc/logrotate.conf, che normalmente incorpora altre porzioni di configurazione contenute nella directory /etc/logrotate.d/. Generalmente, il programma logrotate viene avviato giornalmente dal sistema Cron.

Il file di configurazione ha una struttura abbastanza intuitiva; quello che segue è l'esempio di una distribuzione Debian:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be configured here

Come si può osservare le direttive possono essere generali, oppure inserite all'interno di sezioni, corrispondenti al nome di un file da ruotare periodicamente. Le direttive generali valgono fino a dove non vengono modificate; pertanto diventano direttive predefinite.

Nell'esempio appare inizialmente la direttiva weekly, che richiede una rotazione settimanale, quindi, con la direttiva rotate 4 viene specificata la quantità di cicli, che in questo caso sono quattro, pari a quattro settimane.

Diventa molto importante la direttiva include /etc/logrotate.d, che richiede espressamente l'inclusione di tutti i file contenuti nella directory /etc/logrotate.d/; file che potrebbero essere simili a quello seguente, riferito alle esigenze di PostgreSQL:

/var/log/postgresql/postgres.log {
        daily
        rotate 10
        copytruncate
        delaycompress
        compress
        notifempty
        create 640 postgres postgres
}

Generalmente, se la propria distribuzione GNU utilizza Logrotate, è molto probabile che tutto sia già predisposto correttamente; tuttavia, nel caso si intenda conservare le informazioni dei file delle registrazioni per un tempo diverso da quello previsto in modo predefinito da chi ha organizzato i pacchetti applicativi, diventa necessario intervenire nel file di configurazione generale e nelle singole sezioni, soprattutto nei file inclusi. Infatti, come si vede dagli esempi già apparsi, la configurazione generale del periodo di rotazione e della quantità di file conservati viene stabilito in modo generale, ma poi, quasi ogni sezione modifica i tempi e la grandezza del ciclo.

Per approfondire l'uso e la configurazione di Logrotate si può leggere la pagina di manuale logrotate(8).

128.3   Console-log

In questo capitolo è già descritto in che modo è possibile inviare i messaggi destinati normalmente ai file delle registrazioni su una o più console di un sistema GNU/Linux, attraverso la configurazione del file /etc/syslog.conf. Il pacchetto Console-log (7) consente di raggiungere questo risultato in modo più pratico, consentendo di ottenere un testo che può anche essere fatto scorrere sullo schermo.

Il tutto parte da uno script della procedura di inizializzazione del sistema, che potrebbe essere precisamente /etc/init.d/console-log, il quale legge un file di configurazione e si comporta di conseguenza.

Il file di configurazione dovrebbe essere /etc/console-log.conf e il suo contenuto standard è il seguente:

# /etc/console-log.conf -- configuration file for console-log.
# see console-log.conf(5) for details

tty 9
# uncomment next line if you want to chvt to the syslog on startup
#chvt yes
file /var/log/syslog
# if you do have a user that can read your syslog, you might want
# to configure that user account here instead of root
user root
group root

tty 8
file /var/log/exim/mainlog
user mail
group mail

Intuitivamente si comprende che in questo modo si vuole inviare alla console numero nove una copia del file /var/log/syslog, mentre alla console numero otto si vuole inviare una copia del file /var/log/exim/mainlog. In modo simile si può estendere il file di configurazione per includere altri file da visualizzare su altrettante console. Si veda comunque la pagina di manuale console-log.conf(5) per la spiegazione dettagliata delle direttive utilizzabili nella configurazione.

Una volta configurato correttamente Console-log e riavviata la sua funzione attraverso lo script relativo della procedura di inizializzazione del sistema, sui terminali predisposti si ottiene la visualizzazione di questi file, ma è sufficiente premere la combinazione [Ctrl c] per interrompere la visualizzazione normale e passare al controllo di Less, cosa che consente di scorrere all'indietro e anche orizzontalmente il testo.

Quando si scorre il testo attraverso Less, non si ricevono altri dati dal file originale, pertanto, alla fine è bene ritornare allo stato precedente chiudendo il funzionamento di Less, con la pressione del tasto [q].

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Linux' system and kernel logging daemons: syslogd   UCB BSD

2) BSD utils   UCB BSD

3) Linux' system and kernel logging daemons: klogd   GNU GPL

4) Linux' system and kernel logging daemons: syslogd   UCB BSD

5) Debianutils: savelog   GNU GPL

6) Logrotate   GNU GPL

7) Console-log   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome gestione_del_registro_del_sistema.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!