Rotation des logs Apache

Les logs sont une mine d’or pour comprendre le fonctionnement d’une application et débusquer les bogues vicieux. Il faut cependant veiller à ne pas les laisser grossir excessivement car cela ralenti progressivement l’application et fini parfois par la paralyser.

Sous Linux, on utilise généralement logrotate qui est simple à mettre en œuvre et efficace. Il permet de faire tourner les logs de n’importe quelle application.

Dans le cas particulier d’Apache, un redémarrage rechargement est nécessaire car sinon il n’écrit plus dans le nouveau fichier de log vierge. Cela peut-être gênant pour des serveurs fortement sollicités pour lesquels il est difficile de trouver une période sans charge.
Correction: Suite à une remarque judicieuse d’Eric Daspet sur Twitter, j’ai corrigé ce paragraphe.

Pour pallier à ce problème, l’utilitaire rotatelogs est livré avec Apache. Il est très simple à mettre en œuvre : il suffit de modifier la déclaration des fichiers de log ainsi :

CustomLog "|bin/rotatelogs logs/access.%Y-%m-%d-%H_%M_%S 10M" common
ErrorLog "|bin/rotatelogs logs/error.%Y-%m-%d-%H_%M_%S 10M"

Désormais, au lieu d’écrire les lignes de log dans un fichier, Apache les envoie à l’exécutable rotatelogs qui se charge de les stocker dans un fichier nommé en fonction de la date. Ici la rotation s’effectue lorsque le fichier atteint la taille de 10 Mo.

On peut également définir une durée comme critère de rotation. Dans l’exemple suivant, les logs seront tournés toutes les 24 heures :

CustomLog "|bin/rotatelogs logs/access.%Y-%m-%d-%H_%M_%S 86400" common
ErrorLog "|bin/rotatelogs logs/error.%Y-%m-%d-%H_%M_%S 86400"

L’avantage de rotatelogs est qu’il fonctionne également sous Windows ce qui peut-être pratique lorsqu’on doit faire tourner un Apache sur ce système d’exploitation.

En revanche, rotatelogs n’effectue aucune compression ni nettoyage des logs archives comme le fait logrotate. Il faut donc veiller à effectuer ces tâches de maintenance par un autre moyen sous peine de remplir inexorablement le disque-dur de la machine.

Ce contenu a été publié dans Boîte à outils. Vous pouvez le mettre en favoris avec ce permalien.

2 réponses à Rotation des logs Apache

  1. yannux dit :

    Intéressant je ne conaissais pas, je me suis pencher sur la question dernièrement.
    J’ai vue dans la faq d’awstats un système pas mal aussi pour utiliser logrotate :
    http://awstats.sourceforge.net/docs/awstats_faq.html#ROTATE

    /usr/local/apache/logs/*log
    {
    notifempty
    daily
    rotate 7
    compress
    sharedscripts
    prerotate
    /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mydomainconfig
    endscript
    postrotate
    /usr/bin/killall -HUP httpd
    endscript
    }

    La bonne galère c’est aussi de rotate pour un même vhost les CustomLog sur plusieurs serveurs (load balancing)

  2. luddic dit :

    Sinon, laisser syslog-ng faire se travail, et envoyer directement les logs apache dedans. Il n’y a même plus besoin de reload apache dans ce cas-là.

    Ça permet aussi de garder logrotate pour compresser les logs si besoin.

Les commentaires sont fermés.