Introducción

Como administrador de sistemas Linux, sabes que los logs son herramientas indispensables para resolver problemas. Cuando hay un error en el servidor, los logs son a menudo la única manera de entender qué está pasando.

Sin embargo, no puedes guardarlos para siempre. Debes decidir cuánta información necesitas conservar y descartar el resto, y esto debe hacerse de forma automática. Ahí es donde entra logrotate: mantiene los archivos de log en disco solo durante el tiempo que tú decidas, y elimina los más antiguos.

Logrotate es una utilidad para sistemas tipo Unix que gestiona los archivos de log creados por otros procesos: puede comprimir los antiguos, eliminar los más viejos y crear nuevos vacíos al rotar.

Configuración

El archivo de configuración principal se encuentra en /etc/logrotate.conf.

Opciones de configuración

size

Especifica el umbral a partir del cual se rotará el archivo de log. Acepta k, M o G.

size 100M

Rotará el archivo cuando supere los 100 MB.

daily, weekly, monthly

Define con qué frecuencia se rota el archivo (solo se puede usar una a la vez), independientemente del tamaño.

weekly

rotate

Número de copias que se conservan en disco. Cuando logrotate se ejecuta, elimina la copia más antigua y rota el resto.

rotate 4

Conserva cuatro copias.

compress

Comprime los archivos de log rotados con gzip.

compress

create

Crea el nuevo archivo de log con los permisos, grupo y propietario especificados.

create 0644 www-data www-data

postrotate / prerotate

Los comandos entre postrotate y endscript se ejecutan después de la rotación. Los de prerotate se ejecutan antes.

postrotate
    some commands
endscript

missingok

No escribe un error si el archivo de log no existe.

notifempty

No rota el archivo si está vacío.

delaycompress

Retrasa la compresión cuando el programa no puede cerrar inmediatamente su archivo de log.

sharedscripts

Indica que la sección postrotate debe ejecutarse una sola vez por servidor, no por directorio.

Ejemplos de configuración

En Ubuntu, los archivos de configuración de logrotate están organizados en dos partes: el archivo principal y un directorio con secciones específicas para cada servidor.

El archivo principal /etc/logrotate.conf:

# Opciones generales
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

Ejemplo para Apache en /etc/logrotate.d/apache:

/var/www/html/garron.me/log/*.log {
    daily                     # Rotar diariamente
    missingok                 # Si no hay archivo de log, está bien
    rotate 14                 # Conservar dos semanas antes de eliminar
    compress                  # Comprimir archivos rotados
    delaycompress             # Retrasar compresión para que Apache termine de escribir
    notifempty                # No rotar si no hay datos
    create 640 root adm       # Crear nuevo archivo con permisos 0640
    sharedscripts             # Ejecutar postrotate una sola vez
    postrotate
        if /etc/init.d/apache2 status > /dev/null ; then \
            /etc/init.d/apache2 reload > /dev/null; \
        fi;
    endscript
}

Ejecutar logrotate periódicamente con cron

En Ubuntu normalmente ya existe un archivo de logrotate en /etc/cron.daily/. Si necesitas agregarlo manualmente al crontab:

59 23 * * * /usr/sbin/logrotate /etc/logrotate.conf