Introduction
Logrotate est un utilitaire système qui gère la rotation automatique et la compression des fichiers journaux. Si les fichiers journaux n’étaient pas rotatés, compressés et périodiquement élagués, ils pourraient éventuellement consommer tout l’espace disque disponible sur un système.
Logrotate est installé par défaut sur Ubuntu 22.04 et est configuré pour gérer les besoins de rotation des journaux de tous les paquets installés, y compris rsyslog
, le processeur de journal système par défaut.
Dans cet article, nous explorerons la configuration par défaut de Logrotate, puis configurerons la rotation des journaux pour une application personnalisée fictive.
Prérequis
Ce tutoriel suppose que vous disposez d’un serveur Ubuntu 22.04, avec un utilisateur sudo non root activé, comme décrit dans Configuration initiale du serveur avec Ubuntu 22.04.
Logrotate est disponible sur de nombreuses autres distributions Linux également, mais la configuration par défaut peut être assez différente. Les autres sections de ce tutoriel s’appliqueront toujours tant que votre version de Logrotate est similaire à celle d’Ubuntu 22.04. Suivez l’étape 1 pour déterminer votre version de Logrotate.
Connectez-vous à votre serveur en tant qu’utilisateur activé sudo pour commencer.
É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 paquets et récupérer le paquet :
Si vous utilisez un serveur non-Ubuntu, assurez-vous d’abord que Logrotate est installé en demandant ses informations de version :
Outputlogrotate 3.19.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 significativement différent, vous pourriez rencontrer des problèmes avec certaines des options de configuration qui sont explorées dans ce tutoriel. Référez-vous à la documentation pour votre version spécifique de Logrotate en lisant sa page manuel (man
) :
Vous pouvez également consulter la version en ligne de la documentation de Logrotate. Ensuite, nous examinerons la structure de configuration par défaut de Logrotate sur Ubuntu.
Étape 2 — Exploration de la configuration de Logrotate
Les informations de configuration de Logrotate peuvent généralement être trouvées à deux endroits sur Ubuntu :
/etc/logrotate.conf
: ce fichier contient quelques paramètres par défaut et configure la rotation pour quelques journaux qui ne sont pas possédés par des paquets système. Il utilise également une instructioninclude
pour importer la configuration depuis n’importe quel fichier dans le répertoire/etc/logrotate.d
./etc/logrotate.d/
: c’est là que tous les paquets 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 principaux commeapt
,dpkg
,rsyslog
, etc.
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 étant créés après que l’actuel a été tourné (create
).
Jetons un coup d’œil au fichier de configuration Logrotate d’un paquet dans /etc/logrotate.d
. cat
le fichier pour l’utilitaire de paquet 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
. Toute configuration 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 lerotate 4
par défaut.monthly
: rotation une fois par mois. Cela remplace leweekly
par défaut.compress
: compresser les fichiers rotatifs. Cela utilisegzip
par défaut et donne des fichiers se terminant par.gz
. La commande de compression peut être modifiée en utilisant l’optioncompresscmd
.missingok
: ne pas écrire de message d’erreur si le fichier journal est manquant.notifempty
: ne pas faire tourner le fichier journal s’il est vide.
Ces fichiers de configuration héritent également du comportement create
par défaut, ce qui indique à Logrotate de créer de nouveaux journaux après rotation. Cela pourrait être remplacé par nocreate
, bien que cela désactiverait effectivement la plupart des autres fonctionnalités.
Il existe de nombreuses autres options de configuration disponibles. Vous pouvez en lire davantage sur toutes 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
Pour gérer les fichiers journaux à l’aide de logrotate pour des applications en dehors des services système pré-emballés et pré-configurés, nous avons deux options :
- Créez un nouveau fichier de configuration Logrotate et placez-le dans
/etc/logrotate.d/
. Celui-ci sera exécuté quotidiennement en tant qu’utilisateur root ainsi que tous les autres travaux standard de Logrotate. - Créez un nouveau fichier de configuration et exécutez-le en dehors de la configuration Logrotate par défaut d’Ubuntu. Ceci est vraiment nécessaire uniquement si vous devez exécuter Logrotate en tant qu’utilisateur non root, ou si vous souhaitez faire tourner les journaux de manière plus fréquente que tous les jours (une configuration
hourly
dans/etc/logrotate.d/
serait inefficace, car la configuration Logrotate du système ne s’exécute qu’une fois par jour).
Examinons 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 un fichier 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 de your-app
dans /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é:
Ajoutez les lignes suivantes à votre nouveau fichier de configuration:
/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 (égalementwww-data
).sharedscripts
: ce drapeau signifie que tout script ajouté à la configuration est exécuté une seule fois par exécution, au lieu de pour chaque fichier rotatif. Comme le chemin/var/log/your-app/*.log
inclut un joker*
, cette configuration correspondrait à un nombre quelconque de fichiers journaux dans le répertoireyour-app
. Sans l’optionsharedscripts
, le script spécifié danspostrotate
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. C’est parfois nécessaire pour que votre application bascule vers le fichier journal nouvellement créé.
Notez quepostrotate
s’exécute avant la compression des journaux. La compression peut prendre un certain temps, et votre logiciel doit basculer vers le nouveau fichier journal immédiatement. Pour les tâches qui doivent s’exécuter après la compression des journaux, utilisez plutôt le bloclastaction
.
Pour enregistrer et quitter nano
, appuyez sur Ctrl+X
, puis, lorsque vous y êtes invité, sur Y
, puis sur Entrée
. Vous pouvez tester le fichier de configuration en effectuant un essai à vide:
Cette commande appelle logrotate
, lui indique le fichier de configuration standard, et active le mode de débogage.
Les informations seront imprimées sur les fichiers journaux que Logrotate gère et ce qu’il aurait fait avec eux. Si tout semble bon, vous avez terminé. Le travail standard de Logrotate 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 Indépendante pour Logrotate
Dans cet exemple, nous avons une application qui s’exécute sous 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, donc nous devons le configurer 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 :
Ensuite, collez la configuration suivante :
/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 fera tourner les fichiers toutes les heures, les compressant et conservant vingt-quatre anciens journaux, et créant un nouveau fichier journal pour remplacer celui qui a été tourné.
Vous devrez personnaliser la configuration selon votre application, mais c’est un bon début.
Pour tester que la configuration fonctionne, créons un fichier journal. Tout d’abord, cd
vers le répertoire personnel de l’utilisateur en utilisant la commande cd ~
. Ensuite, créez un répertoire pour les journaux en utilisant la commande mkdir
. Enfin, créez un fichier vide dans le répertoire logs
en utilisant la commande touch
. Exécutez les commandes suivantes dans l’ordre pour compléter ces étapes:
Maintenant que nous avons un fichier journal vide au bon endroit, exécutons la commande logrotate
.
Comme les journaux appartiennent à sammy
, nous n’avons pas besoin d’utiliser sudo
. Cependant, nous devons spécifier un fichier state. Ce fichier enregistre ce que logrotate
a trouvé et les actions qu’il a prises la dernière fois qu’il s’est exécuté, afin de savoir quoi faire la prochaine fois qu’il s’exécute. Ce suivi de l’é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 allons demander à Logrotate de placer le fichier d’état directement dans notre répertoire personnel pour cet exemple. Il peut être placé n’importe où 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 que logrotate rencontre:
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
affichera des informations détaillées sur ce que Logrotate est en train de faire. Dans ce cas, il n’a pas effectué de rotation. C’est la première fois que Logrotate rencontre ce fichier journal et il a zéro heure, donc il ne devrait pas être tourné.
Si nous examinons le fichier d’état à l’aide de l’utilitaire cat
, nous remarquerons que Logrotate a enregistré quelques informations sur l’exécution :
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0
Logrotate a noté les journaux qu’il a vus et quand il les a considérés 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 tourner le fichier journal alors qu’il ne l’aurait pas fait autrement, utilisez le drapeau --force
:
Ceci est utile lors de la mise en œuvre 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 :
Cela ouvrira un fichier texte. S’il s’agit de votre première utilisation de cron, vous pouvez être invité à choisir un éditeur de texte par défaut. Si vous n’avez pas de préférence, nous recommandons nano
aux 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 vierge à 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, chaque jour. Elle exécute presque la même commande logrotate
que celle que nous avons exécutée précédemment, bien que nous ayons étendu logrotate
à son chemin complet de /usr/sbin/logrotate
pour plus de sécurité. Il est bon usage 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 rotatif et compressé access.log.1.gz
(ou .2.gz
si vous avez exécuté Logrotate avec le drapeau --force
).
Conclusion
Dans ce tutoriel, nous avons vérifié notre version de Logrotate, exploré la configuration par défaut de Logrotate sur Ubuntu, et configuré deux types différents de configurations personnalisées. Pour en savoir plus sur les options de ligne de commande et de configuration disponibles pour Logrotate, vous pouvez consulter sa page de manuel en exécutant man logrotate
dans votre terminal ou en visitant la documentation en ligne.