En esta entrada voy a explicar como hacer un rotado de logs sencillo mediante logrotate y systemd, generaremos un servicio que se lanzará con systemctl en el cual estableceremos la configuración del rotado y su periodicidad.

Lo primero, crearemos un fichero .config en /etc/systemd/system con el nombre de nuestro rotado:

vim /etc/systemd/system/rotado_logs.config

En este fichero, insertaremos el siguiente código:

/ruta/con/logs/a/rotar/*.log {
    compress
    copytruncate
    delaycompress
    minsize 10M
    missingok
    nomail
    notifempty
    rotate 60
}

En el ejemplo, rotaremos los logs de la carpeta /ruta/con/logs/a/rotar/ que se llamen “Loquesea”.log
Se comprimirán los logs antiguos con gzip
Se truncará el fichero de log original, es decir, se copiará el mismo a un fichero milog.log.1 y cuando se haya completado, se vaciará el log original, esto evita tener que reiniciar servicios para regenerar el log
Se pospondrá la compresión del log rotado en dos ciclos, es decir, mantendremos dos logs sin rotar siempre.
El tamaño mínimo del log para ser rotado debe ser de 10Mb
Si no observamos un log, en lugar de devolver errores, pasará al siguiente
No enviará mails de confirmación, y retendrá logs durante 60 días/rotaciones.

Una vez creado el fichero, crearemos el servicio:

vim /etc/systemd/system/rotado_logs.service

En el cual insertaremos:

[Unit]
Description=Rotate My Log

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/rotado_logs.config --state /etc/systemd/system/rotado_logs.state --verbose
[Install]
WantedBy=default.target

Este fichero será el servicio en sí, en el que indicamos que debe hacer al lanzarse, que básicamente será, mediante el binario logrotate, ejecutar la configuración de rotado_logs.config

Por último, generaremos el fichero .timer, que es básicamente un cron de systemd que nos indicará cuando se va a ejecutar nuestro servicio de rotado de logs:

vim /etc/systemd/system/rotado_logs.timer

Y en este fichero añadimos:

[Unit]
Description=Rotate My Log Timer

[Timer]
OnCalendar=*-*-* 23:00:00
Persistent=true

[Install]
WantedBy=timers.target

Lo que hemos configurado es que se lance el servicio de rotado de logs todas las noches de todos los días a las 23.00.00.

Por último, solo nos queda habilitar el servicio de rotado de logs y su timer, y lanzar el timer:

systemctl enable rotado_logs
systemctl enable rotado_logs.timer
systemctl start rotado_logs.timer

¡Y listo! Todas las noches a las 23.00 se lanzará el servicio rotado_logs y rotará nuestros logs 🙂


0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *