Les journaux sont utiles lorsque vous souhaitez suivre l'utilisation ou dépanner une application. Cependant, à mesure que davantage d'informations sont consignées, les fichiers journaux utilisent plus d'espace disque. Au fil du temps, un fichier journal peut atteindre une taille incommode. Le manque d'espace disque à cause d'un fichier journal volumineux est un problème, mais un fichier journal volumineux peut également ralentir le processus de redimensionnement ou de sauvegarde de votre serveur virtuel. De plus, il est difficile de rechercher un événement particulier si vous avez un million d'entrées de journal à parcourir. C'est donc une bonne idée de garder les fichiers journaux à une taille gérable et de les élaguer lorsqu'ils deviennent trop vieux pour être d'une grande utilité.
Heureusement, l'utilitaire logrotate facilite la rotation des journaux. La « rotation des journaux » fait référence à la pratique consistant à archiver le journal actuel d'une application, à démarrer un nouveau journal et à supprimer les journaux plus anciens. Le système exécute généralement logrotate une fois par jour, et lorsqu'il s'exécute, il vérifie les règles qui peuvent être personnalisées par répertoire ou par journal.
Comment fonctionne la rotation de log
Le système exécute logrotate selon un calendrier, généralement quotidiennement. Sur la plupart des distributions, le script qui exécute logrotate quotidiennement se trouve dans /etc/cron.daily/logrotate
.
Certaines distributions utilisent une variante. Par exemple, sur Gentoo, le script logrotate se trouve dans /etc/cron.daily/logrotate.cron
.
Si vous souhaitez que logrotate s'exécute plus souvent (pour une rotation horaire des journaux, par exemple), vous devez utiliser cron pour exécuter logrotate via un script dans /etc/cron.hourly
.
Lorsque logrotate s'exécute, il lit ses fichiers de configuration pour déterminer où trouver les fichiers journaux qu'il doit faire pivoter, la fréquence de rotation des fichiers et le nombre de journaux archivés à conserver.
logrotate.conf
Le fichier de configuration principal de logrotate se trouve dans /etc/logrotate.conf
.
Le fichier contient les paramètres par défaut utilisés par logrotate lors de la rotation des journaux. Le fichier est commenté, vous pouvez donc le parcourir pour voir comment la configuration est configurée. Plusieurs des commandes spécifiques de ce fichier sont décrites plus loin dans cet article.
Notez qu'une ligne dans le fichier indique :
include /etc/logrotate.d
Ce répertoire contient la plupart des fichiers de configuration spécifiques à l'application.
logrotate.d
Utilisez la commande suivante pour répertorier le contenu du répertoire qui stocke les paramètres de journal spécifiques à l'application :
ls /etc/logrotate.d
Selon la quantité installée sur votre serveur, ce répertoire peut ne contenir aucun fichier ou plusieurs. En général, les applications installées via votre gestionnaire de packages créeront également un fichier de configuration dans /etc/logrotate.d
.
Habituellement, le répertoire contient un fichier de configuration pour votre service syslog, que logrotate lit lorsqu'il effectue une rotation des journaux système. Ce fichier contient une entrée pour divers journaux système, ainsi que certaines commandes similaires à celles contenues dans logrotate.conf
.
REMARQUE : Sur les versions des systèmes d'exploitation Ubuntu antérieures à Karmic Koala (9.10), il n'y a pas d'entrée pour un service syslog. Avant cette version, les journaux système étaient remplacés par un savelog
commande exécutée depuis le /etc/cron.daily/sysklogd
script.
Dans un fichier d'application
Par exemple, considérez le contenu d'un fichier de configuration logrotate qui peut être mis en place lorsque vous installez Apache sur un système Fedora :
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Lorsque logrotate s'exécute, il recherche tous les fichiers dans /var/log/httpd
qui se terminent par log
et les fait pivoter, s'ils ne sont pas vides. S'il vérifie le répertoire httpd et ne trouve aucun fichier journal, il ne génère pas d'erreur. Ensuite, il exécute la commande dans le postrotate/endscript
block (dans ce cas, une commande qui indique à Apache de redémarrer), mais seulement après avoir traité tous les journaux spécifiés.
Cet exemple de fichier ne contient pas certains paramètres inclus dans le logrotate.conf
dossier. Les commandes dans logrotate.conf
agissent comme valeurs par défaut pour la rotation des journaux. Vous pouvez spécifier des paramètres différents pour n'importe quelle application lorsque vous souhaitez remplacer les valeurs par défaut. Par exemple, si vous exécutez un serveur Web occupé, vous pouvez inclure un daily
commande dans le bloc de configuration d'Apache afin que les journaux d'Apache effectuent une rotation quotidienne au lieu de la rotation hebdomadaire par défaut.
La section suivante décrit certaines des commandes les plus couramment utilisées dans un fichier de configuration logrotate.
Commandes de configuration
Vous pouvez obtenir une liste complète des commandes utilisées dans les fichiers de configuration de logrotate en consultant la page de manuel :
man logrotate
Cette section décrit les commandes les plus couramment utilisées.
Rappelez-vous, les fichiers de configuration pour les applications dans /etc/logrotate.d
héritent de leurs valeurs par défaut du fichier principal /etc/logrotate.conf
fichier.
Fichiers journaux
Un fichier journal et son comportement de rotation sont définis en répertoriant le ou les fichiers journaux suivis d'un ensemble de commandes entre accolades. La plupart des fichiers de configuration d'application contiendront un seul de ces blocs, mais il est possible d'en mettre plusieurs dans un fichier, ou d'ajouter des blocs de fichier journal au principal logrotate.conf
fichier.
Vous pouvez répertorier plusieurs fichiers journaux pour un bloc en utilisant un caractère générique dans le nom ou en séparant les fichiers journaux de la liste par des espaces. Par exemple, pour spécifier tous les fichiers du répertoire /var/foo qui se terminent par .log
, et le fichier/var/bar/log.txt
, vous configureriez le bloc comme suit :
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
Faire pivoter le nombre
La rotate
La commande détermine le nombre de journaux archivés renvoyés avant que logrotate ne commence à supprimer les plus anciens. Par exemple :
rotate 4
Cette commande indique à logrotate de conserver quatre journaux archivés à la fois. Si quatre journaux archivés existent lors de la nouvelle rotation du journal, le plus ancien est supprimé pour faire place à la nouvelle archive.
Intervalle de rotation
Vous pouvez spécifier une commande qui indique à logrotate la fréquence de rotation d'un journal particulier. Les commandes possibles incluent :
daily
weekly
monthly
yearly
Si un intervalle de rotation n'est pas spécifié, le journal sera tourné chaque fois que logrotate s'exécute (sauf si une autre condition telle que size
a été défini).
Si vous souhaitez utiliser un intervalle de temps autre que ceux définis, vous devez utiliser cron pour créer un fichier de configuration séparé. Par exemple, si vous souhaitez faire pivoter un fichier journal particulier toutes les heures, vous pouvez créer un fichier dans /etc/cron.hourly
(vous devrez peut-être également créer ce répertoire) qui contiendrait une ligne comme celle-ci :
/usr/sbin/logrotate /etc/logrotate.hourly.conf
Ensuite, vous placeriez la configuration pour cette exécution horaire de logrotate (l'emplacement du fichier journal, s'il faut ou non compresser les anciens fichiers, etc.) dans /etc/logrotate.hourly.conf
.
Taille
Vous pouvez utiliser la size
commande pour spécifier une taille de fichier pour logrotate à vérifier lors de la détermination d'effectuer ou non une rotation. Le format de la commande indique à logrotate les unités que vous utilisez pour spécifier la taille :
size 100k
size 100M
size 100G
Le premier exemple ferait pivoter le journal s'il dépasse 100 Ko, le second s'il dépasse 100 Mo et le troisième s'il dépasse 100 Go. Je ne recommande pas d'utiliser une limite de 100 G, attention, l'exemple est juste devenu un peu incontrôlable.
La commande de taille est prioritaire sur et remplace un intervalle de rotation si les deux sont définis.
Compression
Si vous souhaitez que les fichiers journaux archivés soient compressés (au format gzip), vous pouvez inclure la commande suivante, généralement dans /etc/logrotate.conf
:
compress
La compression est normalement une bonne idée, car les fichiers journaux ne sont généralement que du texte et le texte se comprime bien. Si, toutefois, vous avez des journaux archivés que vous ne souhaitez pas compresser, mais que vous souhaitez toujours que la compression soit activée par défaut, vous pouvez inclure la commande suivante dans une configuration spécifique à l'application :
nocompress
Une autre commande à noter concernant la compression est la suivante :
delaycompress
Cette commande est utile si vous souhaitez compresser les journaux archivés, mais souhaitez retarder la compression. Lorsque delaycompress
est actif, un journal archivé est compressé lors de la prochaine rotation du journal. Cela peut être important lorsque vous avez un programme qui peut encore écrire dans son ancien fichier journal pendant un certain temps après la rotation d'un nouveau. Notez que delaycompress
ne fonctionne que si vous avez compress
dans votre configuration.
Un exemple de bon moment pour utiliser delaycompress
serait lorsque logrotate est invité à redémarrer Apache avec la directive « graceful » ou « reload ». Étant donné que les anciens processus Apache ne se terminent pas tant que leurs connexions ne sont pas terminées, ils pourraient potentiellement essayer de consigner plus d'éléments dans l'ancien fichier pendant un certain temps après le redémarrage. Retarder la compression garantit que vous ne perdrez pas ces entrées de journal supplémentaires lors de la rotation des journaux.
Postrotation
Logrotate exécute le postrotate
script chaque fois qu'il tourne un journal spécifié dans un bloc de configuration. Vous souhaitez généralement utiliser ce script pour redémarrer une application après la rotation du journal afin que l'application puisse basculer vers un nouveau journal.
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
>/dev/null
indique à logrotate de diriger la sortie de la commande vers nulle part. Dans ce cas, vous n'avez pas besoin d'afficher la sortie si l'application a redémarré correctement.
La postrotate
La commande indique à logrotate que le script à exécuter démarre sur la ligne suivante et le endscript
commande indique que le script est terminé.
Scripts partagés
Normalement, logrotate exécute le postrotate
script chaque fois qu'il tourne un journal. Cela est également vrai pour plusieurs journaux qui utilisent le même bloc de configuration. Par exemple, un bloc de configuration de serveur Web qui fait référence à la fois au journal d'accès et au journal d'erreurs, s'il fait pivoter les deux, exécutera le postrotate
script deux fois (une fois pour chaque fichier pivoté). Si les deux fichiers sont tournés, le serveur Web est redémarré deux fois.
Pour empêcher logrotate d'exécuter ce script pour chaque journal, vous pouvez inclure la commande suivante :
sharedscripts
Cette commande indique à logrotate de vérifier tous les journaux pour ce bloc de configuration avant d'exécuter le postrotate
scénario. Si l'un ou les deux journaux sont tournés, le postrotate
le script ne s'exécute qu'une seule fois. Si aucun des logs n'est tourné, le postrotate
le script ne s'exécute pas.
Où aller ensuite
Cet article fournit un aperçu de ce que fait logrotate et du type d'options de configuration qui s'offrent à vous. Vous devriez maintenant pouvoir explorer les configurations existantes et les adapter à vos besoins. Pour savoir comment créer un exemple de configuration (pour faire pivoter les journaux pour les hôtes virtuels personnalisés), consultez Exemples de configurations de rotation de journaux et dépannage.