Comment gérer les fichiers journaux avec Logrotate sur Ubuntu 20.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Logrotate est un utilitaire système qui gère la rotation et la compression automatiques des fichiers journaux. Si les fichiers journaux n'étaient pas alternés, compressés et élagués périodiquement, ils pourraient finir par consommer tout l'espace disque disponible sur un système.

Logrotate est installé par défaut sur Ubuntu 20.04 et est configuré pour gérer les besoins de rotation des journaux de tous les packages installés, y compris rsyslog, le processeur de journal système par défaut.

Dans cet article, nous allons explorer la configuration Logrotate par défaut, puis configurer la rotation des journaux pour une application personnalisée fictive.

Conditions préalables

Ce didacticiel suppose que vous disposez d'un serveur Ubuntu 20.04, avec un utilisateur sudo non root, comme décrit dans Configuration initiale du serveur avec Ubuntu 20.04.

Logrotate est également disponible sur de nombreuses autres distributions Linux, mais la configuration par défaut peut être assez différente. Les autres sections de ce didacticiel s'appliqueront toujours tant que votre version de Logrotate sera similaire à celle d'Ubuntu 20.04. Suivez l'étape 1 pour déterminer votre version de Logrotate.

Connectez-vous à votre serveur en tant qu'utilisateur sudo pour commencer.

Vous pouvez également utiliser un terminal interactif intégré à cette page pour expérimenter la rotation de log dans ce didacticiel. Cliquez sur le bouton suivant Lancer un terminal interactif ! pour commencer.

Lancez une borne interactive !

Étape 1 - Confirmation de votre version de Logrotate

Logrotate est installé par défaut sur Ubuntu. Cependant, si vous devez l'installer, exécutez les commandes suivantes pour mettre à jour votre liste de packages et récupérer le package :

sudo apt update
sudo apt install logrotate

Si vous utilisez un serveur non-Ubuntu, assurez-vous d'abord que Logrotate est installé en demandant ses informations de version :

logrotate --version
Outputlogrotate 3.14.0

    Default mail command:       /usr/bin/mail
    Default compress command:   /bin/gzip
    Default uncompress command: /bin/gunzip
    Default compress extension: .gz
    Default state file path:    /var/lib/logrotate/status
    ACL support:                yes
    SELinux support:            yes

Si Logrotate est installé mais que le numéro de version est très différent, vous pouvez avoir des problèmes avec certaines des options de configuration qui sont explorées dans ce didacticiel. Reportez-vous à la documentation de votre version spécifique de Logrotate en lisant sa page de manuel (man) :

man logrotate

Vous pouvez également consulter la version en ligne de la documentation Logrotate. Ensuite, nous examinerons la structure de configuration par défaut de Logrotate sur Ubuntu.

Étape 2 - Explorer la configuration de Logrotate

Les informations de configuration de Logrotate se trouvent généralement à deux endroits sur Ubuntu :

  • /etc/logrotate.conf : ce fichier contient certains paramètres par défaut et configure la rotation pour quelques journaux qui n'appartiennent à aucun paquet système. Il utilise également une instruction include pour extraire la configuration de n'importe quel fichier du répertoire /etc/logrotate.d.
  • /etc/logrotate.d/ : c'est là que tous les packages que vous installez et qui ont besoin d'aide pour la rotation des journaux placeront leur configuration Logrotate. Sur une installation standard, vous devriez déjà avoir des fichiers ici pour les outils système de base comme apt, dpkg, rsyslog et ainsi de suite.

Par défaut, logrotate.conf configurera des rotations de journaux hebdomadaires, avec des fichiers journaux appartenant à l'utilisateur root et au groupe syslog, avec quatre fichiers journaux conservés à la fois( rotate 4) et de nouveaux fichiers journaux vides créés après la rotation de l'actuel (create).

Examinons le fichier de configuration Logrotate d'un paquet dans /etc/logrotate.d. cat le fichier de l'utilitaire de package apt :

cat /etc/logrotate.d/apt
Output/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

Ce fichier contient des blocs de configuration pour deux fichiers journaux différents dans le répertoire /var/log/apt/ : term.log et history.log. Ils ont tous les deux les mêmes options. Toutes les options non définies dans ces blocs de configuration hériteront des valeurs par défaut ou de celles définies dans /etc/logrotate.conf. Tout paramètre dans un fichier logrotate remplacera les valeurs par défaut de logrotate, qui sont configurées dans /etc/logrotate.conf. Les options définies pour les journaux apt sont :

  • rotate 12 : conserver douze anciens fichiers journaux. Cela remplace la valeur par défaut rotate 4.
  • monthly : rotation une fois par mois. Cela remplace la valeur par défaut weekly.
  • compress : compresse les fichiers pivotés. cela utilise gzip par défaut et donne des fichiers se terminant par .gz. La commande de compression peut être modifiée à l'aide de l'option compresscmd.
  • missingok : n'écrivez pas de message d'erreur si le fichier journal est manquant.
  • notifempty : ne pas faire pivoter le fichier journal s'il est vide.

Ces fichiers de configuration héritent également du comportement par défaut create, qui demande à Logrotate de créer de nouveaux journaux après la rotation. Cela pourrait être remplacé par nocreate, bien que cela désactiverait effectivement la plupart des autres fonctionnalités.

De nombreuses autres options de configuration sont disponibles. Vous pouvez en savoir plus sur chacun d'eux en tapant man logrotate sur la ligne de commande pour afficher la page de manuel de Logrotate.

Ensuite, nous allons configurer un fichier de configuration pour gérer les journaux d'un service fictif appelé your-app.

Étape 3 - Configuration d'un exemple de configuration

Pour gérer les fichiers journaux à l'aide de logrotate pour les applications en dehors des services système prépackagés et préconfigurés, nous avons deux options :

  1. Créez un nouveau fichier de configuration Logrotate et placez-le dans /etc/logrotate.d/. Cela sera exécuté quotidiennement en tant qu'utilisateur root avec tous les autres travaux Logrotate standard.
  2. Créez un nouveau fichier de configuration et exécutez-le en dehors de la configuration Logrotate par défaut d'Ubuntu. Ceci n'est vraiment nécessaire que si vous devez exécuter Logrotate en tant qu'utilisateur non root, ou si vous souhaitez faire pivoter les journaux plus fréquemment que quotidiennement (une configuration hourly dans [X180X ] serait inefficace, car la configuration Logrotate du système ne s'exécute qu'une fois par jour).

Passons en revue ces deux options avec quelques exemples de configuration.

Ajout de configuration à /etc/logrotate.d/

Nous souhaitons configurer la rotation des journaux pour un serveur Web fictif qui place un access.log et error.log dans /var/log/your-app/. Il s'exécute en tant qu'utilisateur et groupe www-data.

Pour ajouter une configuration pour les fichiers journaux your-app à /etc/logrotate.d/, ouvrez d'abord un nouveau fichier dans le répertoire /etc/logrotate.d à l'aide de nano ou de votre éditeur préféré :

sudo nano /etc/logrotate.d/your-app

Ajoutez les lignes suivantes à votre nouveau fichier de configuration :

/etc/logrotate.d/votre-application

/var/log/your-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload your-app
    endscript
}

Certaines des nouvelles directives de configuration de ce fichier sont :

  • create 0640 www-data www-data : cela crée un nouveau fichier journal vide après la rotation, avec les autorisations spécifiées (0640), le propriétaire (www-data) et le groupe (également www-data ).
  • sharedscripts : cet indicateur signifie que tous les scripts ajoutés à la configuration ne sont exécutés qu'une seule fois par exécution, et non pour chaque fichier pivoté. Étant donné que le chemin /var/log/your-app/*.log inclut un caractère générique *, cette configuration correspond à n'importe quel nombre de fichiers journaux dans le répertoire your-app. Sans l'option sharedscripts, le script spécifié dans postrotate s'exécuterait chaque fois que logrotate traite un fichier journal sans cette option.
  • postrotate à endscript : ce bloc contient un script à exécuter après la rotation du fichier journal. Dans ce cas, nous rechargeons notre exemple d'application. Cela est parfois nécessaire pour que votre application bascule vers le fichier journal nouvellement créé. Notez que postrotate s'exécute avant que les journaux ne soient compressés. La compression peut prendre beaucoup de temps et votre logiciel doit basculer immédiatement vers le nouveau fichier journal. Pour les tâches qui doivent s'exécuter après la compression des journaux , utilisez plutôt le bloc lastaction.

Pour enregistrer et quitter nano, appuyez sur Ctrl+X, et lorsque vous y êtes invité, Y puis Enter. Vous pouvez tester le fichier de configuration en effectuant un essai :

sudo logrotate /etc/logrotate.conf --debug

Cette commande appelle logrotate, le pointe vers le fichier de configuration standard et active le mode débogage.

Des informations seront imprimées sur les fichiers journaux que Logrotate gère et ce qu'il leur aurait fait. Si tout va bien, vous avez terminé. Le travail Logrotate standard s'exécutera une fois par jour et inclura votre nouvelle configuration.

Ensuite, nous allons essayer une configuration qui n'utilise pas du tout la configuration par défaut d'Ubuntu.

Étape 4 - Création d'une configuration Logrotate indépendante

Dans cet exemple, nous avons une application exécutée en tant que notre utilisateur sammy, générant des journaux qui sont stockés dans /home/sammy/logs/. Nous voulons faire tourner ces journaux toutes les heures, nous devons donc configurer cela en dehors de la structure /etc/logrotate.d fournie par Ubuntu.

Tout d'abord, nous allons créer un fichier de configuration dans notre répertoire personnel. Ouvrez-le dans un éditeur de texte :

nano /home/sammy/logrotate.conf

Collez ensuite la configuration suivante :

/home/sammy/logrotate.conf

/home/sammy/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

Enregistrez et fermez le fichier. Nous avons rencontré toutes ces options dans les étapes précédentes, mais résumons : cette configuration effectuera une rotation des fichiers toutes les heures, en compressant et en conservant vingt-quatre anciens journaux et en créant un nouveau fichier journal pour remplacer celui qui a fait l'objet d'une rotation.

Vous devrez personnaliser la configuration en fonction de votre application, mais c'est un bon début.

Pour tester que la configuration fonctionne, créons un fichier journal. Commencez par cd vers le répertoire personnel de votre utilisateur à l'aide de la commande cd ~. Créez ensuite un répertoire pour les journaux à l'aide de la commande mkdir. Créez enfin un fichier vide dans le répertoire logs à l'aide de la commande touch. Exécutez les commandes suivantes afin de terminer ces étapes :

cd ~
mkdir logs
touch logs/access.log

Maintenant que nous avons un fichier journal vide au bon endroit, exécutons la commande logrotate.

Étant donné que les journaux appartiennent à sammy, nous n'avons pas besoin d'utiliser sudo. Cependant, nous do devons spécifier un fichier state. Ce fichier enregistre ce que logrotate a trouvé et toutes les actions qu'il a prises lors de sa dernière exécution, afin qu'il sache quoi faire la prochaine fois qu'il s'exécute. Ce suivi d'état est géré pour nous lors de l'utilisation de la configuration par défaut /etc/logrotate.conf. Le fichier d'état est stocké dans /var/lib/logrotate/status. Comme nous n'utilisons pas la configuration par défaut, nous devrons configurer manuellement l'emplacement du fichier d'état.

Nous demanderons à Logrotate de placer le fichier d'état directement dans notre répertoire personnel pour cet exemple. Il peut aller partout où c'est accessible et pratique. Exécutez la commande suivante pour utiliser le /home/sammy/logrotate.conf que vous avez créé et pour enregistrer l'état rencontré par logrotate :

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf

Handling 1 logs

rotating pattern: /home/sammy/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
  log does not need rotating

Le drapeau --verbose imprimera des informations détaillées sur ce que fait Logrotate. Dans ce cas, il n'a rien tourné. C'est la première fois que Logrotate rencontre ce fichier journal et il date de zéro heure et ne doit donc pas être tourné.

Si nous examinons le fichier d'état à l'aide de l'utilitaire cat, nous remarquerons que Logrotate a enregistré des informations sur l'exécution :

cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2021-12-3-19:0:0

Logrotate a noté les journaux qu'il a vus et la dernière fois qu'il les a pris en compte pour la rotation. Si nous exécutons cette même commande une heure plus tard, le journal sera tourné comme prévu.

Si vous souhaitez forcer Logrotate à faire pivoter le fichier journal alors qu'il ne l'aurait pas fait autrement, utilisez le drapeau --force :

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

Ceci est utile lors du test de postrotate et d'autres scripts.

Enfin, nous devons configurer une tâche cron pour exécuter Logrotate toutes les heures. Ouvrez la crontab de votre utilisateur :

crontab -e

Cela ouvrira un fichier texte. Si c'est la première fois que vous utilisez cron, vous serez peut-être invité à choisir un éditeur de texte par défaut. Si vous n'avez pas de préférence, nous recommandons nano pour les nouveaux utilisateurs. Il peut y avoir déjà des commentaires dans le fichier qui expliquent la syntaxe cron. Déplacez le curseur vers une nouvelle ligne vide à la fin du fichier et ajoutez ce qui suit :

crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state

Cette tâche s'exécutera à la 14e minute de chaque heure, tous les jours. Il exécute presque la même commande logrotate que nous avons exécutée précédemment, bien que nous ayons étendu logrotate à son chemin complet de /usr/sbin/logrotate pour être sûr. Il est recommandé d'utiliser des chemins complets lors de l'écriture de tâches cron. Pour en savoir plus sur cron, vous pouvez consulter nos autres tutoriels.

Enregistrez le fichier et quittez. Cela installera la crontab et notre tâche s'exécutera selon le calendrier spécifié.

Si nous revisitons notre répertoire de journaux dans environ une heure, nous devrions trouver le fichier journal pivoté et compressé access.log.1.gz (ou .2.gz si vous avez exécuté Logrotate avec le drapeau --force).

Conclusion

Dans ce didacticiel, nous avons vérifié notre version de Logrotate, exploré la configuration par défaut d'Ubuntu Logrotate et configuré deux types différents de configurations personnalisées. Pour en savoir plus sur la ligne de commande et les options de configuration disponibles pour Logrotate, vous pouvez lire sa page de manuel en exécutant man logrotate dans votre terminal ou en visitant la documentation en ligne.