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