martes, 4 de mayo de 2010

Rotación y conservación de logs

Rotación y conservación de logs

En el sistema debemos tener instalado anacron o cron, si tenemos ambos simultaneamente (aunque uno de los dos demonios esté parado) no se ejecutaran las tareas de /etc/cron.daily, weekly, etc.. (debido a como viene por defecto /etc/crontab). En nuestro caso, al ser un servidor y estar siempre en marcha usaremos cron:

apt-get purge anacron
apt-get install cron

La política de gestión de logs será:

* Rotación mensual
* Mantenimiento de las últimas 24 copias (2 años de log)
* Incorporar la fecha de creación al nombre del fichero

Preparamos las tareas de rotacion de log a ejecutar por cron de forma mensual:

chmod 644 /etc/cron.daily/sysklogd
chmod 644 /etc/cron.weekly/sysklogd
cp /etc/cron.weekly/sysklogd /etc/cron.monthly/
chmod 755 /etc/cron.monthly/sysklogd

Editamos ‘/etc/cron.monthly/sysklogd’ y modificamos la linea que llama a save_log para incluir en la rotación todos los ficheros log gestionados por syslogd:

logs=$(syslogd-listfiles --weekly)

por:

logs=$(syslogd-listfiles --all)

También modificaremos:

savelog -g adm -m 640 -u ${USER} -c 4 $LOG >/dev/null

por:

# Rotate monthly (script placed at /etc/cron.monthly/)
# Keep 24 copies: -c 24
# Clean older copies than 24: -C
# Add date instead of .0 .1: -d
# Create a new file owned by adm and syslog with permission 640
savelog -g adm -m 640 -u ${USER} -c 24 -d -C $LOG >/dev/null

De esta forma, syslogd cumplirá con la política de gestión de logs que hemos definido.

Mediante ’syslogd-listfiles –all’ podemos ver todos los ficheros que serán rotados, por ejemplo:

/var/log/mail.warn
/var/log/uucp.log
/var/log/user.log
/var/log/daemon.log
/var/log/messages
/var/log/debug
/var/log/auth.log
/var/log/mail.err
/var/log/syslog
/var/log/mail.log
/var/log/mail.info
/var/log/kern.log
/var/log/lpr.log

El resto de logs que no son generados por syslogd, los gestionaremos a través de logrotate.

Editamos /etc/logrotate.conf y establecemos la política general de logs:

# rotate log monthly
monthly
# keep 24 months of backlog
rotate 24

# uncomment this if you want your log files compressed
compress

# Postpone compression of the previous log file to the next rotation cycle
delaycompress

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

# uncomment this if you want your log files compressed
compress

# Postpone compression of the previous log file to the next rotation cycle
delaycompress

# Archive old versions of log files adding a daily extension like YYYYMMDD instead of simply adding a number.
dateext

# Rotate the log file even if it is empty
ifempty

# 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
}

En ‘/etc/logrotate.d’ tenemos ficheros con los logs a rotar y en algunos casos, con políticas concretas diferentes a la global. Para nos aseguramos que no haya políticas diferentes a la global para logs específicos podemos ejecutar:

find /etc/logrotate.d/ -type f -exec sed -i 's/daily/#daily/g' {} ;
find /etc/logrotate.d/ -type f -exec sed -i 's/weekly/#weekly/g' {} ;
find /etc/logrotate.d/ -type f -exec sed -i 's/monthly/#monthly/g' {} ;
find /etc/logrotate.d/ -type f -exec sed -i 's/rotate/#rotate/g' {} ;

find /etc/logrotate.d/ -type f -exec sed -i 's/post#rotate/postrotate/g' {} ;
find /etc/logrotate.d/ -type f -exec sed -i 's/pre#rotate/prerotate/g' {} ;

find /etc/logrotate.d/ -type f -exec sed -i 's/notifempty/#notifempty/g' {} ;
find /etc/logrotate.d/ -type f -exec sed -i 's/size/#size/g' {} ;

Cabe destacar que es necesario revisar la configuración existente en ‘/etc/logrotate.d’ por si faltase realizar alguna modificación extra (p.ej. logs extra de apache como ‘/var/log/apache2/localhost/*.log’).

Del resto de logs del sistema que queramos rotar y no estén ya incluidos, tendremos que crear un fichero nuevo en ‘/etc/logrotate.d’ indicándolo (en general, todo paquete de Ubuntu ya viene preparado para que sus logs sean gestionados automáticamente por syslogd o logrotate). Es importante tener en cuenta que no debemos rotar:

* Binarios como /var/log/faillog o /var/log/lastlog
* Logs de nagios dado que romperíamos el historial interno. Mejor que lo gestione la propia aplicación directamente.
* Logs generados directamente por syslogd (como hemos visto antes). Visualizar con syslogd-listfiles –all

2 comentarios:

Anónimo dijo...

The quantity or passengers is the most vital truth.

There is a huge Crowed of people outside this cage as they enjoy the monkey.
This is the only section available for Cheyenne people.



Feel free to surf to my homepage :: denver airport service

Anónimo dijo...

Firstly, you should be well aware of your own necessities and what you exactly
want to accomplish with your website. What search engines will the SEO service target with your campaign.
Some SEO firms focus on content spinning and submitting articles.


Also visit my weblog: Referencement site maroc