Le système d'exploitation Linux et les applications en cours d'exécution génèrent souvent des journaux dans des fichiers. Ces fichiers sont souvent stockés dans le /var/log
répertoire ou tout autre fichier spécifié par l'application. Si ces fichiers journaux ne font pas l'objet d'une rotation, d'une compression et d'un élagage périodique, ils finiront par consommer tout l'espace disque disponible, provoquant le blocage du serveur.
Dans ce guide, nous examinerons le fonctionnement de la rotation de log, puis examinerons un exemple de configuration de la rotation de log pour notre application personnalisée.
Prérequis
Pour suivre ce guide, vous avez besoin :
- Une distribution Linux moderne comme Ubuntu, Debian, Centos, Rhel, Rocky Linux
- Accès root au serveur ou un utilisateur avec des privilèges sudo
Vérifiez votre version de logrotate avec cette commande :
logrotate --version
Sortie de mon système :
# logrotate --version
logrotate 3.8.6
Si Logrotate n'est pas installé, vous obtiendrez une erreur. Veuillez installer le logiciel à l'aide du gestionnaire de packages de votre distribution Linux.
Configuration de la rotation
La configuration de logrotate se trouve dans ce fichier /etc/logrotate.conf
. C'est là que se trouvent les paramètres par défaut. Vous trouverez également des configurations de rotation pour les journaux qui n'appartiennent à aucun package système.
La ligne la plus importante de ce fichier de configuration est include /etc/logrotate.d
. Cela indique à logrotate de vérifier également les configurations ajoutées dans ce répertoire. Cela signifie que pour nos applications, nous n'avons pas besoin de tout ajouter dans ce fichier principal, nous pouvons créer des fichiers de configuration individuels et l'ajouter au /etc/logrotate.d
annuaire. La plupart des packages que vous installez et qui ont besoin d'aide pour la rotation des journaux placeront également leurs fichiers de configuration logrotate dans ce répertoire.
Ceci est du contenu du fichier principal /etc/logrotate.conf
fichier :
weekly
rotate 4
create
dateext
compress
weekly
configurer les rotations hebdomadaires des journaux avec les fichiers journaux appartenant à la racine utilisateur et le syslog grouperotate 4
quatre fichiers journaux conservés (conservez 4 semaines de backlogs)create
nouveaux fichiers journaux vides créés après la rotation de l'actueldateex
utiliser la date comme suffixe du fichier pivotécompress
compresser les fichiers pivotés
Pour les fichiers individuels dans /etc/logrotate.d
répertoire, examinons-en un à titre d'exemple :
cat /etc/logrotate.d/yum
Sortie :
/var/log/yum.log {
missingok
notifempty
maxsize 30k
yearly
create 0600 root root
}
Chacune de ces configurations héritera des configurations par défaut dans le /etc/logrotate.conf
répertoire.
Explication :
/var/log/yum.log
cette première ligne indique quel fichier les cibles de configurationmissingok
si le fichier n'existe pas, il est toujours correct et logrotate ne doit pas générer d'erreur ni enregistrer d'erreurnotifempty
ne faites pas pivoter le fichier journal s'il est videmaxsize
si la taille dépasse 30k, faites pivoteryearly
exécuter une fois par ancreate 0600 root root
créer le nouveau fichier pivoté en tant queroot
:root
avec les autorisations0600
Certaines autres options non répertoriées ci-dessus :
rotate 30
conserver trente fichiers, élaguer les plus anciens lorsqu'ils dépassentmonthly
tourner une fois par moiscompress
compresser les fichiers pivotés. cela utilisegzip
par défaut et donne des fichiers se terminant par.gz
. La commande de compression peut être modifiée à l'aide decompresscmd
option.
Logrotation du fichier journal de l'application personnalisée
Lorsque notre application personnalisée génère et écrit des journaux dans un fichier, il nous appartient de configurer la manière dont la rotation est effectuée pour ce fichier.
- Si nous avons un accès root, nous placerions idéalement le fichier de configuration dans
/etc/logrotate.d/
répertoire et cela fonctionnerait comme décrit ci-dessus - Si nous n'avons pas d'accès root, nous devrions configurer un cron pour exécuter
logrotate
commande passant la configuration que nous avons définie - Si vous souhaitez effectuer une rotation des journaux plus fréquemment que quotidiennement, par exemple toutes les heures, car la configuration de Logrotate du système ne s'exécute qu'une fois par jour
Configuration dans /etc/logrotate.d/
Disons que nous avons une application générant des journaux vers /var/log/our-app/app.log
et il s'exécute en tant que centos
. Créons notre fichier de confog logrotate /etc/logrotate/ourapp.conf
avec quelques exemples de configurations :
sudo vim /etc/logrotate.d/ourapp.conf
Configuration :
/var/log/our-app/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 centos centos
sharedscripts
postrotate
systemctl reload our-app
endscript
}
Quelques nouvelles directives :
create 0640 centos centos
crée un fichier journal vide après la rotation avec les autorisations spécifiées0640
et l'utilisateur et le groupe spécifiéscentos
sharedscripts
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é. Si la directive/var/log/our-app/*.log
correspond à plus d'un fichier journal, le script spécifié danspostrotate
s'exécuterait deux fois sans cette optionpostrotate
àendscript
Le bloc contient un script à exécuter après la rotation du fichier journal. Dans notre cas, recharger l'application. Cela est parfois nécessaire pour que votre application bascule vers le fichier journal nouvellement créé. Notez quepostrotate
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 les logs sont compressés, utilisez lalastaction
bloquer à la place.
Pour tester la configuration ci-dessus, utilisez cette commande :
sudo logrotate /etc/logrotate.conf --debug
La sortie indiquera quels fichiers journaux Logrotate gère et ce qu'il leur aurait fait. La tâche Logrotate standard s'exécutera une fois par jour et inclura votre nouvelle configuration.
Exemples de données dans la sortie
...
rotating pattern: /var/log/our-app/*.log after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...
Utiliser logrotate
commande pour la configuration personnalisée
Si vous n'avez pas d'accès root au système et que vous souhaitez faire tourner vos propres fichiers personnalisés, cette section vous indique comment procéder.
Disons une application our-app
génère des fichiers journaux et les enregistre dans un chemin personnalisé dans notre répertoire personnel, par ex. ~/apps/our-app/logs/
. Si les journaux sont générés fréquemment, nous voudrions les faire tourner hourly
. Mais logrotate ne fonctionne pas toutes les heures ?
Commençons par créer un fichier de configuration logrotate. Je placerai le fichier dans le répertoire app conf dans ce chemin ~/apps/our-app/conf/lorotate.conf
avec la configuration suivante :
Modifier le fichier :
vim ~/apps/our-app/conf/lorotate.conf
Avec la configuration suivante :
/home/centos/apps/our-app/logs/*.log {
rotate 30
hourly
compress
sharedscripts
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d-%s
copytruncate
}
La configuration ci-dessus fait pivoter les fichiers dans le répertoire /home/centos/apps/our-app/logs/*.log
toutes les heures, en compressant et en ne conservant que 30 anciens journaux.
copytruncate
copie le contenu d'un fichier journal dans un nouveau fichier puis tronque le fichier journal.dateformat
spécifie le format du fichier pivotédateext
demande à logrotate d'inclure l'extension de date pour les fichiers pivotés.
Pour tester :
mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log
Maintenant que nous avons le fichier en place, nous pouvons maintenant utiliser logrotate
pour le faire pivoter. La seule chose que nous devons faire est de spécifier un state
dossier. Un state
le fichier enregistre ce que logrotate
vu la dernière fois qu'il a couru afin qu'il sache quoi faire. Pour la configuration de l'installation du système, elle est déjà gérée dans /var/lib/logrotate/status
mais dans notre cas, nous devons préciser.
Nous pouvons utiliser le répertoire personnel pour cela :
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
--verbose
imprimera des informations détaillées sur ce que fait Logrotate.
Vous devriez voir une sortie comme celle-ci :
$ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /home/centos/apps/our-app/logs/*.log hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
log does not need rotating (log has been already rotated)set default create context
Certaines informations ont été enregistrées dans le fichier d'état de logrotate :
$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6: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 voulez forcer Logrotate à faire pivoter le fichier journal alors qu'il ne l'aurait pas fait autrement, utilisez le --force
drapeau :
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force
Ceci est utile lors du test de postrotate
et d'autres scripts.
La prochaine étape consiste à exécuter automatiquement la commande ci-dessus. Ceci peut être réalisé en utilisant crons. La crontab
la commande est pratique.
Pour éditer les crons afin que nous puissions utiliser cette commande :
crontab -e
Cela ouvrira un fichier texte. Il peut y avoir déjà des commentaires 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 :
3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status
Ce qui précède exécutera la commande logrotate toutes les 3 minutes de chaque heure. Nous utilisons le chemin complet /usr/sbin/logrotate
nous n'obtenons donc pas d'erreur Commande introuvable.
Enregistrez le fichier et quittez. Cela installera la crontab et notre tâche s'exécutera selon le calendrier spécifié.
Conclusion
Nous avons examiné logrotate dans ce guide. Nous avons pu vérifier sa version, vérifier la configuration par défaut et configurer notre propre configuration personnalisée. 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 :
man logrotate