En sistemas Red Hat y todas sus variantes tenemos la opción de manejar la rotación de logs con logrotate, y evitar que los ficheros de log de los distintos servicios ocupen mucho espacio en disco.
Para configurar esto tenemos el fichero: /etc/logrotate.conf, donde podemos especificar directivas generales para la rotación de logs. Y en el directorio /etc/logrotate.d/ indicamos procedimientos de rotación para cada servicio de forma específica.
‘logrotate’ lo configuramos en un cron para que se ejecute de forma periódica. Ppor defecto ya viene configurado en el sistema, y si queremos lanzarlo manualmente para probar si está bien, ejecutamos:
# logrotate /etc/logrotate.conf -f
Veamos un ejemplo con el servicio apache. Tenemos que crear un fichero de texto plano ‘apache’ dentro de /etc/logrotate.d/ con permisos 644. Vamos a configurar que los ‘logs’ de apache : acces_log y error_log, roten diariamente y se guarden durante 31 días. Y además configuramos que se compriman los logs rotados.
El contenido del fichero ‘/etc/logrotate.d/apache‘ quedaría así :
/log/apache2/access_log {
daily
rotate 31
copytruncate
compress
notifempty
missingok
}
/log/apache2/error_log {
daily
rotate 31
copytruncate
compress
notifempty
missingok
}
Lo que se indica al principio , es la ruta donde se guardan los logs y el nombre. Y el significado de los siguientes parámetros es el siguiente:
– daily : para hacer la rotación de log diariamente
– rotate 31: mantener las rotaciones 31 días
– copytruncate: copia el archivo original de log y lo pone a 0
– compress: comprime logs antiguos
– notifempty: comprueba si está vacío el archivo log para entonces rotar o no
– missingok: Si da error en fichero pasa al siguiente que no de error
Si necesitamos ver las posibilidades de configuración y otros parámetros, podemos consultar el manual con : ‘man logrotate’, en la consola de nuestro sistema.
Si queremos, se puede indicar, después de la rotación de log, que se reinicie el servicio ‘apache’ :
postrotate
/etc/init.d/apachectl restart > /dev/null
endscript