TUTOS.EU

Installation de Logrotate sous Linux

Comment installer de Logrotate sous Linux

Pour installer logrotate, tapez

sudo apt-get install logrotate
Lien vers le fichier : cliquez ici Copier le code

Dans le cas ci-dessous il est déjà en place :

Si vous tapez 'logrotate', vous devriez voir ce type d'écran :

logrotate
Lien vers le fichier : cliquez ici Copier le code

Le fichier de config de 'base' est /etc/logrotate.conf

Par défaut sous mon Ubuntu V14 la config donne ceci :

# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here
Lien vers le fichier : cliquez ici Copier le code

/var/log/wtmp correspond à l'archivage du fichier wtmp qui enregistre toutes les connexions et déconnexions.

/var/log/btmp est semblable à wtmp. Il  affiche les connexions/déconnexions au système.

 

Il y a surtout la prise en compte de tous les fichiers de configuration situés dans /etc/logrotate.d

avec la ligne include /etc/logrotate.d

On y trouve un fichier de configuration par service

Exemple avec rsyslog. rsyslog prend en charge la rotation de plusieurs logs, dont
/var/log/syslog et /var/log/messages

Donc, si vous voulez modifier la rotation du fichier /var/log/messages

Il ne faut pas modifier la configuration de /etc/logrotate.conf

mais celle de /etc/logrotate.d/rsyslog

 

Imaginons que vous voulez mettre en place une rotation pour le fichier /var/log/iptables.log

alors une solution propre est de créer un fichier /etc/logrotate.d/iptables

 

Pour cela taper

sudo nano /etc/logrotate.d/iptables
Lien vers le fichier : cliquez ici Copier le code

Voici un exemple de contenu

/var/log/iptables.log
{
        rotate 7
        daily
        compress
        delaycompress
        missingok
        notifempty
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}
Lien vers le fichier : cliquez ici Copier le code

Autre exemple pour Tomcat

/var/log/tomcat/catalina.out {
        daily
        rotate 7
        size=1M
        notifempty
        missingok
        copytruncate
        compress
}

/opt/tomcat/logs/*.log {
        daily
        missingok
        copytruncate
        rotate 7
        missingok
        compress
}
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez faire une config pour plusieurs fichiers. Exemple sur un AlmaLinux dans un fichier /etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
Lien vers le fichier : cliquez ici Copier le code

A ce niveau sous Almalinux dans la balise postrotate on aurait aussi pu trouver

postrotate
    /usr/bin/killall -HUP rsyslogd
endscript
Lien vers le fichier : cliquez ici Copier le code

Le contrôle de l'heure de la dernière rotation d'un fichier se fait avec la commande

cat /var/lib/logrotate/status
Lien vers le fichier : cliquez ici Copier le code

Explications des paramètres

On trouve le détail de différents paramètres sur des sites comme https://linux.die.net/man/8/logrotate

 

  • /var/log/iptables.log est le fichier est traiter
  • rotate 7 veut dire qu'à chaque rotation, on conserve 7 jours
  • daily veut dire que l'on fait une rotation par jour
  • compress permet de compresser le fichier au format gzip
  • delaycompress retarde le processus de compression jusqu'à la prochaine rotation
  • missingok ne bloque pas le processus si une erreur est rencontrée
  • notifempty ne fait pas de rotation si le fichier est vide
  • nocompress pour ne pas compresser le fichier
  • size 100M pour limiter la taille du fichier à 100Mb
  • dateext ajoute la date en tant que suffixe pour les archives au lieu d'un chiffre
  • postrotate et endscript : entre ces 2 mots clés, mettre un exécutable ou script à jouer comme invoke-rc.d
  • sharedscripts : A l'inverse su paramètre par défaut qui est nosharedscripts, mettez ce paramètre si vous déclaré un script à jouer dans prerotate ou postrotate et que ce script ne doit s'appliquer qu'une fois pour tous les logs.

 

Au sujet du ou des scripts joués dans une balise type postrotate :

invoke-rc.d est une ancienne commande sous Debian/Ubuntu pour exécuter des actions de scripts d'initialisation pour Système V, cependant Système V a été remplacé par systemd.

aussi la commande invoke-rc.d rsyslog rotate > /dev/null

force rsyslog à réouvrir les fichiers qu'il utilise pour écrire les logs.

 

Avec systemctl (et c'est ma solution préférée) on pourrait faire une commande du type

/usr/bin/systemctl reload rsyslog.service > /dev/null

  • /dev/null permet d'ignorer les erreurs éventuelles

 

Après on tombe sur d'autres choses. Sous une distribution type redhat, la documentation indique

/usr/bin/killall -HUP syslogd

 

killall -HUP demande à syslogd de recharger sa configuration (vu sur ce forum). HUP (Hang Up) est un type de signal souvent utilisé pour demander à un processus de recharger sa configuration.

 

Vous pouvez aussi voir cette commande plus complexe qui mène globalement au même résultat :

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

  • /bin/kill -HUP va envoyer un signal HUP (Hang Up) à un numéro de process
  • cat /var/run/syslogd.pid donne le numéro de process / pid
  • 2> /dev/null redirige les erreurs (stderr) vers /dev/null pour ignorer les erreurs éventuelles
  • || true permet de ne pas arrêter le script même en cas d'erreur

 

 

 

Prise en compte des modifications

Logrotate n'est pas un service. Il utilise crontab.
Aussi il n'y a rien à faire pour prendre en compte des modifications.

Par défaut un schedule journalié doit exister sous /etc/cron.daily
On peut le voir avec

cat /etc/cron.daily/logrotate
Lien vers le fichier : cliquez ici Copier le code

Son contenu est

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Lien vers le fichier : cliquez ici Copier le code

Si vous voulez des déclenchements particuliers, il faut les programmer. Exemple pour un déclenchement tous les jours à 14H :

0 2 * * * root /usr/sbin/logrotate /etc/custom-logrotate.conf
Lien vers le fichier : cliquez ici Copier le code

On peut voir quand a eu lieu le dernier déclenchement avec

cat /var/lib/logrotate/logrotate.status
Lien vers le fichier : cliquez ici Copier le code

Le journal de cron se visualise avec

more /var/log/cron
Lien vers le fichier : cliquez ici Copier le code

On peut forcer une exécution de logrotate et de sa conf avec

sudo logrotate /etc/logrotate.conf --verbose --force
Lien vers le fichier : cliquez ici Copier le code

Vouz pouvez forcer la programmation de l'exécution de logrotate avec crontab

crontab -e
Lien vers le fichier : cliquez ici Copier le code

Pour l'exécuter tous les jours à 00:05 par exemple, ajoutez

5 0 * * * /usr/sbin/logrotate /etc/logrotate.conf
Lien vers le fichier : cliquez ici Copier le code

Notez que si vous voulez juste supprimer les fichiers de plus de x jours, ce n'est pas logrotate qu'il faut utiliser mais find. Exemple pour supprimer les fichiers de plus de 1 an dans /opt/kafka/log sans aller au delà des sous répertoires

find /opt/kafka/logs/ -maxdepth 1 -mtime +360 -delete
Lien vers le fichier : cliquez ici Copier le code

Pages Web

Site WebDescription
Doc.ubuntu-fr.orgFiche de Logrotate sur doc.ubuntu-fr.org

Article(s) précédent(s)

2