Rotado de logs

Para el rotado de logs se utiliza el demonio logrotate.

Logrotate ha sido diseñado para facilitar la administración mediante el rotado de logs.

Logrotate permite el rotado, compresión, borrado y envío de logs. Se definen políticas para cada archivo con su periocidad y caracteríticas.

El fichero /etc/logrotate.conf

Este fichero es el fichero de configuración de logrotate.

Un archivo típico:

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

Este archivo consta de opciones globales y luego las opciones por cada archivo a rotar.

Es practica habitual el crear ficheros para los ficheros de log a rotar y almacenarlos en un directorio que tipicamente es /etc/logrotate.d/.

Un ejemplo típico para rotar los log de apache es:

/var/log/apache2/*.log {
        weekly                 # rotado semanal
        missingok              # continuar sin error si el fichero no existe
        rotate 52              # numero maximo de ficheros rotado
        compress               # comprimir cuando se rote
        notifempty             # no rotar el log si esta vacio
        create 640 root adm    # permisos, propietario y grupo del fichero rotado
        sharedscripts          # los scripts de rotado se ejecutan una sola vez
        postrotate             # tarea a realizar despues del rotado
                if [ -f /var/run/apache2.pid ]; then
                        /etc/init.d/apache2 restart > /dev/null
                fi
        endscript
}

Ejecución de logrotate

Logrotate se ejecuta como tarea bajo cron:

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf