Le wiki de Mickaël

Informatique, logiciels libres et GNU/Linux...

Outils pour utilisateurs

Outils du site


systeme:gerer-la-rotation-des-logs-avec-logrotate

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
systeme:gerer-la-rotation-des-logs-avec-logrotate [26/03/2020 14:38]
mickaël
systeme:gerer-la-rotation-des-logs-avec-logrotate [26/03/2020 14:48] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Gérer la rotation des logs avec logrotate ======
  
 +===== Introduction =====
 +
 +Les fichiers journaux ( fichiers log ) sont les enregistrements qui permettent aux administrateurs de suivre et surveiller les événements importants relatifs au système, au noyau, les services et les applications...
 +
 +Sans aucune action, les fichiers de logs se remplissent et la taille croît indéfiniment pouvant ainsi occuper tout l'​espace de la partition ou du dossier /var .
 +
 +Logrotate est un utilitaire permettant de limiter la taille des fichiers journaux présents dans le répertoire /var/log en les archivant, les compressant au format .gzip, les purgeant de manière automatique.
 +
 +Logrotate est installé par défaut sur de nombreuses distributions Linux.
 +
 +<​code>​mickael@xubuntu-mickael:​~$ lsb_release -d
 +Description:​ Ubuntu 18.04.4 LTS
 +mickael@xubuntu-mickael:​~$ logrotate --version
 +logrotate 3.11.0</​code>​
 +
 +<​code>​[root@srvcentos ~]# cat /​etc/​centos-release
 +CentOS Linux release 8.1.1911 (Core) ​
 +[root@srvcentos ~]# logrotate --version
 +logrotate 3.14.0</​code>​
 +
 +<​code>​root@srvdebian:​~#​ cat /​etc/​debian_version
 +10.3
 +root@srvdebian:​~#​ logrotate --version
 +logrotate 3.14.0</​code>​
 +
 +
 +===== Configuration du fichier logrotate.conf =====
 +
 +La configuration générale de logrotate se situe dans le fichier /​etc/​logrotate.conf.
 +
 +La configuration contenue dans ce fichier varie en fonction des distributions.
 +
 +[[http://​www.delafond.org/​traducmanfr/​man/​man8/​logrotate.8.html|Manuel logrotate]]
 +
 +<​code>​[root@srvcentos ~]# cat /​etc/​centos-release
 +CentOS Linux release 8.1.1911 (Core) ​
 +[root@srvcentos ~]# cat /​etc/​logrotate.conf
 +# see "man logrotate"​ for details
 +
 +# Fréquence de rotation toutes les semaines.
 +weekly
 +
 +# Définit le nombre d'​archives à conserver.
 +rotate 4
 +
 +# Création d'un nouveau fichier vide après la rotation.
 +create
 +
 +# Par défaut, les fichiers archivés sont numérotés de 1 à N, l’option dateext remplace cette numérotation par la date au format AAAAMMJJ.
 +dateext
 +
 +# Désactivation de la compression des logs.
 +#compress
 +
 +# Répertoire où seront situées toutes les configurations personnalisées.
 +include /​etc/​logrotate.d
 +
 +# system-specific logs may be also be configured here.</​code>​
 +
 +
 +<​code>​mickael@xubuntu-mickael:​~$ lsb_release -d
 +Description:​ Ubuntu 18.04.4 LTS
 +mickael@xubuntu-mickael:​~$ cat /​etc/​logrotate.conf
 +# see "man logrotate"​ for details
 +
 +# La rotation est effectuée une fois par semaine.
 +weekly
 +
 +# Les fichiers journaux appartiennent à l'​utilisateur root et au groupe syslog.
 +su root syslog
 +
 +# Définit le nombre d'​archives à conserver.
 +rotate 4
 +
 +# Création d'un nouveau fichier vide après la rotation.
 +create
 +
 +# Les rotations ne seront seront pas compressées.
 +#compress
 +
 +# Répertoire où seront situées toutes les configurations personnalisées.
 +include /​etc/​logrotate.d
 +
 +# Le fichier wtmp enregistre toutes les connexions. ​
 +# missingok : On ne pas remonte d'​erreur si un fichier de log est absent. ​
 +# monthly : La rotation est effectuée une fois par mois.
 +# create 0664 root utmp : Le fichier sera crée avec les droit 664 (-rw-rw-r--) et appartiendra à l’utilisateur root et au groupe utmp.
 +# rotate 1 : On ne garde qu’une seule copie du fichier ( lors de la prochaine rotation, l'​ancien fichier sera supprimé avant d’exécuter le traitement ).
 +/​var/​log/​wtmp {
 +    missingok
 +    monthly
 +    create 0664 root utmp
 +    rotate 1
 +}
 +
 +# le fichier btmp liste toutes les tentatives refusées de connexion.
 +# missingok : On ne pas remonte d'​erreur si un fichier de log est absent. ​
 +# monthly : La rotation est effectuée une fois par mois.
 +# create 0660 root utmp : Le fichier sera crée avec les droit 660 (-rw-rw----) et appartiendra à l’utilisateur root et au groupe utmp.
 +# rotate 1 : On ne garde qu’une seule copie du fichier ( lors de la prochaine rotation, l'​ancien fichier sera supprimé avant d’exécuter le traitement ).
 +/​var/​log/​btmp {
 +    missingok
 +    monthly
 +    create 0660 root utmp
 +    rotate 1
 +}
 +
 +# system-specific logs may be configured here</​code>​
 +
 +
 +Par défaut, logrotate s'​éxécute tous les jours.
 +
 +<​code>​[root@srvcentos ~]# ls -l /​etc/​cron.daily
 +total 4
 +-rwxr-xr-x. 1 root root 189  4 janv.  2018 logrotate
 +[root@srvcentos ~]# cat /​etc/​cron.daily/​logrotate
 +#!/bin/sh
 +
 +/​usr/​sbin/​logrotate /​etc/​logrotate.conf
 +EXITVALUE=$?​
 +if [ $EXITVALUE != 0 ]; then
 +    /​usr/​bin/​logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"​
 +fi
 +exit $EXITVALUE</​code>​
 +
 +<​code>​mickael@xubuntu-mickael:​~$ ls -l /​etc/​cron.daily | grep logrotate
 +-rwxr-xr-x 1 root root  372 août  21  2017 logrotate
 +mickael@xubuntu-mickael:​~$ cat /​etc/​cron.daily/​logrotate ​
 +#!/bin/sh
 +
 +# Clean non existent log file entries from status file
 +cd /​var/​lib/​logrotate
 +test -e status || touch status
 +head -1 status > status.clean
 +sed '​s/"//​g'​ status | while read logfile date
 +do
 +    [ -e "​$logfile"​ ] && echo "​\"​$logfile\"​ $date"
 +done >> status.clean
 +mv status.clean status
 +
 +test -x /​usr/​sbin/​logrotate || exit 0
 +/​usr/​sbin/​logrotate /​etc/​logrotate.conf
 +</​code>​
 +
 +On peut forcer l'​exécution d'une rotation des logs avec la commande : 
 +
 +<​code>​logrotate -f /​etc/​logrotate.conf</​code>​
 +
 +Ici, les fichiers archivés sont numérotés avec la date au format AAAAMMJJ.
 +
 +<​code>​[root@srvcentos ~]# ls -l /var/log
 +total 3808
 +drwxr-xr-x. 2 root   ​root ​      280 23 nov.  16:33 anaconda
 +drwx------. 2 root   ​root ​       23 23 nov.  21:56 audit
 +-rw-------. 1 root   ​root ​    53300 24 mars  17:51 boot.log
 +-rw-rw----. 1 root   ​utmp ​        0 23 nov.  16:30 btmp
 +drwxr-xr-x. 2 chrony chrony ​      6 19 nov.  16:31 chrony
 +-rw-------. 1 root   ​root ​     9858 24 mars  17:51 cron
 +-rw-r--r--. 1 root   ​root ​  ​1120652 ​ 1 févr. 21:14 dnf.librepo.log
 +-rw-r--r--. 1 root   ​root ​   243876 23 mars  10:44 dnf.log
 +-rw-r--r--. 1 root   ​root ​    92742 23 mars  10:44 dnf.rpm.log
 +-rw-r-----. 1 root   ​root ​      ​405 ​ 1 févr. 21:17 firewalld
 +-rw-r--r--. 1 root   ​root ​    32249 23 mars  10:44 hawkey.log
 +-rw-rw-r--. 1 root   ​utmp ​   292292 24 mars  17:51 lastlog
 +-rw-------. 1 root   ​root ​    36139 24 mars  17:51 maillog
 +-rw-------. 1 root   ​root ​  ​1727035 24 mars  17:51 messages
 +drwx------. 2 root   ​root ​        6 23 nov.  16:30 private
 +-rw-r--r--. 1 root   ​root ​     1040 24 févr. 17:05 README
 +-rw-------. 1 root   ​root ​    22534 24 mars  17:51 secure
 +-rw-------. 1 root   ​root ​        0 23 nov.  16:30 spooler
 +drwxr-x---. 2 sssd   ​sssd ​       73 11 nov.  23:50 sssd
 +drwxr-xr-x. 2 root   ​root ​       23  4 févr. 16:59 tuned
 +-rw-rw-r--. 1 root   ​utmp ​    75648 24 mars  17:51 wtmp
 +[root@srvcentos ~]# logrotate -f /​etc/​logrotate.conf
 +[root@srvcentos ~]# ls -l /var/log
 +total 3388
 +drwxr-xr-x. 2 root   ​root ​      280 23 nov.  16:33 anaconda
 +drwx------. 2 root   ​root ​       23 23 nov.  21:56 audit
 +-rw-------. 1 root   ​root ​        0 24 mars  17:52 boot.log
 +-rw------- ​ 1 root   ​root ​    53300 24 mars  17:52 boot.log-20200324
 +-rw------- ​ 1 root   ​utmp ​        0 24 mars  17:52 btmp
 +-rw-rw----. 1 root   ​utmp ​        0 23 nov.  16:30 btmp-20200324
 +drwxr-xr-x. 2 chrony chrony ​      6 19 nov.  16:31 chrony
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 cron
 +-rw-------. 1 root   ​root ​     9858 24 mars  17:51 cron-20200324
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 dnf.librepo.log
 +-rw-r--r--. 1 root   ​root ​  ​1120652 ​ 1 févr. 21:14 dnf.librepo.log-20200324
 +-rw-r--r--. 1 root   ​root ​   243876 23 mars  10:44 dnf.log
 +-rw-r--r--. 1 root   ​root ​    92742 23 mars  10:44 dnf.rpm.log
 +-rw-r-----. 1 root   ​root ​      ​405 ​ 1 févr. 21:17 firewalld
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 hawkey.log
 +-rw-r--r--. 1 root   ​root ​    32249 23 mars  10:44 hawkey.log-20200324
 +-rw-rw-r--. 1 root   ​utmp ​   292292 24 mars  17:51 lastlog
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 maillog
 +-rw-------. 1 root   ​root ​    36139 24 mars  17:51 maillog-20200324
 +-rw------- ​ 1 root   ​root ​      161 24 mars  17:52 messages
 +-rw-------. 1 root   ​root ​  ​1727035 24 mars  17:51 messages-20200324
 +drwx------. 2 root   ​root ​        6 23 nov.  16:30 private
 +-rw-r--r--. 1 root   ​root ​     1040 24 févr. 17:05 README
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 secure
 +-rw-------. 1 root   ​root ​    22534 24 mars  17:51 secure-20200324
 +-rw------- ​ 1 root   ​root ​        0 24 mars  17:52 spooler
 +-rw-------. 1 root   ​root ​        0 23 nov.  16:30 spooler-20200324
 +drwxr-x---. 2 sssd   ​sssd ​      142 24 mars  17:52 sssd
 +drwxr-xr-x. 2 root   ​root ​       23  4 févr. 16:59 tuned
 +-rw-rw-r-- ​ 1 root   ​utmp ​        0 24 mars  17:52 wtmp
 +-rw-rw-r--. 1 root   ​utmp ​    75648 24 mars  17:51 wtmp-20200324</​code>​
 +
 +===== Configurations personnalisées dans logrotate.d =====
 +
 +Afin de ne pas surcharger le fichier de configuration principal, il est possible d'​ajouter des configurations personnalisées dans /​etc/​logrotate.d.
 +
 +Ici, toutes les configurations personnalisées déjà présentes.
 +
 +<​code>​root@srvdebian:​~#​ ls -l /​etc/​logrotate.d
 +total 24
 +-rw-r--r-- 1 root root 120 avril 19  2019 alternatives
 +-rw-r--r-- 1 root root 173 janv. 18  2019 apt
 +-rw-r--r-- 1 root root 130 août  29  2018 btmp
 +-rw-r--r-- 1 root root 112 avril 19  2019 dpkg
 +-rw-r--r-- 1 root root 501 févr. 26  2019 rsyslog
 +-rw-r--r-- 1 root root 145 févr. 19  2018 wtmp
 +root@srvdebian:​~#​ cat /​etc/​logrotate.d/​apt
 +/​var/​log/​apt/​term.log {
 +  rotate 12
 +  monthly
 +  compress
 +  missingok
 +  notifempty
 +}
 +/​var/​log/​apt/​history.log {
 +  rotate 12
 +  monthly
 +  compress
 +  missingok
 +  notifempty
 +}
 +</​code>​
 +
 +Je vais créer un nouveau fichier de configuration et indiquer dans celui-ci :
 +  * De conserver 3 jours de journalisation.
 +  * Un intervalle de rotation journalier.
 +  * De créer un fichier après la rotation avec les droits 644 et appartenant à l'​utilisateur root et au groupe root.
 +  * Que les fichiers seront compressés.
 +  * Que les rotations se feront avec la numérotation par la date au format AAAAMMJJ.
 +  * Que si un fichier de log est manquant, on passe au suivant sans générer d'​erreur.
 +  * Ne pas effectuer la rotation si le fichier est vide.
 +
 +<​code>​root@srvdebian:​~#​ touch /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /​etc/​logrotate.d/​ | grep mickael
 +-rw-r--r-- 1 root root   0 mars  18 21:23 mickael
 +/​var/​log/​actarus.log {
 +rotate 3
 +daily
 +create 644 root root
 +compress
 +dateext
 +missingok
 +notifempty
 +}</​code>​
 +
 +Le 19 mars, j'​insère du contenu dans mon fichier actarus.log et je force l'​exécution d'une rotation des logs.
 +
 +La rotation a bien été effectuée et l'​archive s'​appelle actarus.log-20200319.gz.
 +
 +<​code>​root@srvdebian:​~#​ date
 +jeudi 19 mars 2020, 19:16:18 (UTC+0100)
 +root@srvdebian:​~#​ man ls > /​var/​log/​actarus.log
 +root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /var/log | grep actarus
 +-rw-r--r-- 1 root root      0 mars  19 19:16 actarus.log
 +-rw-r--r-- 1 root root   3008 mars  19 19:16 actarus.log-20200319.gz
 +</​code>​
 +
 +Le 20 mars, je n'​insère aucun contenu dans mon fichier actarus.log et je force l'​exécution d'une rotation des logs.
 +
 +Comme j'ai indiqué dans ma configuration de ne pas permuter le log s'il est vide, aucune archive n'a été crée. ​
 +
 +<​code>​root@srvdebian:​~#​ date
 +vendredi 20 mars 2020, 19:15:07 (UTC+0100)
 +root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /var/log | grep actarus
 +-rw-r--r-- 1 root root      0 mars  19 19:16 actarus.log
 +-rw-r--r-- 1 root root   3008 mars  19 19:16 actarus.log-20200319.gz
 +</​code>​
 +
 +Les 21 et 22 mars, j'​insère à nouveau du contenu dans mon fichier de log et et je force l'​exécution d'une rotation des logs.
 +
 +la rotation a bien été effectuée et les archives s'​appellent actarus.log-21200319.gz et actarus.log-22200319.gz
 +
 +<​code>​root@srvdebian:​~#​ date
 +samedi 21 mars 2020, 19:15:06 (UTC+0100)
 +root@srvdebian:​~#​ man tar > /​var/​log/​actarus.log
 +root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /var/log | grep actarus
 +-rw-r--r-- 1 root root      0 mars  21 19:15 actarus.log
 +-rw-r--r-- 1 root root   3008 mars  19 19:16 actarus.log-20200319.gz
 +-rw-r--r-- 1 root root  12490 mars  21 19:15 actarus.log-20200321.gz
 +root@srvdebian:​~#​ date
 +dimanche 22 mars 2020, 19:15:12 (UTC+0100)
 +root@srvdebian:​~#​ man ssh > /​var/​log/​actarus.log
 +root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /var/log | grep actarus
 +-rw-r--r-- 1 root root      0 mars  22 19:15 actarus.log
 +-rw-r--r-- 1 root root   3008 mars  19 19:16 actarus.log-20200319.gz
 +-rw-r--r-- 1 root root  12490 mars  21 19:15 actarus.log-20200321.gz
 +-rw-r--r-- 1 root root  13816 mars  22 19:15 actarus.log-20200322.gz</​code>​
 +
 +Le 23 mars, j'​insère à nouveau du contenu dans mon fichier de log et et je force l'​exécution d'une rotation des logs.
 +
 +la rotation a bien été effectuée et l'​archive s'​appelle actarus.log-20200323.gz.
 +
 +Comme j'ai indiqué dans ma configuration de ne conserver que 3 jours de journalisation,​ le plus ancien ( actarus.log-20200319.gz ) a été supprimé lors de la rotation. ​
 + 
 +<​code>​root@srvdebian:​~#​ date
 +lundi 23 mars 2020, 19:15:05 (UTC+0100)
 +root@srvdebian:​~#​ man apt > /​var/​log/​actarus.log
 +root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael
 +root@srvdebian:​~#​ ls -l /var/log | grep actarus
 +-rw-r--r-- 1 root root      0 mars  23 19:15 actarus.log
 +-rw-r--r-- 1 root root  12490 mars  21 19:15 actarus.log-20200321.gz
 +-rw-r--r-- 1 root root  13816 mars  22 19:15 actarus.log-20200322.gz
 +-rw-r--r-- 1 root root   3220 mars  23 19:15 actarus.log-20200323.gz</​code>​
 +
 +
 +===== Vérification des rotations =====
 +
 +il est possible de vérifier la dernière date et heure de rotation des fichiers.
 +
 +<​code>​[root@srvcentos ~]# cat /​var/​lib/​logrotate/​logrotate.status
 +logrotate state -- version 2
 +"/​var/​log/​sssd/​sssd_implicit_files.log"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​dnf.librepo.log"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​sssd/​sssd_nss.log"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​boot.log"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​up2date"​ 2020-3-25-10:​0:​0
 +"/​var/​log/​hawkey.log"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​wtmp"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​chrony/​*.log"​ 2020-3-25-10:​0:​0
 +"/​var/​log/​sssd/​sssd.log"​ 2020-3-25-10:​0:​0
 +"/​var/​log/​spooler"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​btmp"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​maillog"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​secure"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​messages"​ 2020-3-25-10:​22:​59
 +"/​var/​log/​cron"​ 2020-3-25-10:​22:​59
 +</​code>​
 +
 +<​code>​root@srvdebian:​~#​ cat /​var/​lib/​logrotate/​status
 +logrotate state -- version 2
 +"/​var/​log/​syslog"​ 2020-3-23-19:​15:​0
 +"/​var/​log/​dpkg.log"​ 2020-3-8-12:​10:​19
 +"/​var/​log/​auth.log"​ 2020-3-22-19:​15:​0
 +"/​var/​log/​apt/​term.log"​ 2020-3-8-12:​10:​19
 +"/​var/​log/​apt/​history.log"​ 2020-3-8-12:​10:​19
 +"/​var/​log/​alternatives.log"​ 2020-3-23-10:​49:​34
 +"/​var/​log/​debug"​ 2020-3-19-19:​15:​0
 +"/​var/​log/​mail.log"​ 2020-3-19-19:​15:​0
 +"/​var/​log/​kern.log"​ 2020-3-22-19:​15:​0
 +"/​var/​log/​wtmp"​ 2019-9-5-19:​0:​0
 +"/​var/​log/​daemon.log"​ 2020-3-22-19:​15:​0
 +"/​var/​log/​mail.warn"​ 2019-11-9-9:​27:​52
 +"/​var/​log/​btmp"​ 2020-3-8-12:​10:​19
 +"/​var/​log/​lpr.log"​ 2019-9-5-19:​0:​0
 +"/​var/​log/​mail.err"​ 2019-11-9-9:​27:​52
 +"/​var/​log/​actarus.log"​ 2020-3-23-19:​15:​25
 +"/​var/​log/​user.log"​ 2020-3-23-10:​49:​34
 +"/​var/​log/​mail.info"​ 2020-3-19-19:​15:​0
 +"/​var/​log/​cron.log"​ 2019-9-5-19:​0:​0
 +"/​var/​log/​messages"​ 2020-3-22-19:​15:​0
 +</​code>​
 +
 +il est également possible de spécifier un autre fichier d'​état que celui défini par défaut. ​
 +
 +Ici, il sera dans /var/log et se nommera logrotate-AAAA-MM-JJ.
 +
 +<​code>​root@srvdebian:​~#​ logrotate -f /​etc/​logrotate.d/​mickael -s /​var/​log/​logrotate-`date +%F`
 +root@srvdebian:​~#​ ls -lrt /​var/​log/​logrotate*
 +-rw-r--r-- 1 root root 69 mars  23 19:15 /​var/​log/​logrotate-2020-03-23
 +</​code>​

Outils de la page