Old:Configurare un server Syslog su Debian: differenze tra le versioni
Riga 55: | Riga 55: | ||
# apt-get install logrotate | # apt-get install logrotate | ||
</pre> | </pre> | ||
A titolo di esempio possiamo osservare la directory del web server Apache2 su un sistema in cui logrotate è in funzione, <tt>/var/log/apache2</tt> | |||
<pre> | |||
root@test:~# ls -1 /var/log/apache2/ | |||
access.log | |||
access.log.1 | |||
access.log.2.gz | |||
access.log.3.gz | |||
access.log.4.gz | |||
access.log.5.gz | |||
error.log | |||
error.log.1 | |||
error.log.2.gz | |||
error.log.3.gz | |||
error.log.4.gz | |||
error.log.5.gz | |||
</pre> | |||
Si possono notare i files di log attualmente in uso ('''access.log''' e '''error.log'''), i files di log del giorno precedente ('''access.log.1''' e '''error.log.1''') e i files dei giorni ancora precedenti, che di default vengono compressi e conservati per cinque settimane. | |||
Logrotate files can be scheduled using cron.In /etc we have one folder called | |||
/etc/cron.daily which contains scripts which are executed once per day. Here you will find the logrotate driver script. | |||
Every day this script runs and examines two things: | |||
* The configuration file /etc/logrotate.conf | |||
* The configuration directory /etc/logrotate.d | |||
This directory contains configuration files which other packages have installed. For example if you install apache2 the file /etc/logrotate.d/apache2 will be installed. | |||
Many servers such as Postfix the mailserver will install their own configuration file, and you can add your own. | |||
A typical logrotate configuration file looks like this: | |||
/var/log/apache2/*.log { | |||
weekly | |||
missingok | |||
rotate 52 | |||
compress | |||
delaycompress | |||
notifempty | |||
create 640 root adm | |||
sharedscripts | |||
postrotate | |||
if [ -f /var/run/apache.pid ]; then | |||
/etc/init.d/apache restart > /dev/null | |||
fi | |||
endscript | |||
} | |||
You can see several important things here. The most obvious is the list of files that will be matched by this configuration file: | |||
/var/log/apache2/*.log { | |||
... | |||
} | |||
After this we have a collection of configuration terms, a different one on each line. In the example above we have: | |||
* weekly | |||
o The files should be rotated every week. Opposite: daily | |||
* rotate nn | |||
o We should keep no more than nn files. | |||
* compress | |||
o Compress older files with gzip. Opposite: nocompress | |||
* delaycompress | |||
o Don't compress yesterdays files. Opposite: compress | |||
* notifempty | |||
o Don't do any rotation if the logfile is empty. Opposite: ifempty | |||
* create xx user group | |||
o If we have to create the new file give it the given mode, owner, and group. | |||
* sharedscripts | |||
o Run any given prerotate or postrotate script for each logfile individually. Opposite: nosharedscripts. | |||
* postrotate + endscript | |||
o Anything between these is executed after the rotation process. Opposite : prerotate | |||
The upshot of this script is that any file which matches /var/log/apache2/*.log is rotated every week, compressed, if it's non-empty. The new file is created with the file mode of 640, and after the rotation has finished the server is restarted. | |||
If we wish to install a local service which creates a logfile we can cause it to be rotated very easily, just by adding a new logrotate configuration file. | |||
Assuming we have a new service "web" which produces its output in /var/log/web/output.log we can cause this to be rotated every day with a script like this: | |||
/var/log/web/*.log { | |||
daily | |||
missingok | |||
rotate 7 | |||
compress | |||
delaycompress | |||
create 640 web web | |||
sharedscripts | |||
/etc/init.d/web restart | |||
endscript | |||
} | |||
This will: | |||
* Run daily. | |||
* Keep no more than 7 days worth of logfiles at any one time. | |||
* Not complain if there is a logfile missing. | |||
* Compress the older files, but not yesterdays. | |||
* Create the new logfiles as being owned by the user and group fred. | |||
* Restart the service after rotating the logfiles. | |||
Default /etc/logrotate.conf file as follows | |||
# 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 { | |||
missingok | |||
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 | |||
===Configurazione dei client della rete=== | ===Configurazione dei client della rete=== |
Versione delle 10:19, 14 set 2008
Introduzione
In una serverfarm, ma anche in una piccola rete casalinga, può risultare molto utile riunire i log di tutte le macchine in un unico posto. Si possono in questo modo applicare funzioni di analisi, ricerca e statistica che, in un unico intervento, restituiranno lo stato di tutte le macchine della rete, e sarà inoltre possibile configurare un unico strumento per inviare messaggi di alert quando lo stato di una qualsiasi delle macchine monitorate subisce un'alterazione potenzialmente pericolosa.
Debian, come è lecito aspettarsi, mette a disposizione degli ottimi strumenti per creare un server di log centralizzato.
Installazione di Syslog-ng
Il server syslog che prenderemo in considerazione sarà Syslog-NG. Pur non essendo installato di default su sistemi Debian, dove invece si può trovare syslogd, questo demone presenta diversi vantaggi:
- Le connessioni possono essere stabilite via TCP al posto di UDP
- I log tra host syslog-ng possono essere inviati crittati
- I log possono essere filtrati in base alla criticità del loro contenuto
- Il demone stesso è altamente personalizzabile
Procediamo quindi alla sua installazione:
# apt-get install syslog-ng
L'installazione rimuoverà automaticamente il demone syslog instalalto di default.
Configurazione del server Syslog
Il file di configurazione di syslog-ng è /etc/syslog-ng/syslog-ng.conf. Occorre aprirlo con un editor e decommentare la linea:
udp();
in modo da abilitare il demone a ricevere log da client remoti.
In questa configurazione è stata presa in considerazione una semplice gestione dei log (di default salvati in /var/log), senza l'implementazione di un database di archiviazione. Si tenga comunque presente che le possibilità di gestione dei log sono molto più avanzate di quelle mostrate in questa guida.
Installazione di phpLogCon
Per facilitare la lettura e la gestione dei log è uso comune ricorrere a interfacce grafiche. Su server senza l'ambiente grafico X installato potrebbe essere comodo ricorrere a un'interfaccia scritta in PHP. La scelta in questa guida è caduta su phpLogCon (http://www.phplogcon.org/), che a mio avviso rappresenta un ottimo compromesso tra funzionalità e facilità di installazione/gestione.
Prima di installare phpLogCon è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: LAMP: Linux, Apache, MySQL e PHP.
Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di phpLogCon. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.phplogcon.org/downloads.
Quindi si scompatti l'archivio appena scaricato e si copi la directory src all'interno del nostro server Apache:
# tar -xzvf phplogcon-2.3.11.tar.gz # cd phplogcon-2.3.11 # mv src /var/www
Prima di continuare con l'installazione di phpLogCon occorre rendere rendere leggibili a phpLogCon i files di log syslog. Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente www-data a questo gruppo:
# groupadd logadmin # usermod -a -G logadmin www-data
Verifichiamo quindi la buona riuscita dei comandi:
groups www-data
Ora apriamo con un editor il file /etc/logrotate.conf e cerchiamo la voce create, modificandola in:
create 640 root logadmin
In questo modo la prossima volta che logrotate verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver.
Configurazione di logrotate
L'utility logrotate è pensata per semplificare l'amministrazione dei files di log. Logrotate permette la rotazione automatica, la compressione, l'eliminazione e l'invio per mail dei files di log; può inoltre essere impostato per l'esecuzione giornaliera, settimanale, mensile o quando i logs raggiungono una certa dimensione predefinita.
Per installare logrotate su Debian:
# apt-get install logrotate
A titolo di esempio possiamo osservare la directory del web server Apache2 su un sistema in cui logrotate è in funzione, /var/log/apache2
root@test:~# ls -1 /var/log/apache2/ access.log access.log.1 access.log.2.gz access.log.3.gz access.log.4.gz access.log.5.gz error.log error.log.1 error.log.2.gz error.log.3.gz error.log.4.gz error.log.5.gz
Si possono notare i files di log attualmente in uso (access.log e error.log), i files di log del giorno precedente (access.log.1 e error.log.1) e i files dei giorni ancora precedenti, che di default vengono compressi e conservati per cinque settimane.
Logrotate files can be scheduled using cron.In /etc we have one folder called
/etc/cron.daily which contains scripts which are executed once per day. Here you will find the logrotate driver script.
Every day this script runs and examines two things:
* The configuration file /etc/logrotate.conf * The configuration directory /etc/logrotate.d
This directory contains configuration files which other packages have installed. For example if you install apache2 the file /etc/logrotate.d/apache2 will be installed.
Many servers such as Postfix the mailserver will install their own configuration file, and you can add your own.
A typical logrotate configuration file looks like this:
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache.pid ]; then
/etc/init.d/apache restart > /dev/null
fi
endscript
}
You can see several important things here. The most obvious is the list of files that will be matched by this configuration file:
/var/log/apache2/*.log {
...
}
After this we have a collection of configuration terms, a different one on each line. In the example above we have:
* weekly o The files should be rotated every week. Opposite: daily * rotate nn o We should keep no more than nn files. * compress o Compress older files with gzip. Opposite: nocompress * delaycompress o Don't compress yesterdays files. Opposite: compress * notifempty o Don't do any rotation if the logfile is empty. Opposite: ifempty * create xx user group o If we have to create the new file give it the given mode, owner, and group. * sharedscripts o Run any given prerotate or postrotate script for each logfile individually. Opposite: nosharedscripts. * postrotate + endscript o Anything between these is executed after the rotation process. Opposite : prerotate
The upshot of this script is that any file which matches /var/log/apache2/*.log is rotated every week, compressed, if it's non-empty. The new file is created with the file mode of 640, and after the rotation has finished the server is restarted.
If we wish to install a local service which creates a logfile we can cause it to be rotated very easily, just by adding a new logrotate configuration file.
Assuming we have a new service "web" which produces its output in /var/log/web/output.log we can cause this to be rotated every day with a script like this:
/var/log/web/*.log {
daily
missingok
rotate 7
compress
delaycompress
create 640 web web
sharedscripts
/etc/init.d/web restart
endscript
}
This will:
* Run daily. * Keep no more than 7 days worth of logfiles at any one time. * Not complain if there is a logfile missing. * Compress the older files, but not yesterdays. * Create the new logfiles as being owned by the user and group fred. * Restart the service after rotating the logfiles.
Default /etc/logrotate.conf file as follows
- 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 {
missingok
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