Logrotate ou la rotation de log facile

Publié le 13/10/2008

Je vous ai parlé de la sauvegarde de données avec transfère sur FTP sur ma dédibox dans cet article - Sauvegarde Automatisée, et vous avez put voir comment automatiser cela avec un crontab. Ce crontabe écrivait un fichier “daté” par jour. Pour faire un peu mieux (et je vais éditer le billet à ces fins) et plus propre, voyons comment créer une rotation de logs via **logrotate**.

logrotate est une “démon” (deamon) qui va s’occuper de sauvegarder régulièrement des logs en les renommant et en les compressant si besoin. L’intérêt est d’avoir un historique de logs paramétrable et de scinder les logs pour ne pas avoir à manipuler des gros fichiers. Ce découpage peut se faire de manière journalière, hebdomadaire, mensuelle ou annuelle.

Chaque logs (ou groupes de logs) se paramètre dans un simple fichier texte. La plupart des distributions modernes propose un répertoire /etc/logrotate.d/ ou se trouve une série de fichier de configuration. A nous de créer le notre.

Nous allons faire simple, mais alors très simple. En premier, on corrige notre “crontab”, désormais, on écrit dans un seul et unique fichier: /var/log/save.log

# crontab -e
0 4 * * * /usr/local/tools/save >> /var/log/save.log

Ce qui veut dire que tous les jours à 4h00 du matin, j’ai une sauvegarde qui se fait (voir le billet sur la sauvegarde automatisée) et dont les résultats sont envoyés dans le fichier /var/log/save.log.

Tous les jours, le fichier /var/log/save.log grossi… et à la longue il risquerait de devenir difficile à lire, trop gros pour être traité facilement et surtout il aura un historique trop ancien pour être intéressant. J’estime qu’une semaine de log est très suffisant, et que 1 mois est //sécurisant//.

C’est donc ce que nous allons faire, créer un fichier de configuration de rotation de logs. Voici donc le fichier que je crée /etc/logrotate.d/savescript:

/var/log/save.log {
    #Rotation mensuelle
    monthly

    #Faire 4 rotation dans la période (donc ici 4 par mois = 1 log par semaine)
    rotate 4

    #si le fichier est manquant, ne pas générer d'erreur et continuer
    missingok
}

Et c’est tout ! Donc, toutes les semaines logrotate va faire une rotation. Il va supprimé le plus ancien log (donc save.log.3) puis il va pousser les logs: -/var/log/save.log.2 devient /var/log/save.log.3 -/var/log/save.log.1 devient /var/log/save.log.2 -/var/log/save.log devient /var/log/save.log.1

Mes fichiers son donc du plus récent au plus ancien: -/var/log/save.log - log en cours -/var/log/save.log.1 - log de la semaine précédente -/var/log/save.log.2 - log d’il y a 2 semaines -/var/log/save.log.3 - log d’il y a 3 semaines

Tout est automatique, c’est franchement simple à mettre en oeuvre et vous ne vous soucirez plus de la taille de vos logs…

Je vous conseille de lire la page http://linux.die.net/man/8/logrotate ou simplement faire man logrotate qui vous donnera un très bon aperçut des options proposées par cet outil qui est pourtant l’un des plus anciens du monde Unix.

Voilà, à vous de jouer :)

comments powered by Disqus