Logrotate

Outil de gestion des fichiers “.log” pour une sauvegarde automatique qui est doté d’un script de rotation des “.log” (logrotate) et de ses fichiers de configuration (/etc/logrotate.conf /etc/logrotate.d/).
Le lancement du script est réalisée par le “cron” , il examine les fichiers “.log” spécifiés dans /etc/logrotate.conf /etc/logrotate.d/ et applique les paramètres déclarés définit dans le fichier de configuration (compression, numérotation, archivage, etc…)

Installation

Installation de logrotate est disponible sur toutes les distributions de base linux

apt install logrotate  # debian/ubuntu
pacman -S logrotate    # archlinux/manjaro
emerge -av logrotate   # gentoo
yum install logrotate  # RedHat, Fedora ou CentOS

Configuration

La configuration de logrotate est divisée en deux parties :

  1. Les options générales
  2. Définition des fichiers à traiter et les options spécifiques

Le fichier de configuration de logrotate est /etc/logrotate.conf

1 - Options générales

Les options générales sont définies sous la forme options [éventuellement valeur]
Si l’option est définie sans valeur , c’est une option par défaut de type booléen qui est “vrai”(True)
Si l’option est absente ou commentée, elle sera “fausse”(False)

Les options générales sont appliquées par défaut à tous les fichiers, mais il est possible de changer leurs valeurs lors de la définition de l’archivage d’un fichier.

La liste des options est consultable dans la page de man de logrotate

  • compress : impose la compression des anciens fichiers de log au format gzip. compresscmd Permet de définir la commande à exécuter pour la compression. compressext, uncompresscmd et compressoptions Permettent respectivement de définir l’extension des fichiers compressés, la commande utilisée pour décompresser les archives et les options de compressions à passer a l’outil de compression.
  • copytruncate : copie le fichier de log original, le compresse et vide ensuite le journal système d’origine. Cette notion est très importante car elle répond aux problème du type : « je logue dans le fichier que j’archive… » qui peut poser quelques problèmes à certains services…
  • create : Permet de spécifier les droits, le propriétaire et le groupe auquel un nouveau fichier de log vide devra appartenir après avoir été archivé.
  • daily, weekly, monthly et yearly : Spécifie quand un fichier doit être archivé.
  • dateext : Par défaut, les fichiers archivés sont numéroté de 1 à N, l’option dateext remplace cette numérotation par la date. Si le format de date par défaut ne vous convient pas, il peut être spécifié par l’option « dateformat« .
  • ifempty : oblige la rotation des logs même si le fichier est vide… (ce qui simplifie les recherche parfois…).
  • mailfirst, maillast, mail adresse@domain : après un certain délais, les archives peuvent être automatiquement détruites. Dans ce cas, si maillast est définit, le fichier détruit est envoyé par mail a l’adresse spécifiée par la variable « mail« . Si mailfirst est définit, c’est la dernière rotation qui est expédiée.
  • maxage : définit l’age maximum des archives (en jours).
  • minsize : demande la rotation des log si le fichier fait au minimum la taille définie par cette variable.
  • missingok : aucune erreur n’est remontée si la rotation d’un fichier de log spécifié est absent.
  • notifempty : n’archive aucun fichier vide.
  • size : les fichiers ne sont archivés que si leur taille dépasse la valeur définie ici.
  • olddir : précise le répertoire dans lequel placer les archives.
  • prerotate, postrotate/endscript : définissent respectivement une séquence de script à effectuer avant ou après la rotation des logs (redémarrage d’un service, etc.).
  • firstaction, lastaction/endscript : définissent des séquences de scripts à exécuter avant et après avoir archivé les logs.
  • rotate : spécifie le nombre d’archives a conserver. Passé ce nombre les archives sont soit détruite (comportement par défaut) soit envoyées par mail voir mail* ci dessus.

2 - Définition des fichiers à traiter

La déclaration d’un fichier à traiter pour archivage

/chemin/vers/fichier/nom_du_fichier {
      options propres au fichier
}

C’est un bloc commençant par le chemin complet, suivit du nom du fichier à traiter, avec la définition des options divergentes aux valeurs par défaut.

Les déclarations de ces fichiers peuvent être effectuées directement dans le fichier /etc/logrotate.conf ou dans n’importe quel autres fichiers, rangés dans un dossier qui sera défini dans logrotate.conf via l’option « include »
Exemple :

root@eeepc:~# ls /etc/logrotate.d/
apache2  apt  aptitude	consolekit  dpkg  fail2ban  hibernate  pm-utils  ppp  rsyslog  samba
root@eeepc:~# grep include /etc/logrotate.conf 
include /etc/logrotate.d
root@eeepc:~# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
		/etc/init.d/apache2 reload > /dev/null
	endscript
}

Ici, tous les fichiers de définition (apache2, apt, aptitude,etc…) du répertoire /etc/logrotate.d sont inclus dans logrotate.conf via la directive include . Les fichiers d’apache portant l’extension “.log” sont concernés et après archivage, le serveur est rechargé et les fichiers “.log” sont recréés en tant que root avec le groupe adm et les droits 640 . Les “.log” d’apache ne sont par archivés s’ils sont vide ,option notifempty

Exemple de fichier logrotate.conf

## logrotate.conf (logrotate)
#
# Par FHH le 30 / 08 / 2009
#
# Description
#       Fichier de configuration de logrotate.
#
 
# Compression avant rotation :
compress
# Fréquence de rotation par défaut :
daily
# La rotation est effectuée, par défaut, même si le fichier est vide afin de faciliter 
# les recherches dans les logs au jour le jour
ifempty
# Par défaut, une rotation par jour est effectuée. 365,25 Jours par ans, nous concervons donc
# une profondeur de 366 jours.
rotate 366
# En parallèle, si une archive est agée de plus de 366 jours, elle est détruite :
maxage 366
# Envoi par mail du fichier sur le point d'expirer.
maillast
# Le fichier sur le point d'expirer est envoyé à l'adresse définie ici.
mail fhh@admin-linux.fr
# Si l'un des journaux décrit est manquant, aucune erreur n'est remontée.
missingok
# Insertion de la date dans l'archivage des journaux.
dateext
# Lors de l'archivage de plusieurs fichiers de logues, les scripts pre et post rotate sont 
# exécuté une fois par fichier. L'option "sharedscripts" fixe l'exécution de ces scripts à
# une seule fois.
sharedscripts
# Lors d'une rotation, un fichier de remplacement est créé avec les droits 0640 
# appartenant à root et au groupe root.
create 0640 root root
# Toutes les archives sont stockées dans /var/log/archives.
olddir /var/log/archives
 
# Définition de la rotation des logs d'argus :
/var/log/argus/argus.log {
        olddir /var/log/archives/argus
}
 
# Inclusion des scripts propres aux logs.
include /etc/logrotate.d