Servicios / mayo 14, 2018

Rotar archivos de log de nuestros servicios en GNU/Linux

noPor lo general, en cualquier distribución de GNU/Linux podemos encontrar un proceso encargado de rotar los registros que quedan guardados en el servidor. El proceso en cuestión se llamado logrotate que está diseñado para facilitar la administración de sistemas que generan grandes cantidades de archivos de registro.

Permite rotación, comprensión, eliminación y envío automático de archivos de registro. Cada archivo de registro se puede gestionar diariamente, semanalmente, mensualmente o cuando tenga un tamaño en concreto.

Normalmente, logrorate se ejecuta como un trabajo en cron de manera diaria. No se modificará un registro varias veces al día a menos que el criterio para ese fichero log se base en el tamaño del fichero y logrorate se ejecute varias veces al día o a menos que se usen las opciones -f o --force.

Mirando cómo mejorar ciertas cosas de mi servidor me di cuenta que los registros de errores y accesos de mis webs que tengo en mi servidor no estaban rotando. Esto es debido a que falta una configuración adicional.

Me di cuenta -seguramente a tiempo- de que tenía algunos registros log desde diciembre que no recibían ningún tipo de rotación y que ya estaban a punto de llegar a los 300MB:

169M /DocumentRoot/*/logs/access.log
382M /DocumentRoot/*/logs/access.log
218M /DocumentRoot/*/logs/access.log
162M /DocumentRoot/*/logs/access.log
95M /DocumentRoot/*/logs/error.log

Así que lo que vamos hacer en este tutorial, es configurar logrotate para que haga la rotación y comprensión de los registros de las webs que tengo en mi VPS y de paso aprovecharemos para aprender algo más sobre logrorate.

Configurar logrotate en nuestro servidor

Cuando instalamos un servicio en nuestro VPS, como puede ser Apache o Nginx, proFTPd… durante la instalación añade un fichero de configuración dentro de la ruta /etc/logrotate.d. Por ejemplo, aquí el fichero de configuración para Apache /etc/logrotate.d/apache2:

/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}

Dentro de este fichero, podremos añadir otro pedazo de código similar para que se generen los registros de todas nuestras webs, lo que tendremos que tener en cuenta será la ruta de los logs por cada web, en mi caso /var/www/*/logs/*.log

/var/www/*/logs/*.log {
daily
missingok
rotate 10
compress
notifempty
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}

Los parámetros que hemos añadido, tienen el siguiente significado:

  • daily: Esto significa que rotarán cada día, por lo que tendremos un fichero log por cada día. Esto nos ayudará en muchas ocasiones para buscar errores de manera más fácil. También tienes la opción de poner weekly de esta manera rotarán semanalmente.
  • missingok: Esto hará que si el fichero log no existe, no devolverá ningún error.
  • rotate 10: El número indica cuantos ficheros guardará, por lo que si tenemos el valor 15, significará que tendrás aproximadamente dos semanas guardaras -en el caso de que tengas daily-.
  • compress: Este parámetro significa que comprimirá el fichero log una vez rotado. Es aquello de error.log.gz, de esta manera ocuparán menos los ficheros.
  • notifempty: Para evitar que haga una rotación cuando el fichero de log está vacío.

Lo siguiente, es ejecutar un script cada vez que se tenga que realizar la rotación de ficheros, lo que hará en esta ocasión, será recargar el servidor apache2. Si quieres ver todos los parámetros de logrotate, puedes revisar en su manual todas las funcionalidades.

Como hemos dicho anteriormente, logrotate no es un demonio que se ejecuta en el servidor. Así que cada vez que modifiquemos el fichero de configuración no es necesario reiniciar ningún servicio en concreto. Logrotate utilizará la nueva configuración la próxima vez que ejecute la rotación de los ficheros.

Aún así, existe la posibilidad de ejecutar manualmente logrotate para comprobar que la configuración que hemos realizado es correcta, para ello se puede ejecutar el comando:

logrotate -vf /etc/logrotate.conf

Ningún comentario “Rotar archivos de log de nuestros servicios en GNU/Linux”

Leave a Reply

avatar
500
  Suscribirte  
Notificarme

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.