En sistemas Red Hat y todas sus variantes tenemos la opción de manejar la rotación de logs con logrotate, para evitar que los ficheros de log de los distintos servicios ( web,email,ftp,etc) ocupen una gran cantidad de espacio en disco o generen ficheros de gran tamaño.
La configuración de logrotate se encuentra en el fichero /etc/logrotate.conf, en el cual podemos especificar directivas generales para la rotación de logs, toda la información disponible en ‘man logrotate‘, un ejemplo de directivas asignadas en dicho fichero:
$ cat /etc/logrotate.conf # see "man logrotate" for details # rotar logs semanalmente weekly # Mantener los logs rotados cuatro semanas rotate 4 # crear un nuevo fichero para el log vacío tras rotar create # Descomentar si deseas que los logs se roten comprimidos #compress # Directorio en el cual incluiremos los ficheros de configuración # de cada servicio para rotacion de logs include /etc/logrotate.d
Como indica la última directiva, haremos un Include a la carpeta /etc/logrotate.d, donde incluiremos los ficheros de configuración para la rotación de logs de servicios, ejemplo:
$ ls -ltr -rw-r--r-- 1 root root 32 feb 23 2001 up2date -rw-r--r-- 1 root root 228 feb 21 2005 syslog -rw-r--r-- 1 root root 144 feb 21 2005 acpid -rw-r--r-- 1 root root 136 feb 21 2005 ppp -rw-r--r-- 1 root root 571 feb 21 2005 mgetty -rw-r--r-- 1 root root 789 dic 14 2006 mysql -rw-r--r-- 1 root root 319 ene 17 2007 psacct -rw-r--r-- 1 root root 163 nov 17 2007 named -rw-r--r-- 1 root root 61 nov 17 2007 rpm -rw-r--r-- 1 root root 89 nov 18 2007 yum -rw-r----- 1 root root 86 ene 23 12:58 apf -rw------- 1 root root 65 may 20 11:06 bfd -rw-r--r-- 1 root root 161 jun 7 14:51 cups -rw-r--r-- 1 root root 405 jun 10 18:00 exim -rw-r--r-- 1 root root 154 jun 12 16:48 snmpd
Vamos a coger como ejemplo la configuración para los logs de exim:
$ cat exim /var/log/exim_mainlog { create 0640 mailnull mail compress postrotate /usr/bin/killall -HUP exim endscript } /var/log/exim_paniclog { missingok create 0640 mailnull mail compress postrotate /usr/bin/killall -HUP exim endscript } /var/log/exim_rejectlog { create 0640 mailnull mail compress postrotate /usr/bin/killall -HUP exim endscript }
Lo primero que especificamos es la ruta al log, en este caso se encuentran en /var/log/exim_*.
Después le indicamos que cree un nuevo fichero para el log, vacío al rotar, con permiso 0640 y usuario/grupo mailnull/mail. Posteriormente, queremos los logs comprimidos, indicamos compress.
Cuando veamos en un script de logrotate las líneas postrotate y endscript, significa que lo que hay entre ellas se ejecutará tras rotar los logs. En caso de este script para el MTA de exim, lo que hacemos es ejecutar:
/usr/bin/killall -HUP exim
Lo que hace esta línea es reiniciar exim.
Esto es básicamente lo que debemos saber para tener configurado en nuestras máquinas logrotate, y funcionando para los servicios que necesitemos, de modo que ni se nos llene el disco debido al tamaño de los logs, ni tengamos ficheros log de gran tamaño.
Para información más detallada, ‘man logrotate’ nos explica detalladamente todas las directivas y configuraciones posibles.
Falta comentar que lógicamente, logrotate debe ir configurado en un cron para que se ejecute periódicamente, no obstante por defecto ya viene asignado, en caso de querer lanzarlo manualmente para probar si está correctamente configurado se hace del siguiente modo:
logrotate /etc/logrotate.conf -f
Le especificamos el fichero de configuración (en este caso /etc/logrotate.conf), y forzamos con -f. Y el resultado si todo va bien (para exim):
-rw-r----- 1 mailnull mail 10938 jul 8 14:15 exim_mainlog -rw-r----- 1 mailnull mail 7256521 jul 8 14:15 exim_mainlog.1.gz -rw-r----- 1 mailnull mail 648 jul 8 14:15 exim_paniclog -rw-r----- 1 mailnull mail 7425 jul 8 14:15 exim_paniclog.1.gz -rw-r----- 1 mailnull mail 151527 jul 6 04:02 exim_paniclog.2.gz -rw-r----- 1 mailnull mail 17052 jun 29 04:03 exim_paniclog.3.gz -rw-r----- 1 mailnull mail 5847 jun 22 04:02 exim_paniclog.4.gz -rw-r----- 1 mailnull mail 1766 jul 8 14:15 exim_rejectlog -rw-r----- 1 mailnull mail 3022844 jul 8 14:15 exim_rejectlog.1.gz -rw-r----- 1 mailnull mail 9933138 jul 6 04:02 exim_rejectlog.2.gz -rw-r----- 1 mailnull mail 9427375 jun 29 04:03 exim_rejectlog.3.gz -rw-r----- 1 mailnull mail 8896721 jun 22 04:03 exim_rejectlog.4.gz
Cualquier duda que tengáis podemos tratarla a través de los comentarios. Por supuesto existen muchas más opciones y configuraciones disponibles, todo es cuestión de revisar la documentación.
Consulta, como se configura logrotate para que guarde los logs de alguna direccion en otra direccion y los borre de la original.?
Solo para agradecerte la información.
Me ha sido muy util para unos sitios en producción de mi trabajo que tienen un trafico intenso y en donde los logs del apache crecen muchisimo.
Saludos cordiales.