Installation de Logrotate sous Linux
Comment installer de Logrotate sous Linux
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
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
/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
Voici un exemple de contenu où invoke-rc.d rsyslog rotate > /dev/null où invoke-rc.d est une commande Debian/Ubuntu qui invoque les scripts d'initialisation des services. On envoie ici l'action rotate au service rsyslog pour que rsyslog ferme et réouvre ses fichiers de logs.
> /dev/null redirige la sortie standard vers /dev/null, ce qui supprime l'affichage des messages de succès ou d'information
Le reste est détaillé plus bas.
/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
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
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
A ce niveau sous Almalinux dans la balise postrotate on aurait aussi pu trouver ce qui est ci-dessous où
killall est une commande qui envoie un signal SIGHUP (Hangup) qui demande au processus rsyslog de se recharger.
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
Lien vers le fichier : cliquez ici
Le contrôle de l'heure de la dernière rotation d'un fichier se fait avec la commande
cat /var/lib/logrotate/logrotate.status
Lien vers le fichier : cliquez ici
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.
Pour revenir sur les 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
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
On peut voir quand a eu lieu le dernier déclenchement avec
cat /var/lib/logrotate/logrotate.status
Lien vers le fichier : cliquez ici
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
On peut forcer une exécution de logrotate sur une conf donnée. Exemple si on avait logstash
logrotate -f -v /etc/logrotate.d/logstash
Lien vers le fichier : cliquez ici
Vouz pouvez forcer la programmation de l'exécution de logrotate avec crontab
crontab -e
Lien vers le fichier : cliquez ici
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
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
De même, si vous voulez compresser tous les fichiers autres que .gz de plus de 8 jours de l'ensemble du répertoire /logstash (par exemple), vous pouvez faire
find /logstash -type f -name "*" -mtime +8 ! -name "*.gz" -exec gzip -f {} \;
Lien vers le fichier : cliquez ici
Pages Web
| Site Web | Description |
|---|---|
| Doc.ubuntu-fr.org | Fiche de Logrotate sur doc.ubuntu-fr.org |
Article(s) précédent(s)