Comment gérer les fichiers journaux avec Logrotate sur Ubuntu 16.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 16.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 16.04, avec un utilisateur sudo non root, comme décrit dans Configuration initiale du serveur avec Ubuntu 16.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 tant que votre version de Logrotate sera similaire à celle d'Ubuntu 16.04. Suivez l'étape 1 pour déterminer votre version de Logrotate.

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

Confirmation de votre version de 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.8.7

Si Logrotate n'est pas installé, vous obtiendrez une erreur. Veuillez installer le logiciel à l'aide du gestionnaire de packages de votre distribution Linux.

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 configurations décrites dans ce didacticiel. Reportez-vous à la documentation de votre version spécifique de Logrotate en lisant sa page man :

man logrotate

Ensuite, nous examinerons la structure de configuration par défaut de Logrotate sur Ubuntu.

Exploration de la configuration 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 (weekly), avec des fichiers journaux appartenant à l'utilisateur root et au groupe syslog ([X149X ]), avec quatre fichiers journaux conservés (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. Les options définies pour les journaux apt sont :

  • rotate 12 : conserver douze anciens fichiers journaux.
  • monthly : rotation une fois par mois.
  • 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.

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.

Configuration d'un exemple de configuration

Pour gérer les fichiers journaux des 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/example-app/. Il s'exécute en tant qu'utilisateur et groupe www-data.

Pour ajouter une configuration à /etc/logrotate.d/, ouvrez d'abord un nouveau fichier ici :

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

Voici un exemple de fichier de configuration pouvant gérer ces journaux :

/etc/logrotate.d/example-app

/var/log/example-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload example-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 cette configuration correspondrait à deux fichiers journaux dans le répertoire example-app, le script spécifié dans postrotate s'exécuterait deux fois 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.

Après avoir personnalisé la configuration en fonction de vos besoins et l'avoir enregistrée dans /etc/logrotate.d, vous pouvez la tester en effectuant un essai :

sudo logrotate /etc/logrotate.conf --debug

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

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 vu toutes ces options dans les étapes précédentes, mais résumons : cette configuration fera pivoter les 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 cela fonctionne, créons un fichier journal :

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. Nous do devons cependant spécifier un fichier state. Ce fichier enregistre ce que logrotate a vu et fait lors de sa dernière exécution, afin qu'il sache quoi faire lors de sa prochaine exécution. Ceci est géré pour nous lors de l'utilisation de la configuration Ubuntu Logrotate (elle peut être trouvée sur /var/lib/logrotate/status), mais nous devons le faire manuellement maintenant.

Nous demanderons à Logrotate de placer le fichier d'état directement dans notre répertoire personnel pour cet exemple. Je peux aller partout où c'est accessible et pratique :

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

--verbose imprimera des informations détaillées sur ce que fait Logrotate. Dans ce cas, on dirait qu'il n'a rien tourné. C'est la première fois que Logrotate voit ce fichier journal, donc pour autant qu'il le sache, le fichier a zéro heure et il ne devrait pas être tourné.

Si nous regardons le fichier d'état, nous verrons que Logrotate a enregistré des informations sur la course :

cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2017-11-7-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. Il peut y avoir des commentaires déjà dans le fichier qui expliquent la syntaxe de base attendue. 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 essentiellement 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 juste pour être sûr. C'est une bonne pratique d'être aussi explicite que possible lors de l'écriture de tâches cron.

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.