Recherche de site Web

Comment configurer et gérer la rotation des journaux à l'aide de Logrotate sous Linux


L'un des répertoires les plus intéressants (et peut-être aussi l'un des plus importants) d'un système Linux est /var/log. Selon la norme de hiérarchie du système de fichiers, l'activité de la plupart des services exécutés dans le système est écrite dans un fichier situé dans ce répertoire ou dans l'un de ses sous-répertoires.

Ces fichiers sont appelés journaux et constituent la clé pour examiner le fonctionnement du système (et son comportement dans le passé). Les journaux constituent également la première source d'informations consultée par les administrateurs et les ingénieurs lors du dépannage.

Si nous regardons le contenu de /var/log sur un CentOS/RHEL/Fedora et Debian/Ubuntu (pour la variété), nous verrons les fichiers journaux et sous-répertoires suivants.

Veuillez noter que le résultat peut être quelque peu différent dans votre cas en fonction des services exécutés sur votre (vos) système(s) et de la durée de leur exécution.

Dans RHEL/CentOS et Fedora

ls /var/log

Sous Debian et Ubuntu

ls /var/log

Dans les deux cas, nous pouvons observer que certains noms de logs se terminent comme prévu par « log », tandis que d'autres sont soit renommés en utilisant une date (par exemple, maillog-20160822 sur CentOS) ou compressé (pensez à auth.log.2.gz et mysql.log.1.gz sur Debian).

Il ne s'agit pas d'un comportement par défaut basé sur la distribution choisie mais peut être modifié à volonté à l'aide de directives dans les fichiers de configuration, comme nous le verrons dans cet article.

Si les journaux étaient conservés pour toujours, ils finiraient par remplir le système de fichiers où réside /var/log. Afin d'éviter cela, l'administrateur système peut utiliser un utilitaire appelé logrotate pour nettoyer périodiquement les journaux.

En quelques mots, logrotate renommera ou compressera le journal principal lorsqu'une condition est remplie (nous en parlerons plus dans une minute) afin que l'événement suivant soit enregistré sur un fichier vide.

De plus, il supprimera les « anciens » fichiers journaux et conservera les plus récents. Bien sûr, nous pouvons décider de ce que signifie « ancien » et à quelle fréquence nous voulons que logrotate nettoie les journaux pour nous.

Installation de Logrotate sous Linux

Pour installer logrotate, utilisez simplement votre gestionnaire de packages :

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

Il est intéressant de noter que le fichier de configuration (/etc/logrotate.conf) peut indiquer que d'autres paramètres, plus spécifiques, peuvent être placés sur des fichiers .conf individuels à l'intérieur de /etc/logrotate.d.

Ce sera le cas si et seulement si la ligne suivante existe et n'est pas commentée :

include /etc/logrotate.d

Nous resterons fidèles à cette approche, car elle nous aidera à garder les choses en ordre, et utiliserons la boîte Debian pour les exemples suivants.

Configurer Logrotate sous Linux

Étant un outil très polyvalent, logrotate fournit de nombreuses directives pour nous aider à configurer quand et comment les journaux seront tournés, et ce qui devrait se passer juste après.

Insérons le contenu suivant dans /etc/logrotate.d/apache2.conf (notez que vous devrez probablement créer ce fichier) et examinons chaque ligne pour indiquer son objectif :

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

La première ligne indique que les directives à l'intérieur du bloc s'appliquent à tous les journaux contenus dans /var/log/apache2 :

  • hebdomadairement signifie que l'outil tentera de faire tourner les journaux sur une base hebdomadaire. Les autres valeurs possibles sont quotidiennes et mensuelles.
  • rotation 3 indique que seuls 3 journaux pivotés doivent être conservés. Ainsi, le fichier le plus ancien sera supprimé lors de la quatrième exécution suivante.
  • size=10M définit la taille minimale pour que la rotation ait lieu à 10M. En d’autres termes, chaque journal ne subira pas de rotation tant qu’il n’atteindra pas 10 Mo.
  • compress et delaycompress sont utilisés pour indiquer que tous les journaux pivotés, à l'exception du plus récent, doivent être compressés.

Exécutons un essai à sec pour voir ce que ferait logrotate s'il était réellement exécuté maintenant. Utilisez l'option -d suivie du fichier de configuration (vous pouvez réellement exécuter logrotate en omettant cette option) :

logrotate -d /etc/logrotate.d/apache2.conf

Les résultats sont montrés plus bas:

Au lieu de compresser les journaux, nous pourrions les renommer après la date de leur rotation. Pour ce faire, nous utiliserons la directive dateext. Si notre format de date est autre que le aaaammjj par défaut, nous pouvons le spécifier en utilisant dateformat.

Notez que nous pouvons même empêcher la rotation de se produire si le journal est vide avec notifempty. De plus, disons à logrotate d'envoyer le journal pivoté à l'administrateur système ([email  dans ce cas) pour sa référence (cela nécessitera la configuration d'un serveur de messagerie, ce qui est sort du cadre de cet article).

Si vous souhaitez recevoir des e-mails sur logrotate, vous pouvez configurer le serveur de messagerie Postfix comme indiqué ici : Installer le serveur de messagerie Postfix

Cette fois, nous utiliserons /etc/logrotate.d/squid.conf pour faire pivoter uniquement /var/log/squid/access.log :

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Comme nous pouvons le voir sur l’image ci-dessous, ce journal n’a pas eu besoin d’être pivoté. Cependant, lorsque la condition de taille est remplie (size=1M), le journal pivoté sera renommé access.log-25082020 (si le journal a été pivoté le août 25 2020) et le journal principal (access.log) seront recréés avec les autorisations d'accès définies sur 0644 et avec root en tant que propriétaire et propriétaire de groupe.

Enfin, lorsque le nombre de journaux atteint finalement 6, le journal le plus ancien sera envoyé par courrier à [email .

Supposons maintenant que vous souhaitiez exécuter une commande personnalisée lorsque la rotation a lieu. Pour ce faire, placez la ligne avec une telle commande entre les directives postrotate et endscript.

Par exemple, supposons que nous souhaitions envoyer un e-mail à root lorsque l'un des journaux contenus dans /var/log/myservice subit une rotation. Ajoutons les lignes en rouge à /etc/logrotate.d/squid.conf :

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Enfin, il est important de noter que les options présentes dans /etc/logrotate.d/*.conf remplacent celles du fichier de configuration principal en cas de conflits.

Logroter et Cron

Par défaut, l'installation de logrotate crée un fichier crontab dans /etc/cron.daily nommé logrotate. Comme c'est le cas avec les autres fichiers crontab de ce répertoire, il sera exécuté quotidiennement à partir de 6h25 si anacron n'est pas installé.

Dans le cas contraire, l'exécution commencera vers 7h35. Pour vérifier, recherchez la ligne contenant cron.daily dans /etc/crontab ou /etc/anacrontab.

Résumé

Dans un système qui génère plusieurs journaux, l'administration de ces fichiers peut être grandement simplifiée à l'aide de logrotate. Comme nous l'avons expliqué dans cet article, il effectuera automatiquement une rotation, une compression, une suppression et un courrier électronique des journaux de manière périodique ou lorsque le fichier atteint une taille donnée.

Assurez-vous simplement qu'il est configuré pour s'exécuter en tant que tâche cron et la rotation de journalisation vous facilitera grandement la tâche. Pour plus de détails, reportez-vous à la page de manuel.

Avez-vous des questions ou des suggestions concernant cet article ? N'hésitez pas à nous le faire savoir en utilisant le formulaire de commentaires ci-dessous.