Configurando logrotate para Nginx

No hace mucho saqué una entrada explicando cómo instalar nginx con Pagespeed, haciendo una compilación completa y configurando ciertas cosas para tener funcionando un sitio con PHP. Pues bien, hay un detalle, no menor, que es importante tener bien controlado, y no es ni más ni menos que los logs.

Sobre todo, cuando tienes un log activado que va creciendo y creciendo muy rápidamente, podrías verte en la situación de que el disco de la máquina se te llena sólo en archivos que quizás nunca más vayas a necesitar mirar. Bueno, pues la solución es logrotate.

Logrotate es una herramienta que ya viene instalada por defecto en las distribuciones, pero actúa de forma silenciosa. Probablemente nunca te darás cuenta de que la tienes instalada hasta que te falle y te veas con ficheros de logs de más de 2 GB. En condiciones normales (con nginx instalado con tu distribución de Linux), esto viene configurado automáticamente y no hay nada que hacer: cada cierto tiempo renombra los logs antiguos para almacenarlos separadamente y los comprime. Pero… No es así de fácil si acabas de compilar tú solito Nginx.

Sin embargo la solución es muy sencilla, y pasa por añadir un fichero a la configuración de logrotate. Directamente, entrando como sudo podemos crear y abrir un archivo para editar con este comando:

sudo nano /etc/logrotate.d/nginx-local.conf

Y copiamos lo siguiente. Después guardamos el archivo.

/var/log/nginx/* {
    daily
    rotate 10
    size 10M
    compress
    postrotate
        /bin/systemctl restart nginx.service
    endscript
}

Afortunadamente esta configuración no necesita demasiadas explicaciones. Daily, simplemente rotará los scripts a diario, y mantendrá 10 copias antiguas (rotate 10). Sólo los rotará si se cumple que size 10M. Después los comprimirá y ejecutará un comando, en este caso, para reiniciar Nginx.

La primera línea la dejaremos como está. Si recordáis del artículo anterior, es donde configuramos nuestros logs de nginx. Reiniciar el servicio de Nginx es importante para que éste reconozca que debe crear un fichero nuevo, pues el anterior estará rotado y no lo podrá editar.

Podemos comprobar que funciona y hace lo que tiene que hacer con este comando. La -d es de debug, que básicamente dirá lo que va a hacer pero no hará nada. Si vemos que hace lo esperado, lo podemos ejecutar sin ningún flag para ver el resultado final, o añadir -v si queremos que nos vaya diciendo lo que hace (esta vez sí, sin simulacros)

logrotate -d /etc/logrotate.d/nginx-local.conf

El resto de cosas estará ya gestionado por logrotate, por lo que sólo deberíamos preocuparnos si realmente no vemos rotados los logs en los siguientes días.

Esta entrada es algo/bastante técnica, pero he de reconocer que al primero que le sirve es a mí. Siempre viene bien tener a mano, y documentado, la configuración que va personalizando uno en el servidor.

Un saludo 😉

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.