Logrotate

Généralités

A quoi sert la rotation des logs ?

La rotation des logs sert à éviter de se retrouver avec des fichiers de logs d’une application qui font 2 Go ! En effet, la totalité des applications disposent d’un fichier de logs qui retrace les actions. En règle générale, la rotation est automatique pour tous les paquetages Red Hat intégrés à la distribution. L’installeur se chargeant de paramétrer l’outil nommé logrotate à cet effet. La où on a réellement besoin de mettre les mains dans le cambouis c’est quand on ajoute manuellement un log particulier à un endroit particulier ou tout simplement qu’on installe un paquetage depuis ses sources et non avec la commande RPM. Ainsi, on choisit les emplacements des logs mais aucune rotation n’est positionnée dessus par défaut. Il faut donc l’ajouter et c’est l’objet de cette documentation.

Configuration

Configuration générale

Emplacement	Fonction
/etc/cron.daily/logrotate	Cron exécuté tout les jours à 4h02 du matin.
/etc/logrotate.conf	Fichier de configuration du service logrotate.
/etc/logrotate.d/	Dossier qui contient les fichiers de configurations inclus.

Configuration spécifique

Ajout d’un log.

Par exemple pour un service que nous venons d'installer ou des logs de scripts persos, nous avons besoins que ces scripts soient rotationnés.

Voici ce qu’il faut comprendre et ajouter pour rotationner les logs.

Logrotate tous les jours

Logrotate est le logiciel qui permet de gérer la rotation. Il est exécuté par défaut tous les jours à 4h02 du matin via cron. Voici le fichier /etc/cron.daily/logrotate.

#!/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 0

Configuration globale de logrotate

La configuration globale de logrotate se situe dans /etc/logrotate.conf.

Voici le fichier par défaut que je n’ai pas modifié.

# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.

Attention lorsqu’on modifie ce fichier, cela modifie la configuration par défaut de la totalité des rotations de logs de tous les services qui s’en servent. Dans notre cas, ne pas y toucher. On va spécifier la configuration spécifique à chaque log que nous voulons gérer. La configuration spécifique prévaut sur la configuration globale. C’est un principe unanimement appliqué sous Linux.

Le fichier logrotate.conf inclus le dossier logrotate.d qui contient en général, un fichier par services.

C’est en fait ici qu’il faut ajouter un fichier qui contiendra les directives que nous voulons pour chacun des fichiers de logs.

Exemple détaillé

/usr/application/log/*.log {
daily
rotate 1
size=1M
compress
dateext
missingok
notifempty
}

compress - compression des journaux utilisant gzip.

create mode owner group - spécifie les permissions (comme chmod) et le propriétaire pour créer les journaux.

daily (chaque jour), weekly (chaque semaine), monthly (chaque mois) - intervalle de temps de rotation.

size size[G|M|k] - faire tourner le journal, si il sa taille dépasse size(taille) bit / Kilobit / Megabit / Gigabit.

mail address - envoyer le journal à l'adresse email spécifiée.

olddir directory - déplacer le journal vers le répertoire spécifié.

rotate count - conserver les count anciens journaux.

dateext - archive les anciennes versions de logs en ajoutant la date de rotation sous la forme YYYMMDD à la place d’ajouter un nombre. Exemple access_log-20090529.gz au lieu de access_log.1.gz.

Rotation logs sauvegarde

Pour un log de sauvegarde, j’ai créé dans /etc/logrotate.d/ le fichier suivant.

/opt/scripts/log/*.log {
daily
rotate 3
size=1M
compress
dateext
missingok
notifempty
}

Rotation logs Apache

Exemple de rotation des logs Apache mis en place par défaut.

/var/log/httpd/*_log /var/log/httpd/apache_runtime_status /var/log/httpd/ssl_mutex {
rotate 5
monthly
missingok
notifempty
nocompress
prerotate
/etc/rc.d/init.d/httpd closelogs > /dev/null 2>&1
endscript
postrotate
/etc/rc.d/init.d/httpd closelogs > /dev/null 2>&1
endscript
}

Avec cet outil, on peut facilement rotationner les nombreux logs auxquels on a à faire face.

Test de logrotate

Pour exécuter immédiatement la rotation de tous les logs systèmes.

/usr/sbin/logrotate /etc/logrotate.conf