GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de Logrotate sous Linux pour gérer les fichiers journaux (avec exemples)

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 groupe
  • rotate 4 quatre fichiers journaux conservés (conservez 4 semaines de backlogs)
  • create nouveaux fichiers journaux vides créés après la rotation de l'actuel
  • dateex 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 configuration
  • missingok si le fichier n'existe pas, il est toujours correct et logrotate ne doit pas générer d'erreur ni enregistrer d'erreur
  • notifempty ne faites pas pivoter le fichier journal s'il est vide
  • maxsize si la taille dépasse 30k, faites pivoter
  • yearly exécuter une fois par an
  • create 0600 root root créer le nouveau fichier pivoté en tant que root :root avec les autorisations 0600

Certaines autres options non répertoriées ci-dessus :

  • rotate 30 conserver trente fichiers, élaguer les plus anciens lorsqu'ils dépassent
  • monthly tourner une fois par mois
  • compress compresser les fichiers pivotés. cela utilise gzip par défaut et donne des fichiers se terminant par .gz . La commande de compression peut être modifiée à l'aide de compresscmd 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ées 0640 et l'utilisateur et le groupe spécifiés centos
  • 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é dans postrotate s'exécuterait deux fois sans cette option
  • postrotate à 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 que postrotate 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 la lastaction 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

Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri sous Linux avec des exemples

  3. 10+ commandes Linux VI avec des exemples

  4. Comment gérer les fichiers journaux à l'aide de Logrotate sous Linux

  5. commande chattr sous Linux avec des exemples

Commande Linux WC avec exemples

Horodatages de fichiers Linux expliqués avec des exemples

Utilisation de la commande Linux mv avec des exemples

Commande de montage Linux avec exemples

Commande Linux gawk avec exemples

Linux make Commande avec des exemples