Configuración de Logrotate: Guía Completa
Introducción
Los archivos de log son esenciales para monitorear la salud del sistema, depurar aplicaciones y mantener la seguridad, pero sin una gestión adecuada, pueden consumir rápidamente valioso espacio en disco y dificultar el análisis de logs. Logrotate es una potente utilidad que automatiza la rotación, compresión y eliminación de archivos de log, asegurando que tus logs permanezcan manejables mientras preserva datos históricos cuando sea necesario.
Logrotate maneja el ciclo de vida completo de los archivos de log rotándolos automáticamente según el tamaño o intervalos de tiempo, comprimiendo logs antiguos para ahorrar espacio y eliminando logs antiguos según políticas de retención. Esta automatización previene el agotamiento del espacio en disco, mantiene el rendimiento del sistema y asegura el cumplimiento de los requisitos de retención de datos.
En esta guía completa, exploraremos la configuración de logrotate desde conceptos básicos hasta implementaciones avanzadas. Aprenderás cómo configurar políticas de rotación para logs del sistema, logs de aplicaciones y servicios personalizados, implementar estrategias de compresión, gestionar períodos de retención y solucionar problemas comunes. Ya sea que estés gestionando un solo servidor o una flota de sistemas, dominar logrotate es esencial para mantener una infraestructura de logging saludable.
Prerrequisitos
Antes de configurar logrotate, asegúrate de tener:
- Un servidor Linux (Ubuntu 20.04/22.04, Debian 10/11, CentOS 7/8, Rocky Linux 8/9, o similar)
- Acceso root o sudo para modificar configuraciones del sistema
- Comprensión básica del sistema de archivos de Linux y permisos
- Familiaridad con ubicaciones de archivos de log (típicamente
/var/log/) - Editor de texto (nano, vim, o vi)
Requisitos del Sistema:
- Paquete logrotate instalado (usualmente preinstalado en la mayoría de distribuciones)
- Suficiente espacio en disco para archivos de log temporales durante la rotación
- Daemon cron en ejecución para rotación programada
Instalando y Verificando Logrotate
La mayoría de distribuciones Linux incluyen logrotate por defecto, pero vamos a verificar e instalar si es necesario.
Instalación
En Ubuntu/Debian:
# Verificar si logrotate está instalado
dpkg -l | grep logrotate
# Instalar si no está presente
sudo apt update
sudo apt install logrotate -y
# Verificar instalación
logrotate --version
En CentOS/Rocky Linux/AlmaLinux:
# Verificar si logrotate está instalado
rpm -qa | grep logrotate
# Instalar si no está presente
sudo yum install logrotate -y
# Verificar instalación
logrotate --version
Verificar Servicio Logrotate
# Verificar timer systemd de logrotate (si usa systemd)
systemctl list-timers | grep logrotate
# Ver trabajo cron de logrotate
cat /etc/cron.daily/logrotate
# Verificar archivo de estado de logrotate
cat /var/lib/logrotate/status
# o en sistemas más antiguos
cat /var/lib/logrotate.status
Entendiendo la Arquitectura de Logrotate
Archivo de Configuración Principal
El archivo de configuración principal es /etc/logrotate.conf:
# Ver configuración principal
sudo cat /etc/logrotate.conf
Estructura típica de logrotate.conf:
# Opciones globales
weekly
rotate 4
create
dateext
compress
# Archivos de configuración específicos de paquetes
include /etc/logrotate.d
# Logs específicos del sistema
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
Directorio de Configuración
Las configuraciones específicas de aplicaciones se almacenan en /etc/logrotate.d/:
# Listar todas las configuraciones de logrotate
ls -l /etc/logrotate.d/
# Ejemplos de configuraciones
/etc/logrotate.d/apache2
/etc/logrotate.d/nginx
/etc/logrotate.d/mysql-server
/etc/logrotate.d/rsyslog
Archivo de Estado
Logrotate rastrea el historial de rotación en un archivo de estado:
# Ver estado actual de rotación
sudo cat /var/lib/logrotate/status
# Ejemplo de salida:
# "/var/log/syslog" 2024-1-11-3:0:0
# "/var/log/auth.log" 2024-1-11-3:0:0
# "/var/log/nginx/access.log" 2024-1-10-3:0:0
Sintaxis de Configuración de Logrotate
Estructura Básica de Configuración
Un archivo de configuración de logrotate consiste en patrones de archivos de log y directivas:
# Estructura básica
/ruta/al/logfile {
# Directivas de rotación
directiva1
directiva2 valor
# Scripts
prerotate
# comandos antes de la rotación
endscript
postrotate
# comandos después de la rotación
endscript
}
Directivas Comunes
Frecuencia de Rotación:
daily # Rotar logs diariamente
weekly # Rotar logs semanalmente (domingos por defecto)
monthly # Rotar logs mensualmente (primer día del mes)
yearly # Rotar logs anualmente (1 de enero)
Condiciones de Rotación:
size 100M # Rotar cuando el archivo alcance 100MB
minsize 10M # Rotar solo si el archivo es al menos 10MB
maxsize 500M # Forzar rotación si el archivo excede 500MB
rotate 7 # Mantener 7 logs rotados
maxage 30 # Eliminar logs más antiguos de 30 días
Manejo de Archivos:
compress # Comprimir logs rotados con gzip
nocompress # No comprimir logs
delaycompress # Comprimir en la próxima rotación (mantener uno sin comprimir)
compresscmd gzip # Especificar comando de compresión
compressext .gz # Especificar extensión de compresión
compressoptions -9 # Compresión máxima
create 0640 user group # Crear nuevo log con permisos
nocreate # No crear nuevo archivo de log
copy # Copiar log en lugar de mover
copytruncate # Copiar y luego truncar log original
Archivos Faltantes:
missingok # No dar error si el archivo de log falta
notifempty # No rotar si el log está vacío
ifempty # Rotar incluso si el log está vacío
Manejo de Logs Antiguos:
dateext # Agregar extensión de fecha (ej., .20240111)
dateformat -%Y%m%d # Formato de fecha personalizado
extension .log # Extensión a preservar
olddir /ruta/a/antiguos # Mover logs antiguos a directorio
noolddir # Mantener logs antiguos en el mismo directorio
Envío por Correo:
mail [email protected] # Enviar log por correo antes de eliminar
nomail # No enviar logs por correo
mailfirst # Enviar el log más nuevo
maillast # Enviar el log más antiguo (predeterminado)
Logs Compartidos:
sharedscripts # Ejecutar scripts una vez para todos los logs coincidentes
nosharedscripts # Ejecutar scripts para cada log por separado
Configuraciones Básicas de Logrotate
Rotación Diaria Simple
# Crear configuración: /etc/logrotate.d/myapp
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myapp myapp
}
Explicación:
- Rotar todos los archivos
.logen/var/log/myapp/diariamente - Mantener 7 días de logs
- Comprimir logs antiguos (pero retrasar compresión por una rotación)
- No dar error si faltan logs
- No rotar logs vacíos
- Crear nuevos logs con permisos y propietario específicos
Rotación Basada en Tamaño
# Configuración para logs de aplicación grandes
/var/log/application/app.log {
size 100M
rotate 5
compress
missingok
notifempty
create 0644 appuser appgroup
dateext
}
Explicación:
- Rotar cuando el log alcance 100MB
- Mantener 5 copias rotadas
- Agregar extensión de fecha a archivos rotados
- Comprimir logs rotados inmediatamente
Rotación Semanal con Directorio Antiguo
/var/log/backup/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 0640 root root
olddir /var/log/backup/old
dateext
dateformat -%Y%m%d
}
Explicación:
- Rotar semanalmente (cada domingo)
- Mantener 4 semanas de logs
- Mover logs antiguos a directorio separado
- Agregar formato de fecha personalizado a nombres de archivo
Configuraciones Avanzadas de Logrotate
Logs de Servidor Web (Nginx)
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi
endscript
postrotate
[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
Características clave:
- Rota diariamente, mantiene 2 semanas
- Usa
sharedscriptspara ejecutar postrotate una vez - Señala a nginx para reabrir archivos de log después de la rotación
Servidor Web Apache
# /etc/logrotate.d/apache2
/var/log/apache2/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
/usr/sbin/apache2ctl graceful > /dev/null 2>&1 || true
endscript
}
Logs MySQL/MariaDB
# /etc/logrotate.d/mysql-server
/var/log/mysql/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 mysql adm
sharedscripts
postrotate
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}
Logs de Aplicación con Scripts Personalizados
# /etc/logrotate.d/custom-app
/var/log/custom-app/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 appuser appgroup
dateext
dateformat -%Y%m%d-%s
maxsize 500M
prerotate
# Notificar sistema de monitoreo
echo "Rotating logs for custom-app" | \
logger -t logrotate
# Respaldar logs críticos antes de rotar
if [ -f /var/log/custom-app/critical.log ]; then
cp /var/log/custom-app/critical.log \
/backup/logs/critical-$(date +%Y%m%d).log
fi
endscript
postrotate
# Reiniciar aplicación para usar nuevo archivo de log
systemctl reload custom-app.service
# Actualizar índice de logs
/usr/local/bin/update-log-index.sh
endscript
firstaction
# Ejecutar antes de que se rote cualquier log
mkdir -p /backup/logs
endfirstaction
lastaction
# Ejecutar después de que todos los logs se hayan rotado
/usr/local/bin/cleanup-old-backups.sh
endlastaction
}
Múltiples Archivos de Log con Diferentes Políticas
# /etc/logrotate.d/multi-app
# Logs de acceso - alto volumen, retención corta
/var/log/multi-app/access.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 appuser appgroup
size 100M
}
# Logs de error - mantener más tiempo
/var/log/multi-app/error.log {
weekly
rotate 12
compress
delaycompress
missingok
notifempty
create 0644 appuser appgroup
maxsize 50M
}
# Logs de auditoría - retención larga, sin compresión
/var/log/multi-app/audit.log {
monthly
rotate 24
nocompress
missingok
notifempty
create 0600 appuser appgroup
dateext
dateformat -%Y%m
}
Patrones Comodín
# Rotar todos los logs en múltiples directorios
/var/log/app1/*.log /var/log/app2/*.log /var/log/app3/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
systemctl reload app-logger.service
endscript
}
# Excluir archivos específicos
/var/log/application/*.log {
# Esto rotará todos los archivos .log excepto debug.log
daily
rotate 5
compress
missingok
notifempty
# Usar tabooext para excluir archivos
tabooext + .debug
}
Copiar y Truncar para Archivos Abiertos
# Para aplicaciones que no soportan reapertura de logs
/var/log/legacy-app/app.log {
daily
rotate 7
compress
copytruncate
missingok
notifempty
# Nota: copytruncate puede perder algunas entradas de log
# durante la operación de copia
}
Estrategias de Compresión
Usando Diferentes Herramientas de Compresión
Gzip (predeterminado):
/var/log/app/*.log {
compress
compresscmd /usr/bin/gzip
compressoptions -9
compressext .gz
}
Bzip2 (mejor compresión, más lento):
/var/log/app/*.log {
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
compressoptions -9
}
XZ (mejor compresión, más lento):
/var/log/app/*.log {
compress
compresscmd /usr/bin/xz
uncompresscmd /usr/bin/unxz
compressext .xz
compressoptions -9e
}
Zstd (compresión rápida con buena relación):
/var/log/app/*.log {
compress
compresscmd /usr/bin/zstd
uncompresscmd /usr/bin/unzstd
compressext .zst
compressoptions -19
}
Estrategia de Compresión Diferida
# Mantener el log rotado más reciente sin comprimir
/var/log/app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
# Resultado:
# app.log (actual, sin comprimir)
# app.log.1 (ayer, sin comprimir)
# app.log.2.gz (hace 2 días, comprimido)
# app.log.3.gz (hace 3 días, comprimido)
Probando y Depurando Logrotate
Probar Sintaxis de Configuración
# Probar archivo de configuración específico
sudo logrotate -d /etc/logrotate.d/nginx
# Probar configuración principal
sudo logrotate -d /etc/logrotate.conf
# Salida de depuración detallada
sudo logrotate -dv /etc/logrotate.d/myapp
Forzar Rotación
# Forzar rotación incluso si no se cumplen las condiciones
sudo logrotate -f /etc/logrotate.conf
# Forzar configuración específica
sudo logrotate -f /etc/logrotate.d/nginx
# Forzar con salida detallada
sudo logrotate -fv /etc/logrotate.d/myapp
Prueba Manual de Rotación
# Probar rotación sin actualizar archivo de estado
sudo logrotate -d --state /tmp/logrotate-test.status /etc/logrotate.d/myapp
# Realizar rotación real con estado temporal
sudo logrotate --state /tmp/logrotate-test.status /etc/logrotate.d/myapp
Verificar Resultados de Rotación
# Verificar archivo de estado
sudo cat /var/lib/logrotate/status | grep myapp
# Listar logs rotados
ls -lht /var/log/myapp/
# Verificar creación de nuevo log
ls -l /var/log/myapp/app.log
# Verificar permisos del log
stat /var/log/myapp/app.log
Habilitar Logging de Logrotate
# Agregar a /etc/logrotate.conf o configuración específica
/var/log/myapp/*.log {
daily
rotate 7
# Registrar eventos de rotación en syslog
prerotate
logger -t logrotate "Rotating myapp logs"
endscript
postrotate
logger -t logrotate "Completed myapp log rotation"
endscript
}
# Ver logs de rotación
sudo grep logrotate /var/log/syslog
Programación y Automatización
Ejecución Basada en Cron
Logrotate típicamente se ejecuta vía cron:
# Ver trabajo cron diario
cat /etc/cron.daily/logrotate
# Contenido típico:
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf
Programación Personalizada
Ejecutar logrotate cada hora:
# Crear script horario
sudo nano /etc/cron.hourly/logrotate-hourly
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.d/high-volume-app
# Hacer ejecutable
sudo chmod +x /etc/cron.hourly/logrotate-hourly
Programación cron personalizada:
# Editar crontab
sudo crontab -e
# Ejecutar a las 3 AM diariamente
0 3 * * * /usr/sbin/logrotate /etc/logrotate.conf
# Ejecutar cada 6 horas
0 */6 * * * /usr/sbin/logrotate /etc/logrotate.d/frequent-app
Timer Systemd
Crear timer systemd para logrotate:
# Crear unidad de timer
sudo nano /etc/systemd/system/logrotate.timer
[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
Crear unidad de servicio:
sudo nano /etc/systemd/system/logrotate.service
[Unit]
Description=Rotate log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
ConditionACPower=true
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7
PrivateTmp=true
Habilitar e iniciar timer:
sudo systemctl daemon-reload
sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
sudo systemctl status logrotate.timer
# Listar programación de timer
systemctl list-timers logrotate.timer
Monitoreo y Alertas
Monitorear Éxito de Rotación
#!/bin/bash
# check-logrotate.sh - Monitorear ejecución de logrotate
STATUS_FILE="/var/lib/logrotate/status"
LOG_DIR="/var/log/myapp"
EMAIL="[email protected]"
# Verificar si la rotación ocurrió hoy
TODAY=$(date +%Y-%m-%d)
LAST_ROTATION=$(grep "$LOG_DIR" "$STATUS_FILE" | awk '{print $2}' | cut -d'-' -f1-3)
if [ "$LAST_ROTATION" != "$TODAY" ]; then
echo "WARNING: Logrotate may not have run today for $LOG_DIR" | \
mail -s "Logrotate Alert" "$EMAIL"
fi
# Verificar logs antiguos sin comprimir
OLD_LOGS=$(find "$LOG_DIR" -name "*.log.*" -not -name "*.gz" -mtime +2)
if [ -n "$OLD_LOGS" ]; then
echo "Found old uncompressed logs: $OLD_LOGS" | \
mail -s "Logrotate Compression Issue" "$EMAIL"
fi
Monitoreo de Espacio en Disco
#!/bin/bash
# monitor-log-space.sh - Alertar sobre tamaño de directorio de logs
LOG_DIR="/var/log"
THRESHOLD=80 # Porcentaje
EMAIL="[email protected]"
USAGE=$(df "$LOG_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
{
echo "WARNING: $LOG_DIR is ${USAGE}% full"
echo ""
echo "Largest log files:"
du -sh "$LOG_DIR"/* | sort -rh | head -10
echo ""
echo "Logrotate status:"
tail -20 /var/lib/logrotate/status
} | mail -s "Log Directory Space Alert" "$EMAIL"
fi
Detección de Fallos de Rotación
#!/bin/bash
# detect-rotation-failures.sh
# Verificar rotaciones fallidas en syslog
ERRORS=$(grep logrotate /var/log/syslog | grep -i "error\|fail" | tail -10)
if [ -n "$ERRORS" ]; then
echo "Logrotate errors detected:"
echo "$ERRORS"
echo "$ERRORS" | mail -s "Logrotate Errors Detected" [email protected]
fi
# Verificar archivos de log muy grandes (puede indicar fallo de rotación)
find /var/log -type f -size +1G -exec ls -lh {} \; | while read line; do
echo "Large log file detected: $line"
echo "$line" | mail -s "Large Log File Alert" [email protected]
done
Solución de Problemas Comunes
Problema 1: Logrotate No Se Ejecuta
Diagnóstico:
# Verificar si logrotate está instalado
which logrotate
# Verificar que el daemon cron esté ejecutándose
systemctl status cron # Debian/Ubuntu
systemctl status crond # CentOS/Rocky
# Verificar trabajo cron
ls -l /etc/cron.daily/logrotate
# Probar ejecución manual
sudo /etc/cron.daily/logrotate
# Verificar errores
sudo logrotate -v /etc/logrotate.conf
Solución:
# Reinstalar logrotate
sudo apt install --reinstall logrotate
# Arreglar permisos de cron
sudo chmod +x /etc/cron.daily/logrotate
# Reiniciar daemon cron
sudo systemctl restart cron
Problema 2: Logs No Rotan
Diagnóstico:
# Verificar sintaxis de configuración
sudo logrotate -d /etc/logrotate.d/myapp
# Verificar que el archivo de log existe
ls -l /var/log/myapp/app.log
# Verificar archivo de estado
sudo grep "myapp" /var/lib/logrotate/status
# Probar forzar rotación
sudo logrotate -f /etc/logrotate.d/myapp
Causas comunes:
- Directiva
notifemptycon log vacío - Umbral de tamaño no alcanzado
- Ruta de archivo o permisos incorrectos
- Errores de sintaxis en configuración
Solución:
# Eliminar notifempty si el log está vacío
# O asegurar que el log tenga contenido
# Arreglar permisos
sudo chown root:root /etc/logrotate.d/myapp
sudo chmod 644 /etc/logrotate.d/myapp
# Corregir errores de sintaxis
sudo logrotate -d /etc/logrotate.d/myapp
Problema 3: Errores de Permisos Denegados
Diagnóstico:
# Ejecutar con salida detallada
sudo logrotate -dv /etc/logrotate.d/myapp
# Verificar permisos de archivo de log
ls -l /var/log/myapp/
# Verificar usuario del proceso logrotate
ps aux | grep logrotate
Solución:
# Asegurar que logrotate se ejecute como root
sudo logrotate /etc/logrotate.conf
# Arreglar permisos del directorio de logs
sudo chmod 755 /var/log/myapp/
sudo chown myapp:myapp /var/log/myapp/*.log
# Actualizar directiva create
# En /etc/logrotate.d/myapp:
create 0644 myapp myapp
Problema 4: Fallo de Compresión
Diagnóstico:
# Verificar si la herramienta de compresión está instalada
which gzip
# Verificar configuración de compresión
sudo logrotate -dv /etc/logrotate.d/myapp | grep compress
# Verificar archivos comprimidos
ls -l /var/log/myapp/*.gz
Solución:
# Instalar herramienta de compresión
sudo apt install gzip
# Verificar espacio en disco
df -h /var/log
# Probar compresión manualmente
gzip -t /var/log/myapp/app.log.1.gz
# Eliminar compresión fallida
sudo rm /var/log/myapp/*.gz
sudo logrotate -f /etc/logrotate.d/myapp
Problema 5: La Aplicación No Escribe en el Nuevo Log
Diagnóstico:
# Verificar si se creó el nuevo archivo de log
ls -l /var/log/myapp/app.log
# Verificar permisos
stat /var/log/myapp/app.log
# Verificar proceso de aplicación
lsof | grep app.log
Solución:
# Usar copytruncate para aplicaciones que no pueden reabrir logs
/var/log/myapp/app.log {
copytruncate
daily
rotate 7
}
# O agregar script postrotate para recargar aplicación
postrotate
systemctl reload myapp.service
endscript
# O enviar señal para reabrir logs
postrotate
kill -HUP $(cat /var/run/myapp.pid)
endscript
Mejores Prácticas
Organización de Configuración
# 1. Usar archivos de configuración separados por aplicación
/etc/logrotate.d/nginx
/etc/logrotate.d/mysql
/etc/logrotate.d/myapp
# 2. Usar nombres de archivo descriptivos
/etc/logrotate.d/application-access-logs
/etc/logrotate.d/application-error-logs
# 3. Documentar configuraciones inusuales
# /etc/logrotate.d/myapp
# Rotación especial para aplicación de alto volumen
# Rota cada hora vía cron.hourly en lugar de diariamente
/var/log/myapp/*.log {
size 100M
rotate 24
compress
}
Consideraciones de Seguridad
# Asegurar archivos de configuración
sudo chmod 644 /etc/logrotate.d/*
sudo chown root:root /etc/logrotate.d/*
# Restringir acceso a logs
create 0640 appuser appgroup
# No enviar logs sensibles por correo
nomail
# Usar directorio antiguo seguro
olddir /var/log/secure-archive
create 0600 root root
Optimización de Rendimiento
# Usar compresión diferida para logs accedidos frecuentemente
delaycompress
# Comprimir en segundo plano para archivos grandes
compress
compressoptions -1 # Compresión rápida
# Usar sharedscripts para reducir sobrecarga
sharedscripts
postrotate
systemctl reload nginx
endscript
# Limitar frecuencia de rotación para logs de alto volumen
size 500M
maxsize 1G
Políticas de Retención
# Logs de alto volumen a corto plazo
/var/log/app/access.log {
daily
rotate 7
maxage 7
}
# Logs de error a mediano plazo
/var/log/app/error.log {
weekly
rotate 12
maxage 90
}
# Logs de auditoría a largo plazo
/var/log/app/audit.log {
monthly
rotate 24
maxage 730
nocompress
}
Conclusión
Logrotate es una herramienta esencial para mantener una infraestructura de logging saludable en sistemas Linux. La configuración adecuada asegura que los logs se roten eficientemente, el espacio en disco se gestione efectivamente y los datos históricos se retengan según tus requisitos.
Puntos clave:
- Gestión automatizada - Logrotate maneja el ciclo de vida completo de los archivos de log sin intervención manual
- Políticas flexibles - Configurar rotación basada en tiempo, tamaño o ambos para satisfacer las necesidades de tu aplicación
- Estrategias de compresión - Equilibrar ahorro de espacio en disco con requisitos de acceso usando compresión apropiada
- Integración de aplicaciones - Usar scripts pre/postrotate para asegurar que las aplicaciones manejen la rotación de logs correctamente
- Monitoreo - Verificar regularmente que la rotación funcione como se espera y el espacio en disco esté bajo control
Al implementar las configuraciones y prácticas descritas en esta guía, mantendrás archivos de log manejables, prevendrás problemas de espacio en disco, asegurarás el cumplimiento de requisitos de retención y facilitarás el análisis eficiente de logs al solucionar problemas o investigar incidentes de seguridad.
Recuerda probar tus configuraciones de logrotate exhaustivamente antes de desplegar a producción, monitorear la ejecución de rotación regularmente y ajustar las políticas de retención a medida que tu capacidad de almacenamiento y requisitos de cumplimiento evolucionen.


