Mémo logrotate

Le but de ce mémo n’est pas de présenter exhaustivement « logrotate » que la plupart d’entre vous connaissent, mais de revoir quelques paramètres plus ou moins intéressants de la configuration de ce script.

« logrotate » Est un outils de gestion de fichiers de logues. Il permet d’archiver, d’organiser et de sauvegarder les journaux systèmes automatiquement. L’outil est modulable et permet aux administrateur consciencieux de conserver une trace précise, structurée et hiérarchisée de l’activité de leurs machine dans le respect des lois (comme par exemple : garder une profondeur de logues d’un ans ET ne pas conserver de logues de plus d’un an, etc).

Principe

L’outil est essentiellement composé d’un script de rotation des logues (logrotate) et de ses fichiers de configuration (« /etc/logrotate.conf » et « /etc/logrotate.d/*« ).

Le déclenchement du script est effectué par le cron (cron, fcron ou vixie-cron). Lorsque le script est appelé, il examine les fichiers de logues qui ont été spécifié dans « /etc/logrotate.conf » ou « /etc/logrotate.d/*« , et y applique le traitement définit dans le fichier de configuration (compression, numérotation, archivage, etc…).

Installation

Rien de particulier à signaler quand à l’installation de logrotate car l’outil est empaqueté sous toutes les distributions sérieuses ou ayant vocation à fonctionner sur des serveurs. Vous l’installerez donc (si ce n’est déjà fait) sans problèmes sur Debian :

root@mafalda:~# aptitude install logrotate

Gentoo :

srv ~ # emerge -av logrotate

ou, sur RedHat, Fedora ou CentOS :

[root@centos ~]# yum install logrotate

Configuration

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

  • les options générales ;
  • les fichiers à archiver et les options spécifiques à leurs archivages.

Le fichier de configuration de logrotate est quasiment toujours « /etc/logrotate.conf« .

Options générales

Les options générales sont utilisées sous la forme :

options [éventuellement valeur]

si seul l’option est définie sans valeur spécifiée, c’est une option type booléen et cela revient à la passer à vrai (si elle est absente ou commentée, son contraire sera appliqué).

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 ».

Dans les options les plus utilisées, nous trouvons :

  • 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.

Une fois de plus, les autres options proposées par le scripts sont définies dans la page de man de l’outil (http://linux.die.net/man/8/logrotate).

Fichiers à traiter

Seconde partie de la configuration : la définition des fichiers à traiter.

La déclaration d’un fichier à archiver et du type :

/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, contenant la définition ou re définition des options divergentes des valeurs par défaut applicables au journal de logues.

Les définitions 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 inclus dans « logrotate.conf » via l’option « include ». Par 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 logues définis dans les fichiers de configurations (apache2, apt, aptitude, …) du répertoire « /etc/logrotate.d » sont inclus dans logrotate.conf via la directive « include« . Notez dans l’exemple que tous les logues d’apache portant l’extension « .log » sont concernés. Une fois les fichiers archivés, le serveur est rechargé. Les fichiers de logues sont recréé après archivage en tant que root avec le groupe adm et les droits -rw-r—– . Les logues d’apache ne sont par archivés s’ils sont vide (« notifempty« ).

Exemple

Voici un exemple de ce à quoi un fichier logrotate.conf peut alors ressembler :

## logrotate.conf (logrotate)
#
# Par FHH le 30 / 08 / 2009
#
# Description
#       Fichier de configuration de logrotate.
#
 
# Les logs sont compréssé 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
# Envois 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

Télécharger le fichier de configuration de “logrotate”.

Références

Man de logrotate : http://linux.die.net/man/8/logrotate

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *