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 le Filesystem Hierarchy Standard, l’activité de la plupart des services s’exécutant dans le système est écrite dans un fichier à l’intérieur de ce répertoire ou de l’un de ses sous-répertoires.

Ces fichiers sont connus sous le nom de journaux et sont la clé pour examiner comment le système fonctionne (et comment il s’est comporté dans le passé). Les journaux sont également la première source d’informations où les administrateurs et les ingénieurs regardent lors du dépannage.

Si nous examinons le contenu de /var/log sur un CentOS/RHEL/Fedora et une Debian/Ubuntu (pour varier), 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 ou vos systèmes et de leur durée d’exécution.

Dans RHEL/CentOS et Fedora

# ls /var/log
Log Files and Directories under CentOS 7
Log Files and Directories under CentOS 7

In Debian et Ubuntu

# ls /var/log
Log Files and Directories in Debian 8
Log Files and Directories in Debian 8

Dans les deux cas, nous pouvons observer que certains des noms de journaux se terminent comme prévu par « log », tandis que d’autres sont soit renommés à l’aide d’une date (par exemple, maillog-20160822 sur CentOS), soit compressés (considérons auth.log.2.gz et mysql.log.1.gz sur Debian).

Ce n’est pas 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 éternellement, 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 bel utilitaire appelé logrotate pour nettoyer les journaux de façon périodique.

En quelques mots, logrotate renommera ou compressera le journal principal lorsqu’une condition sera remplie (nous y reviendrons dans une minute) afin que le prochain événement soit enregistré sur un fichier vide.

En outre, il supprimera les « vieux » fichiers journaux et conservera les plus récents. Bien sûr, c’est à nous de décider 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, il suffit d’utiliser votre gestionnaire de paquets :

---------- On Debian and Ubuntu ---------- # aptitude update && aptitude install logrotate ---------- On CentOS, RHEL and Fedora ---------- # yum update && yum install logrotate

Il est bon et bien 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 .conf fichiers individuels à l’intérieur de /etc/logrotate.d.

Lecture suggérée : Gérer les journaux système (configuration, rotation et importation dans une base de données) à l’aide de Logrotate

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

include /etc/logrotate.d

Nous nous en tiendrons à 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

Etant 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 doit se passer juste après.

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

apache2.conf
/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 à l’intérieur de /var/log/apache2:

  • hebdomadaire 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 tournés doivent être conservés. Ainsi, le fichier le plus ancien sera supprimé lors de la quatrième exécution suivante.
  • size=10M fixe la taille minimale pour que la rotation ait lieu à 10M. En d’autres termes, chaque journal ne sera pas tourné jusqu’à ce qu’il atteigne 10Mo.
  • compress et delaycompress sont utilisés pour dire que tous les journaux tournés, à l’exception du plus récent, doivent être compressés.

Exécutons une exécution à 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 effectivement exécuter logrotate en omettant cette option):

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

Les résultats sont présentés ci-dessous :

Rotation des journaux Apache avec Logrotate
Rotation des journaux Apache avec Logrotate

Au lieu de compresser les journaux, nous pourrions les renommer après la date à laquelle ils ont été tournés. Pour ce faire, nous allons utiliser la directive dateext. Si notre format de date est autre que le format par défaut yyyymmdd, nous pouvons le spécifier en utilisant dateformat.

Lecture suggérée : installer ‘atop’ pour surveiller l’activité de journalisation des processus du système Linux

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

Si vous voulez recevoir des courriels sur logrotate, vous pouvez configurer le serveur de messagerie Postfix comme indiqué ici : Installer le serveur de messagerie Postfix

Cette fois, nous allons utiliser /etc/logrotate.d/squid.conf pour ne faire tourner que /var/log/squid/access.log:

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

Comme nous pouvons le voir dans l’image ci-dessous, ce journal n’avait pas besoin d’être tourné. 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 25 août 2020) et le journal principal (access.log) sera recréé avec des autorisations d’accès définies à 0644 et avec root comme propriétaire et propriétaire du groupe.

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

Rotation des journaux Squid avec Logrotate
Rotation des journaux Squid avec Logrotate

Supposons maintenant que vous voulez 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 voulons envoyer un courriel à root quand l’un des journaux à l’intérieur de /var/log/myservice obtient une rotation. Ajoutons les lignes en rouge à /etc/logrotate.d/squid.conf:

squid.conf
/var/log/myservice/* {monthlycreate 0644 root rootrotate 5size=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 conflit.

Logrotate et Cron

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

Lecture suggérée : 11 exemples de tâches de planification Cron sous Linux

Dans le cas contraire, l’exécution commencera vers 7 h 35. Pour vérifier, surveillez 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 en utilisant logrotate. Comme nous l’avons expliqué dans cet article, il va automatiquement faire tourner, compresser, supprimer et envoyer les journaux sur une base périodique ou lorsque le fichier atteint une taille donnée.

Il suffit de s’assurer qu’il est configuré pour s’exécuter comme une tâche cron et logrotate vous facilitera grandement les choses. Pour plus de détails, reportez-vous à la page de manuel.

Laisser un commentaire

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