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