Appliquer les connaissances
Un article précédent Comprendre l'utilitaire logrotate décrit ce que fait logrotate et comment vous pouvez le configurer. Cet article applique ces connaissances à la création d'une solution de rotation des journaux pour un ou plusieurs hôtes virtuels personnalisés. Il identifie également certaines options pour tester et dépanner la rotation des journaux.
Lier le tout :journaux de l'hôte virtuel
Pour montrer comment vous pouvez utiliser logrotate pour vos applications, voici un exemple qui sera utile à de nombreuses personnes :la rotation des journaux pour vos hôtes virtuels personnalisés. L'exemple utilise Apache ®, mais vous pouvez le modifier pour d'autres serveurs Web comme nNinx® ou Lighttpd® , généralement en modifiant simplement le script de post-rotation.
Tout d'abord, créez un fichier pour contenir la configuration qui indique à logrotate quoi faire avec les fichiers journaux de l'hôte virtuel. Ne modifiez pas le fichier mainconfig ou le fichier de configuration du serveur Web, car une future mise à niveau du package pourrait vouloir écraser la configuration. Créez plutôt votre propre fichier avec la commande suivante :
/etc/logrotate.d/virtualhosts
Cet exemple regroupe tous les hôtes virtuels dans un seul fichier, mais si vous avez un hôte plus occupé que les autres, vous souhaiterez peut-être créer des fichiers de configuration distincts pour gérer les besoins de vos différents domaines. L'exemple spécifie plusieurs éléments qui sont probablement déjà définis dans votre configuration principale, juste pour couvrir toutes les bases.
Les fichiers
Supposons que vous ayez deux domaines virtuels, domain1.com et domaine2.com , et que les fichiers journaux de chacun se trouvent dans /home/demo/public_html/(domain name)/log .Votre fichier de configuration doit indiquer à logrotate où trouver les fichiers journaux, puis démarrer le bloc de configuration pour eux :
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
Si vous avez d'autres répertoires ou fichiers de journaux à ajouter, insérez-les dans cette liste.
Rotation
Ensuite, assurez-vous que logrotate ne conserve que le nombre d'anciens journaux que vous souhaitez :
rotate 14
L'exemple utilise 14 fichiers pour conserver deux semaines de journaux, mais vous pouvez ajuster ce nombre en fonction de vos besoins.
Intervalle
Maintenant, dites au serveur Web de faire pivoter ces journaux quotidiennement (encore une fois, changez-le si vous préférez un intervalle plus long) :
daily
Taille (facultatif)
Le paramètre de taille spécifie une taille maximale pour vos journaux. Lorsque le journal atteint cette taille, une rotation du journal est déclenchée.
size 50M
Le paramètre de taille est facultatif ici car il remplace toutes les conditions de rotation basées sur le temps. Vous pouvez spécifier à la fois un intervalle de temps et une taille maximale, mais si vous le faites, logrotate ignore le paramètre d'intervalle de temps.
Compression
Indiquez si vous souhaitez compresser ces journaux lorsqu'ils sont réarchivés. Cet exemple utilise le delaycompress
pour tenir compte du redémarrage normal d'Apache, ce qui signifie que vous devez également activer la compression :
compress
delaycompress
Scripts partagés
Vous pouvez avoir plusieurs hôtes virtuels, ce qui impliquerait la rotation de plusieurs journaux. Pour vous assurer que le serveur Web ne redémarre qu'une fois toutes les rotations effectuées, ajoutez la ligne suivante :
sharedscripts
Postrotation
Spécifiez un script de post-rotation pour redémarrer le serveur Web :
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
Et enfin, fermez le bloc de configuration avec une accolade :
}
L'ensemble du fichier
Voici le fichier de configuration complet :
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
}
Testez le script soit en surveillant les choses lorsque les tâches cron nocturnes s'exécutent, soit en exécutant logrotate manuellement avec la commande suivante :
/usr/sbin/logrotate /etc/logrotate.conf
Si vous ne recevez aucune erreur, tout devrait bien se passer. Mais si vous voulez être certain, vous pouvez effectuer certains des tests suivants.
Tester la rotation de log
Si vous soupçonnez que logrotate rencontre des problèmes, ou si vous voulez simplement vous assurer que la nouvelle configuration que vous avez mise en place fonctionne, vous pouvez passer quelques indicateurs utiles à logrotate lorsque vous l'exécutez depuis la ligne de commande :
Verbeux
Le drapeau verbeux, -v
, indique à logrotate de dire chaque opération qu'il exécute. Cela aide lorsque vous voulez savoir pourquoi logrotate ne fait pas pivoter un journal comme prévu.
Débogage
L'indicateur de débogage, -d
, indique à logrotate de parcourir les mouvements de rotation des journaux, mais pas réellement les faire pivoter. Cela peut être pratique si vous travaillez sur un serveur de production et que vous souhaitez tester un nouveau fichier de configuration, mais que vous ne souhaitez pas qu'une rotation réelle des journaux soit exécutée lorsque vous exécutez le test.
Le débogage vérifie également que le fichier de configuration est correctement formaté et que logrotate peut trouver les fichiers journaux qu'il ferait pivoter. Cependant, comme il n'exécute pas les rotations, il ne teste pas certaines parties du processus comme les scripts de post-rotation.
Forcer
Le drapeau de force, -f
, force logrotate à faire pivoter tous les journaux lorsqu'il s'exécute, qu'ils aient normalement besoin ou non d'être pivotés à ce moment-là. Si vous voulez tester en profondeur les configurations de logrotate, c'est le drapeau à utiliser. N'oubliez pas que logrotate fait pivoter les journaux et supprime les anciens en fonction de la configuration, donc ne faites pas accidentellement tourner un journal récent que vous devez conserver.
Cela peut également être utile si vous pensez que logrotate devrait faire tourner un journal, mais ce n'est pas le cas. Forcer le problème vous aide à identifier :
- Si le problème est que logrotate pense que le journal n'a pas besoin de rotation (si vous exécutez l'indicateur de force et que le journal est pivoté)
- Si le problème est que logrotate n'est pas en mesure d'affecter le fichier journal (si vous l'exécutez et que rien ne se passe dans le journal).
Remarque : Si vous avez configuré logrotate pour ajouter une date au nom d'un journal archivé, même en utilisant l'indicateur de force, logrotate crée une nouvelle archive le même jour. Étant donné que le nom qu'il doit utiliser pour une deuxième archive est déjà pris dans ce cas, vous devrez peut-être renommer l'archive la plus récente avant de pouvoir forcer une rotation des journaux.
Combiner des drapeaux
Vous pouvez utiliser les indicateurs de test ensemble assez efficacement. Pour que logrotate vous dise ce qu'il ferait si vous faisiez tout tourner, mais pas réellement faites pivoter n'importe quoi, vous pouvez combiner les trois :
/usr/sbin/logrotate -vdf /etc/logrotate.conf
Cette commande fournit une longue liste de choses que logrotate ferait, y compris les fichiers journaux qu'il ferait tourner et ce qu'il ferait pendant ce processus.
Si vous souhaitez ensuite tester toutes les configurations de rotation dans leur intégralité, y compris les scripts exécutés après les rotations, vous pouvez exécuter logrotate sans l'indicateur de débogage :
/usr/sbin/logrotate -vf /etc/logrotate.conf
Logrotate fait tourner tous les journaux. L'écrémage de la sortie devrait vous aider à détecter tout problème évident. Vous devez également vous assurer que tous vos services fonctionnent toujours correctement, qu'il n'y a rien de mal avec les scripts de postrotation et que tous les journaux ont été tournés.
Comment logrotate se souvient
Si vous constatez qu'un journal ne tourne pas même s'il est suffisamment ancien pour qu'il le soit, exécutez manuellement logrotate avec le -f
drapeau. Mais si vous voulez savoir pourquoi quelque chose ne va pas, il y a un autre fichier que vous pouvez vérifier avant de forcer une rotation :
/var/lib/logrotate.status
Logrotate stocke des informations sur la dernière rotation de chaque fichier journal dans le fichier d'état. Si vous regardez à l'intérieur, vous voyez quelque chose comme :
logrotate state -- version 2
"/var/log/acpid.log" 2010-6-18
"/var/log/iptables.log" 2010-6-18
"/var/log/uucp.log" 2010-6-29
...
C'est un format simple, l'emplacement du fichier journal est à gauche et la date de la dernière rotation est à droite. Parfois, les dates sur votre serveur deviennent confuses (si vous étiez en train de bricoler un service NTP ou similaire), et la date à laquelle un journal a été tourné pour la dernière fois devient une date future. Si cela s'est produit, vous le voyez dans ce fichier d'état.
Si vous voulez vérifier logrotate avec un fichier journal particulier mais que vous ne voulez pas tout forcer à tourner, vous pouvez supprimer l'entrée du journal du fichier logrotatestatus. Ensuite, lorsque vous exécutez logrotate normalement, il doit créer une nouvelle entrée pour le journal avec la date d'aujourd'hui (même s'il ne peut pas réellement faire pivoter le journal - il utilise cette première exécution comme référence si elle est uniquement basée sur des intervalles).
Résumé
Pour quelque chose qui s'exécute silencieusement en arrière-plan et n'exécute vraiment qu'un seul type de tâche, logrotate en fait un peu. Vous devriez pouvoir configurer de nouveaux fichiers de configuration logrotate à vos propres fins, soit en les créant à partir de zéro, soit en copiant les configurations existantes et en les modifiant de manière appropriée. Et surtout, vous pouvez éviter que vos journaux ne deviennent incontrôlables.