[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
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.
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 III al riguardo.
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.
|
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 |
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:
auth;
authpriv;
cron;
daemon;
kern;
lpr;
mail;
news;
syslog;
user;
uucp;
da local0 a local7.
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:
debug;
info;
notice;
warning;
err;
crit;
alert;
emerg.
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.
|
È 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.
|
Invia tutti i messaggi nel file /var/log/syslog
.
|
I messaggi del servizio kern, a qualunque livello di priorità appartengano, vengono inviati al dispositivo corrispondente alla console. In pratica vengono scritti sullo schermo della console.
|
I messaggi riferiti alla gestione della posta elettronica sono memorizzati nel file /var/log/maillog
.
|
I messaggi la cui priorità raggiunge o supera il livello warning, vengono inviati all'elaboratore dinkel.brot.dg
.
|
Invia tutti i messaggi all'elaboratore dinkel.brot.dg
; inoltre invia i messaggi debug nel file /var/log/debug
, i messaggi info e notice nel file /var/log/messages
, infine i messaggi da warning in su nel file /var/log/syslog
.
|
Invia i messaggi info e notice nel file /var/log/messages
, i messaggi da warning in su nel file /var/log/syslog
, quindi suddivide nuovamente i livelli di priorità e li invia a quattro diverse console virtuali, da /dev/tty9
a /dev/tty12
.
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]
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.
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] |
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.
|
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.
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
:
|
Per la precisione, analizzando lo script /etc/cron.daily/sysklogd
si potrebbe leggere un ciclo come quello seguente:
|
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:
|
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.
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:
|
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:
|
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).
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:
|
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 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) Linux' system and kernel logging daemons: syslogd 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
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] [translators] [docinfo] [indice analitico]