Logrotate est un logiciel pré-installé dans la plupart des distributions Linux, qui permet de gérer la sauvegarde et l'organisation à long terme des fichiers journaux.
Les applications du système enregistrent souvent un journal des opérations ou des problèmes de disque. S'ils ne sont pas supprimés périodiquement, ces fichiers peuvent grossir, remplir le disque et provoquer des dysfonctionnements.
Logrotate est la solution la plus courante pour vérifier périodiquement les fichiers journaux et gérer automatiquement leur rotation, leur compression et leur élimination lorsqu'une certaine taille et/ou un certain âge est dépassé.
Configurations de base
Logrotate permet de définir quelques paramètres de base qui seront utilisés par toutes les configurations ultérieures du fichier dans le chemin /etc/logrotate.conf :
# Set a weekly rotation
weekly
# Set the number of rotations to save
rotate 4
# make new log file
create
# Include all configurations files
include /etc/logrotate.d
Dans cet extrait de logrotate.conf, outre l'application de tous les paramètres décrits ci-dessus, la lecture de toutes les configurations présentes dans le répertoire /etc/logrotate.d est également recommandée. Ce faisant, vous pouvez diviser chaque configuration par application et/ou contexte.
Les configurations de Logrotate définissent un ensemble de règles pour 1 ou plusieurs fichiers :
[FILE] [FILE?] [FILE?] {
[SETTINGS]
}
Un exemple classique est celui de la configuration de /var/log/messages :
/var/log/messages {
# Save 5 rotations
rotate 5
# Rotating files every week
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Dans l'exemple ci-dessus, seul le fichier message est pris en compte. . et sa rotation est fixée chaque semaine, p à un maximum de 5. Ainsi, à la fin de la cinquième rotation, les fichiers journaux :
-rw-r----- 1 root adm 1215 Jul 29 06:47 messages
-rw-r----- 1 root adm 3895 Jul 28 06:49 messages.1
-rw-r----- 1 root adm 454 Jul 21 06:37 messages.2.gz
-rw-r----- 1 root adm 506 Jul 15 06:40 messages.3.gz
-rw-r----- 1 root adm 456 Jul 7 06:41 messages.4.gz
Certains des paramètres les plus importants sont :
quotidien, mensuel, hebdomadaire, annuel :indique la fréquence de rotation du fichier journal
compress, nocompress :s'il faut ou non compresser les anciennes rotations de fichiers
maxage :après combien de jours les anciennes rotations sont éliminées
taille :définit la rotation uniquement si les fichiers indiqués sont plus grands que la taille spécifiée. Des suffixes peuvent être utilisés pour indiquer le format de taille (par exemple "k" pour kilooctets, "M" pour mégaoctets)
rotate :nombre de journaux en rotation qui doivent être enregistrés avant d'être définitivement supprimés. S'il est défini sur 0, les fichiers journaux seront effacés sans rotation.
Si vous souhaitez définir les mêmes règles pour plusieurs fichiers, vous pouvez ajouter plusieurs chemins en les séparant par une virgule. Par exemple :
/var/log/custom_log, /var/log/alternative_log_file, /var/log/another_log {
…
}
Cette configuration sera utilisée pour le fichier custom_log, alternative_log_file et another_log.
Vous pouvez également utiliser des masques de fichiers tels que :
/var/custom/logs/*, /var/log/custom_log {
# This configuration will rotate all the files in the directory.
# /var/custom/logs/* e il file /var/log/custom_log
...
}
Utiliser le paramètre dateext
Le paramètre dateext vous permet d'ajouter la date de rotation au nom du fichier, afin que les données des journaux puissent être facilement reconnues.
/var/log/custom.log {
size 100M
dateext
rotate 3
compress
maxage 100
}
La configuration indiquée ci-dessus archivera le fichier custom.log dès qu'il atteindra 100M, jusqu'à un maximum de 3 fois ou après 100 jours. Grâce à l'option de compression, le fichier archivé sera également compressé au format gzip.
Une fois la rotation effectuée, les noms de fichiers auront la date de rotation indiquée ci-dessous :
# ls /var/log
-rw-r--r-- 1 user user 8980 2019-06-09 22:10 custom.log-20180609.gz
-rwxrwxrwx 1 user user 0 2019-06-09 22:11 custom.log
Journaux d'e-mail
Logrotate vous permet d'exécuter des scripts personnalisés lorsque certains événements se produisent, comme après chaque rotation de journal, en utilisant les mots-clés postrotate / endscript.
Une utilisation possible pourrait être d'envoyer les journaux par e-mail à la fin de la rotation. Pour continuer, commencez par créer un script pour envoyer les fichiers à votre adresse e-mail :
#!/bin/bash
# Get all logs
tar -cvf /tmp/logpack.tar /var/log/messages*
# Send logs as attachment
echo "Log" | mail -s "log" [email protected] -A /tmp/logpack.tar
Enregistrez le fichier ci-dessus dans votre répertoire personnel, par exemple /home/map.com username_s//endend.sh et assurez-vous d'activer les autorisations nécessaires via :
# sudo chmod u+x /home/user/sendlog.sh
Maintenant, modifiez le fichier de configuration logrotate comme suit :
/var/log/messages {
...
postrotate
…
/home/user/sendlog.sh
endscript
}
Enregistrer la configuration pour appliquer les modifications.
Une fois terminé, vous recevrez un e-mail avec l'archive de journal décrite ci-dessus à chaque rotation de journal.