GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre l'utilitaire logrotate

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.


Linux
  1. Linux - Comprendre les autorisations Unix et les types de fichiers ?

  2. Comprendre les horodatages des fichiers Mac

  3. Restreindre l'accès au fichier pour ajouter uniquement

  4. cp -L vs cp -H

  5. Comprendre les autorisations UNIX et les types de fichiers

Comprendre les autorisations de fichiers Linux

Gestion des journaux avec Logrotate sur Ubuntu

Comprendre le multipath Linux (dm-multipath)

Comprendre le fichier /etc/group

Comprendre l'utilitaire séparé Linux

Comprendre l'utilitaire Linux fdisk