Rotado de logs en CENTOS/RHEL. Ejemplo con apache

Y como queremos seguir promoviendo CENTOS/RHEL hoy vamos a hablar del rotado de logs en estas distribuciones.

Pues vienen perfectamente preparadas con una utilidad de rotado de logs llamada logrotate.

Por defecto este programa se ejecuta diariamente, no como servicio, sino a través de /etc/cron.daily. Aquí encontraremos un script similar a éste:

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate “ALERT exited abnormally with [$EXITVALUE]”
fi
exit

Es decir, toma la configuración del archivo logrotate.conf, donde definimos lo que queremos rotar y bajo qué condiciones:

# see “man logrotate” for details
# rotate log files weekly
weekly
# keep 24 weeks worth of backlogs. 6 MESES de logs
rotate 24

En estas sentencias definimos la configuración por defecto. Por ejemplo en este caso, aunque logrotate se ejecute diariamente, hemos definido que los logs se roten por defecto semanalmente. Muy importante es también “rotate 24”, donde definimos que queremos 24 archivos de log, que al haberse rotado semanalmente tenemos histórico de 24 semanas (6 meses de logs en la máquina).


# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
compress

Se crearán nuevos ficheros una vez rotados los logs, y podemos definir si queremos que se compriman o no.

A continuación podríamos incluir en este fichero logrotate.conf la configuración específica para rotar determinados ficheros. Pero lo recomendable es, para tener un control de los logs de la máquina, hacerlo como lo hacen los demonios de la máquina, que configuran el rotado de los logs que generan en archivo específico. Esto lo consiguen gracias a la sentencia:

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
Por lo tanto, en dicho directorio podemos encontrar los archivos de cada demonio, por ejemplo para syslog:
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

Donde se especifica que los ficheros indicados sean rotados, en este ejemplo según la configuración por defecto de logrotate, ya que no se indica nada, y posteriormente que se reinicie el demonio con kill -1 o –HUP, lo que permite que se cierren todos los ficheros que el proceso tenía abiertos, y al arrancar abra nuevos ficheros.

Así por ejemplo si quisiéramos rotar los ficheros de apache, y que se hiciera diariamente en vez de semanalmente, generaríamos el fichero /etc/logrotate.d/httpd con el contenido:

/var/log/httpd/*log {
missingok
daily
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}

P.D. ¡ Instalad CENTOS !

CentOS Installation
CentOS Installation

Deja un comentario

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