Apache: rotar logs según fecha o tamaño

Hace unas semanas expliqué como usar logrotate para tener un buen sistema de rotado de logs. No obstante, no comenté la posibilidad de rotar los logs según su tamaño o fecha.

Pongamos el caso de que queremos rotar un determinado log de apache, en el momento que llegue a los 150Mb, para ello, iriamos a nuestro fichero de configuración para el logrotate de apache (/etc/logrotate.d/apache por ejemplo):

/usr/local/apache/logs/access_log {
    compress
    maxage 360
    size=+150M
    create 644 root root
    postrotate
     /etc/init.d/apache2 reload
    endscript
}

Como habréis comprobado, para asignarle un tamaño máximo de 150 Mb, añadimos size=tamaño_máximo, podemos indicar el tamaño en k o M sin problemas. Por otra parte, podemos especificar que se eliminen los ficheros de logs almacenados si superan un determinado tiempo de vida, en este caso 360 días, con el parámetro maxage.

Iremos desvelando más parámetros de logrotate

8 comentarios en “Apache: rotar logs según fecha o tamaño

  1. Carlos, normalmente los sistemas de estadísticas guardan sus datos fuera de los logs de apache, me explico.

    Primero recolectan los datos de los logs de apache, los procesan y los guardan en sus sistemas de estadísticas, por lo que no deberías tener problema.

    No obstante, para evitar perder datos cuando haces el logrotate, puedes meter, dentro de la configuración de rotación de logs de apache algo similar a lo siguiente:

    prerotate
    /usr/lib/cgi-bin/awstats.pl -config=????.??? -update
    endscript

    Así, procesarás las estadísticas y justo después rotarás los logs.

    un saludo-

  2. Muy buen script y explicación.

    Alex, se entiende lo que explicas, ahora la sentencia para generar las estadisticas antes de rotar los logs, lo agregas al scrip primero de todo?
    Ejemplo quedaría asi:

    prerotate
    /usr/lib/cgi-bin/awstats.pl -config=????.??? -update
    endscript

    /usr/local/apache/logs/access_log {
    compress
    maxage 360
    size=+150M
    create 644 root root
    postrotate
    /etc/init.d/apache2 reload
    endscript
    }

    Esta bien esto?

    Saludos

  3. Hola Mauro,

    El prerotate va dentro de las llaves:

    /usr/local/apache/logs/access_log {

    prerotate
    /usr/lib/cgi-bin/awstats.pl -config=????.??? -update
    endscript

    compress
    maxage 360
    size=+150M
    create 644 root root

    postrotate
    /etc/init.d/apache2 reload
    endscript

    }

    Saludos!

  4. La unica modificacion que realice es la siguiente:

    En lugar de:
    /etc/init.d/apache2 reload

    Coloque esta linea:
    /usr/sbin/apachectl graceful

    Es correcto???, ya que lo definido en el script original no estaba fisicamente en nuestro server.

    Atte.-

  5. Al hacer un graceful la diferencia es que no mata las conexiones activas, mientras que restart sí. Respecto a reload en principio solamente debería volver a leer los ficheros de configuración.

    Asegurate que apachectl se encuentra en esa ubicación.

    Saludos

Comments are closed.