Logrotate

La plupart du temps, l'éxecution de logrotate sera lancée par une crontab.

Description :

logrotate est conçu pour faciliter l'administration des systèmes qui génèrent un grand nombre de journaux de logs. Il automatise la permutation, la compression, la suppression, et l'envoi de ces fichiers.

Chaque journal peut être traité quotidiennement, hebdomadairement, mensuellement, ou quand il devient trop volumineux.

On peut spécifier plusieurs fichiers de configuration dans la ligne de commande. Les derniers fichiers de configuration peuvent outrepasser les options données dans les précédents, ainsi l'ordre dans lequel les fichiers de configuration de logrotate sont listés est important.

Normalement, il faudrait utiliser un unique fichier de configuration qui inclut tous les autres fichiers de configuration nécessaires ( utilisation de la directive include ).

Si un répertoire est donné en ligne de commande, chaque fichier de ce répertoire est utilisé comme fichier de configuration.

Exemple de crontab :
# Archivage des logs access mysql
58 23 * * * /usr/sbin/logrotate /var/log/httpd/lamp.logrotate

Directives :

RTFM

Fichiers de configuration :

Le fichier principal est /etc/logrotate.conf

Lancement automatique : /etc/cron.daily/logrotate

Répertoire par défaut dans lequel tout script sera pris en compte : /etc/logrotate.d/

logrotate lit tout à propos des journaux qu'il est censé traiter à partir de la série de fichiers de configuration spécifiée dans la ligne de commande. Chaque fichier de configuration peut définir des options globales (les options locales outrepassent les globales, et les dernières définitions outrepassent les précédentes) et précise le journal à permuter.

#Exemple de fichier de configuration
errors toto@toto.domain
compress

/var/log/mysql/access.log {
    daily
    rotate 30
    dateext
    nocompress
    nomail
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

/var/log/php/error.log {
    size=5M
    maxage 8
    start 0
    missingok
    notifempty
    create 644 apache www
    postrotate
        /sbin/killall -HUP httpd
    endscript
}
 
Les directives globales :
  • errors Envoie un mail à toto en cas d'erreur de traitement.
  • compress Compresse par defaut les fichiers permutés.
 
La section pour les logs acces de MySQL :
  • daily Permute le fichier une fois par jour.
  • rotate 30 Conserve 30 archives avant de supprimer les plus anciennes.
  • dateext Ajoute la date en suffixe au fichier sous la forme YYYYMMDD au lieu d'un simple numéro incrémenté.
  • nocompress Ecrase la directive globale et génère des fichiers non compréssés.

L'execution de commandes externes pendant le traitement des logs :

Les principales commandes utilisées dans ce cas sont des signaux SIGHUP destinés aux processus qui écrivent dans le fichier de log à traiter. Ceci permet au service de reprendre en compte le fichier de logs qui vient d'être nettoyé et de pouvoir écrire à nouveau dedans.

Les commandes externes sont balisées entre les deux directives postrotate et endscript.