Table des matières
- Introduction
- Utilisation
- Emplacement des fichiers de configuration
- Analyse de la structure de configuration
- Exemple de fichier de configuration logrotate
- Différences entre CentOS et Ubuntu
- Vérification de l'intervalle de planification logrotate sous CentOS
- Vérification de l'intervalle de planification logrotate sous Ubuntu
Introduction
logrotate est un utilitaire conçu pour la gestion des fichiers journaux, principalement utilisé pour la rotation, la compression, la suppression et les notifications par courriel des journaux. Il est largement déployé dans les environnements Linux et systèmes de type Unix.
- Rotation des journaux : logrotate permet périodiquement de renommer ou de déplacer le fichier journal actuel, et de créer un nouveau fichier journal pour enregistrer les informations ultérieures. Par exemple, il peut transformer access.log en access.log.1 et générer un nouveau access.log.
- Compression des journaux : les fichiers journaux après rotation peuvent être compressés pour économiser de l'espace disque, généralement avec des outils comme gzip ou bzip2.
- Suppression des journaux : selon des règles configurées, les fichiers journaux expirés peuvent être supprimés pour éviter une occupation excessive de l'espace disque.
- Notification par courriel : certaines opérations terminées peuvent déclencher l'envoi d'un courriel à l'administrateur.
- Archivage des journaux : les anciens fichiers journaux peuvent être archivés vers un emplacement spécifique pour faciliter les sauvegadres ou analyses ultérieures.
Utilisation
Emplacement des fichiers de configuration
Un fichier de configuration principal est généralement situé à /etc/logrotate.conf Cependant, les configurations spécifiques à chaque application sont placées dans le répertoire /etc/logrotate.d On peut y écrire des configurations individuelles pour chaque processus, et logrotate lira périodiquement ces fichiers pour exécuter les opérasions configurées
Analyse de la structure de configuration
Voici un exemple :
cat /etc/logrotate.d/nginx
Ce qui donne :
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 www-data adm
sharedscripts
postrotate
/bin/kill -USR1 `cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
- /var/log/nginx/*.log : spécifie le chemin du ou des fichiers journaux à gérer (avec un wildcard)
- daily : rotation quotidienne, logrotate vérifiera ce journal chaque jour et exécutera la rotation si nécessaire
- rotate 7 : conserve jusqu'à 7 fichiers, au huitième cycle, le plus ancien fichier sera supprimé
- compress : active la compression des anciens fichiers
- delaycompress : le fichier actuel n'est pas compressé immédiatement, mais lors de la rotation suivante
- missingok : si le fichier n'existe pas, aucune erreur n'est générée
- notifempty : si le fichier est vide, aucune rotation n'est effectuée
- create 644 www-data adm : après rotation, logrotate crée un nouveau fichier journal vide avec les permissions et propriétés spécifiées
- sharedscripts : le script postrotate n'est exécuté qu'une fois pour tous les fichiers de ce bloc
- postrotate/endscript : bloc de script exécuté après la rotation des journaux
Parmi les autres paramètres disponibles, on trouve :
- weekly : rotation hebdomadaire
- monthly : rotation mensuelle
- size : rotation basée sur la taille, peut être un nombre (octets) ou une valeur avec unités (K, M, G pour kilo, méga, giga-octets)
- copytruncate : copie d'abord le contenu du fichier journal actuel, puis vide le fichier original, plutôt que de le renommer ou le déplacer. Cela évite de perturber les descripteurs de fichiers existants, mais peut affecter les performances et causer une perte de logs lors d'écritures intensives.
- dateext : ajoute une extension de date aux fichiers de rotation
- dateformat -%Y%m%d : format personnalisé pour la date dans le nom des fichiers
Exemple de fichier de configuration logrotate
Création et édition du fichier :
vim /etc/logrotate.d/application_web
Contenu :
/var/log/application/*.log {
weekly
size 100M
rotate 5
compress
delaycompress
missingok
notifempty
copytruncate
dateext
dateformat -%Y%m%d
olddir /var/log/archive/application
minsize 10M
maxsize 1G
}
Cette configuration :
- Vérifie les fichiers /var/log/application/*.log chaque semaine.
- Effectue une rotation lorsque la taille atteint ou dépasse 100M.
- Ajoute une extension de date (format AAAAMMJJ) aux fichiers de rotation.
- Conserve jusqu'à 5 anciens fichiers journaux.
- Compresse les anciens fichiers lors de la rotation suivante.
- Ne génère pas d'erreur si le fichier n'existe pas ou est vide.
- Utilise copytruncate pour vider le fichier original tout en conservant son descripteur de fichier.
- Déplace les anciens journaux vers /var/log/archive/application.
- Ne déclenche la rotation que si le fichier fait au moins 10M (même si la rotation hebdomadaire est due).
- Ne déclenche pas la rotation si le fichier dépasse 1G (même si la rotation hebdomadaire est due).
Différences entre CentOS et Ubuntu
Sous CentOS, l'exécution de logrotate est généralement déclenchée par des tâches cron planifiées. Ubuntu (depuis la version 22.04) utilise systemd-timer pour gérer l'exécution de logrotate. systemd-timer fait partie de systemd et remplace le traditionnel cron pour offrir une gestion de tâches planifiées plus moderne, flexible et précise.
Vérification de l'intervalle de planification logrotate sous CentOS
Vérification du fichier de planification, son existence indique que logrotate est déclenché par cron comme tâche quotidienne :
ls -l /etc/cron.daily/logrotate
On peut vérifier l'heure exacte de la planification cron quotiduellle avec :
crontab -l
Ou directement consulter le fichier :
cat /etc/crontab
On trouve généralement une entrée similaire à :
22 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
Ce qui indique que logrotate s'exécute chaque jour à 2h22 du matin.
Vérification de l'intervalle de planification logrotate sous Ubuntu
Sur Ubuntu 22.04, la planification de logrotate est généralement gérée par systemd-timer. Pour vérifier l'intervalle de planification :
systemctl status logrotate.timer
Ce qui donne un résultat similaire à :
● logrotate.timer - Rotation quotidienne des fichiers journaux
Loaded: loaded (/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2025-05-06 07:15:42 CEST; 1 week 3 days ago
Trigger: Tue 2025-05-13 06:30:00 CEST; 1 day left
Triggers: ● logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)
May 06 07:15:42 ubuntu systemd[1]: Started Rotation quotidienne des fichiers journaux.