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

introduction

Logrotate est un utilitaire système qui gère la rotation et la compression automatiques des fichiers journaux. Si les fichiers journaux ne sont pas pivotés, compressés et élagués périodiquement, ils risquent de 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 comprisrsyslog, le processeur de journal système par défaut.

Dans cet article, nous allons explorer la configuration par défaut de Logrotate, 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 non rooté pour sudo, comme décrit dansInitial Server Setup with Ubuntu 16.04.

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

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

Confirmation de votre version de Logrotate

Si vous utilisez un serveur autre que 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 paquets de votre distribution Linux.

Si Logrotate est installé mais que le numéro de version est sensiblement différent, vous risquez de rencontrer des problèmes avec certaines des configurations présentées dans ce didacticiel. Reportez-vous à la documentation de votre version spécifique de Logrotate en lisant sa pageman:

man logrotate

Nous allons maintenant examiner la structure de configuration par défaut de Logrotate sous 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 des paramètres par défaut et configure la rotation pour quelques journaux qui ne sont détenus par aucun package système. Il utilise également une instructioninclude pour extraire la configuration de n'importe quel fichier du répertoire/etc/logrotate.d.

  • /etc/logrotate.d/: c'est ici que tous les packages que vous installez 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 commeapt,dpkg,rsyslog et ainsi de suite.

Par défaut,logrotate.conf configurera les rotations hebdomadaires des journaux (weekly), avec les fichiers journaux appartenant à l'utilisateurroot et au groupesyslog (su root syslog), avec quatre fichiers journaux sont conservés (rotate 4) et de nouveaux fichiers journaux vides sont créés après la rotation du fichier actuel (create).

Jetons un œil au fichier de configuration Logrotate d’un package dans/etc/logrotate.d. cat le fichier de l'utilitaire de packageapt:

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 ethistory.log. Ils ont tous 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 journauxapt sont:

  • rotate 12: conserve douze anciens fichiers journaux.

  • monthly: rotation une fois par mois.

  • compress: compresse les fichiers pivotés. cela utilisegzip par défaut et aboutit à des fichiers se terminant par.gz. La commande de compression peut être modifiée à l'aide de l'optioncompresscmd.

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

Il y a beaucoup plus d'options de configuration disponibles. Vous pouvez en savoir plus sur tous en tapantman 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.

Configurer un exemple de configuration

Pour gérer les fichiers journaux des applications en dehors des services système préconfigurés et préconfigurés, nous vous proposons 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'utilisateurroot avec tous les autres travaux Logrotate standard.

  2. Créez un nouveau fichier de configuration et exécutez-le en dehors de la configuration par défaut de Logrotate d’Ubuntu. Cela n'est vraiment nécessaire que si vous devez exécuter Logrotate en tant qu'utilisateur non -root, ou si vous voulez faire pivoter les journaux plus fréquemment que quotidiennement (une configurationhourly dans/etc/logrotate.d/ 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 configurations.

Ajout de la configuration à/etc/logrotate.d/

Nous voulons configurer la rotation des journaux pour un serveur Web fictif qui place unaccess.log et unerror.log dans/var/log/example-app/. Il s'exécute en tant qu'utilisateur et groupe dewww-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 dans 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 (égalementwww-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, au lieu de pour chaque fichier pivoté. Comme cette configuration correspondrait à deux fichiers journaux dans le répertoireexample-app, le script spécifié danspostrotate 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 dans le fichier journal nouvellement créé. Notez quepostrotate s'exécute avant que les journaux ne soient compressés. La compression peut prendre un certain temps et votre logiciel doit basculer immédiatement vers le nouveau fichier journal. Pour les tâches qui doivent exécuter les journauxafter sont compressés, utilisez le bloclastaction à la place.

After customizing the config to fit your needs et en l'enregistrant dans/etc/logrotate.d, vous pouvez le tester en effectuant un essai à vide:

sudo logrotate /etc/logrotate.conf --debug

Cela appellelogrotate, le pointe vers le fichier de configuration standard et active le mode débogage.

Les informations imprimées indiqueront quels fichiers journaux sont gérés par Logrotate et ce que cela leur aurait causé. Si tout va bien, vous avez terminé. Le travail Logrotate standard s’exécute une fois par jour et inclut votre nouvelle configuration.

Nous allons ensuite essayer une configuration qui n’utilise pas du tout la configuration par défaut d’Ubuntu.

Création d'une configuration indépendante Logrotate

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

Premièrement, nous allons créer un fichier de configuration dans votre répertoire personnel. Ouvrez-le dans un éditeur de texte:

nano /home/sammy/logrotate.conf

Puis collez la configuration suivante:

/home/sammy/logrotate.conf

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

Enregistrez et fermez le fichier. Nous avons déjà vu toutes ces options dans les étapes précédentes, mais résumons-nous: cette configuration fera tourner les fichiers toutes les heures, compressera et conservera 24 anciens journaux et créera un nouveau fichier journal pour remplacer le fichier pivoté.

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

Pour vérifier 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 commandelogrotate.

Étant donné que les journaux appartiennent àsammy, nous n'avons pas besoin d'utilisersudo. Cependant, nousdo devons spécifier un fichierstate. Ce fichier enregistre ce quelogrotate a vu et fait lors de sa dernière exécution, afin qu'il sache quoi faire la prochaine fois qu'il s'exécutera. Ceci est géré pour nous lors de l'utilisation de la configuration d'Ubuntu Logrotate (il peut être trouvé à/var/lib/logrotate/status), mais nous devons le faire manuellement maintenant.

Logrotate placera le fichier d’état directement dans notre répertoire personnel pour cet exemple. Je peux aller partout où cela 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 affichera des informations détaillées sur ce que fait Logrotate. Dans ce cas, il semble que rien n’ait été tourné. C'est la première fois que Logrotate consulte ce fichier journal. Par conséquent, à sa connaissance, le fichier date de zéro heure et il ne doit pas être soumis à une rotation.

Si nous regardons le fichier d’état, nous verrons que Logrotate a enregistré des informations sur l’exécution:

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 considération pour la rotation. Si nous exécutons cette même commande une heure plus tard, le journal sera pivoté comme prévu.

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

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

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

Enfin, nous devons configurer un travail cron pour exécuter Logrotate toutes les heures. Ouvrez la crontab de votre utilisateur:

crontab -e

Cela ouvrira un fichier texte. Certains commentaires déjà présents dans le fichier expliquent la syntaxe de base attendue. Déplacez le curseur vers le bas sur 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 se déroulera à la 14e minute de chaque heure, chaque jour. Il exécute essentiellement la même commandelogrotate que nous avons exécutée précédemment, bien que nous ayons étendulogrotate à 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 la rédaction de tâches cron.

Enregistrez le fichier et quittez. Cela installera la crontab et notre tâche sera exécutée selon le planning 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 l'indicateur--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 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écutantman logrotate dans votre terminal.

Related