Rotar logs de apache con logrotate en Linux
Un log es un registro de eventos producidos durante un periodo de tiempo concreto. El servidor web apache almacena en distintos logs (ficheros de registros) la actividad de nuestra aplicación (accesos y errores) de los distintos sitios web que tengamos configurados.
Para evitar que el tamaño de los logs crezca de forma incontrolada se opta por rotarlos, en caso de no hacerlo podremos quedarnos rápidamente sin espacio en disco.
No debemos olvidar que la información recopilada en los ficheros log se debe conservar al menos durante 1 año por eventuales necesidades legales, de este modo, además de rotarlos se opta habitualmente por comprimir logs.
A continuación detallaré como rotar logs de nuestro servidor web apache configurando logrotate pare desempeñar esta función. Los ejemplos mostrados han sido testeados en la distribución Debian de Linux, aunque en las distribuciones más comunes su configuración es similar.
Instalación logrotate – rotar logs de apache con logrotate
La herramienta logrotate ya se encuentra preconfigurada e instalada en la distribución Debian de Linux, de este modo en la mayoría de los casos nos podríamos saltar este paso.
Para instalar el logrotate usaremos la herramienta apt-get (sistema de gestión de paquetes de software):
apt-get update apt-get install logrotate
Una vez finalizada la instalación de logrotate comprobamos que disponemos de todos los ficheros y carpetas necesarias para su correcto funcionamiento:
/var/lib/logrotate/ /etc/logrotate.d/ /usr/sbin/logrotate /etc/logrotate.conf
Configurar logrotate – rotar logs de apache con logrotate
Para configurar nuestro logrotate actualizaremos el fichero logrotate.conf:
vi /etc/logrotate.conf
El contenido de nuestro logrotate.conf será similar al mostrado posteriormente:
# ejecutar "man logrotate" para más información # rotar log semanalmente weekly # mantener logs durante 4 semanas rotate 4 # rotar y crear nuevo log aunque esté vació el anterior create # descomentar si quieres comprimir logs #compress # ubicación de paquetes para el rotado de logs include /etc/logrotate.d # los logs wtmp o btmp los haremos rotar aquí /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0664 root utmp rotate 1 } # los logs del sistema se pueden rotar aquí
Crearemos el fichero para rotar logs de apache con logrotate en la distribución Debian de Linux:
vi /etc/logrotate.d/apache2
Y le añadiremos el siguiente contenido al fichero creado anteriormente:
# ubicación de los logs del servidor web apache /var/log/apache2/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if [ -f /var/run/apache2.pid ]; then /etc/init.d/apache2 restart > /dev/null fi endscript } # logs de acceso y errores de los sitios web /var/www/logs/*.log { weekly missingok rotate 52 compress notifempty create 640 root root sharedscripts postrotate if [ -f /var/run/apache2.pid ]; then /etc/init.d/apache2 restart > /dev/null fi endscript }
Ejecutar logrotate – rotar logs de apache con logrotate
Posteriormente comprobaremos manualmente el correcto funcionamiento de logrotate usando el siguiente comando:
/usr/sbin/logrotate /etc/logrotate.conf -f
Además, logrotate debe ir configurado en un cron para que se ejecute periódicamente, esto podremos hacerlo gracias a la herramienta crontab (ejecuta procesos o scripts a intervalos regulares):
crontab -e
Y agregamos en nuestro archivo crontab el siguiente contenido:
# Rotar logs de apache con logrotate a las 3 am 0 03 * * * root /usr/sbin/logrotate /etc/logrotate.conf > /dev/null 2>&1
Finalmente reiniciaremos el proceso cron para que los cambios surtan efecto:
/etc/init.d/cron restart
No debemos olvidar rotar logs de apache posteriormente de actualizar nuestro sistema de estadísticas web (por ejemplo a la 1 am), ya que de no hacerlo perderíamos información.
El rotado de logs descrito anteriormente lo podemos aplicar a cualquier otra herramienta del sistema. De este modo, espero que este artículo os sea de gran utilidad no sólo para este caso sino para muchos otros.
Cualquier duda que tengáis podemos tratarla a través de los comentarios.
Mediante software como cronolog puedes rotar los logs sin necesidad de reiniciar el apache.
No es necesario reiniciar el servidor web apache. Y en caso de que fuera necesario tras realizar alguna modificación en el servidor web bastaría con realizar un «/etc/init.d/apache2 reload» desde la consola.
Un saludo,
Alejandro Arco
Fijate que en el postrotate le tienes metido un apache restart:
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
Justo lo que necesitaba muchas gracias
mas facil…. para cambios en config…
logrotate -vf /etc/logrotate.conf
Buenas,
No me funciona (RedHat 5.2),
error: httpd:1 Duplicate log entry for /var/chroot…/httpd/access_log
Gracias,
D. Juan.