GNU/Linux >> Tutoriels Linux >  >> Linux

Faire pivoter et archiver les journaux avec la commande Linux logrotate

Les journaux sont parfaits pour savoir ce que fait une application ou pour résoudre un éventuel problème. Presque toutes les applications que nous traitons génèrent des journaux, et nous voulons que les applications que nous développons nous-mêmes les génèrent également. Plus les journaux sont détaillés, plus nous avons d'informations. Mais laissés à eux-mêmes, les journaux peuvent atteindre une taille ingérable, et ils peuvent, à leur tour, devenir un problème à part entière. C'est donc une bonne idée de les réduire, de garder ceux dont nous aurons besoin et d'archiver le reste.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Les bases

Le logrotate L'utilitaire est excellent pour gérer les journaux. Il peut les faire pivoter, les compresser, les envoyer par e-mail, les supprimer, les archiver et en créer de nouveaux lorsque vous en avez besoin.

Exécution de logrotate est assez simple - il suffit d'exécuter logrotate -vs state-file config-file . Dans la commande ci-dessus, le v l'option active le mode verbeux, s spécifie un fichier d'état, et le dernier config-file mentionne le fichier de configuration, où vous spécifiez ce que vous devez faire.

Pratique

Voyons un logrotate configuration qui s'exécute silencieusement sur notre système, gérant la richesse des journaux que nous trouvons dans /var/log annuaire. Extrayez les fichiers actuels dans ce répertoire. Voyez-vous beaucoup de *.[number].gz des dossiers? C'est ce que logrotate fait. Vous pouvez trouver le fichier de configuration correspondant sous /etc/logrotate.d/rsyslog . Le mien ressemble à ceci :

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

Le fichier commence par définir les instructions de rotation du /var/log/syslog fichier et les instructions sont contenues dans les accolades qui suivent. Voici ce qu'ils signifient :

  • rotate 7 :Conservez les journaux des sept dernières rotations. Ensuite, commencez à les supprimer.
  • daily :Faites pivoter le journal quotidiennement. Avec rotate 7 , cela signifierait que les journaux seraient conservés pendant les sept derniers jours. Les autres options sont weeklymonthlyyearly . Il y a aussi une size paramètre qui fera pivoter les fichiers journaux si leur taille dépasse une limite spécifiée, par exemple size 10ksize 10Msize 10G , etc. Si rien n'est spécifié, les journaux feront l'objet d'une rotation chaque fois que logrotate court. Vous pouvez même exécuter logrotate dans un cron pour l'utiliser à des intervalles de temps plus spécifiques.
  • missingok :Ce n'est pas grave si le fichier journal est manquant. Ne paniquez pas.
  • notifempty  :Ne pas faire pivoter si le fichier journal est vide.
  • delaycompress :Si la compression est activée, retarder la compression jusqu'à la rotation suivante. Cela permet au moins un fichier pivoté mais non compressé d'être présent. Utile si vous souhaitez que les journaux d'hier restent non compressés pour le dépannage. Il est également utile si un programme peut encore écrire dans l'ancien fichier jusqu'à ce qu'il soit redémarré/rechargé, comme Apache.
  • compress :La compression est activée. Utiliser nocompress pour l'éteindre.
  • postrotate/endscript :Exécutez le script dans cette section après la rotation. Utile pour faire des trucs de nettoyage. Il existe également un prerotate/endscript pour faire des choses avant le début de la rotation.

Pouvez-vous comprendre ce que fait la section suivante pour tous les fichiers mentionnés dans la configuration ci-dessus ? Le seul paramètre supplémentaire dans la deuxième section est sharedscripts , qui indique logrotate pour ne pas exécuter la section dans postrotate/endscript jusqu'à ce que toute la rotation des journaux soit terminée. Il empêche l'exécution du script pour chaque rotation de journal et s'exécute une fois à la fin.

Quelque chose de nouveau

J'utilise la configuration suivante pour gérer les accès Nginx et les journaux d'erreurs sur mon système.

/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

Le script ci-dessus peut être exécuté en utilisant :

logrotate -vs state-file /tmp/logrotate

La première exécution de la commande donne ce résultat :

L'extension
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Et l'exécuter une seconde fois :

L'extension
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Et l'exécuter une troisième fois :

L'extension
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Le contenu du fichier d'état ressemble à ceci :

logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

Téléchargez l'aide-mémoire Linux logrotate.


Cet article a été initialement publié sur le blog personnel de l'auteur et a été adapté avec sa permission.


Linux
  1. Planification des tâches avec la commande Linux cron

  2. Diagnostiquer les problèmes de connectivité avec la commande Linux ping

  3. Regardez les commandes et les tâches avec la commande Linux watch

  4. Remplacez les guillemets intelligents par la commande Linux sed

  5. Rechercher des fichiers et des répertoires sous Linux avec la commande find

Comment utiliser la commande Linux sleep avec des exemples

Comment utiliser la commande who sous Linux avec des exemples

Commande tar sous Linux avec des exemples

Comment faire pivoter et compresser les fichiers journaux sous Linux avec Logrotate

Comment rechercher des fichiers avec la commande fd sous Linux

HowTo:Le didacticiel de commande ultime Logrotate avec 10 exemples