Gestion des journaux avec Logrotate sur Debian
Comment configurer correctement la rotation des logs pour garder votre système propre et éviter le débordement du disque.
Logrotate est l'un des outils indispensables pour l'administration système Linux. Il effectue automatiquement la rotation, la compression et la suppression des anciens fichiers journaux, vous aidant à maintenir l'ordre dans le système et à éviter que les logs ne saturent votre espace disque. Que vous gériez des serveurs privés virtuels ou des serveurs dédiés, une configuration correcte de la rotation des journaux garantit la stabilité et la prévisibilité de vos services.
Sur Debian 9 et les versions ultérieures, logrotate est installé par défaut et déjà configuré pour la plupart des services système.
Vérifier l'installation
logrotate --version
Sortie attendue :
logrotate 3.11.0
Structure de la configuration
Logrotate utilise deux emplacements principaux :
/etc/logrotate.conf— fichier de configuration principal avec les paramètres globaux par défaut/etc/logrotate.d/— répertoire contenant les fichiers de configuration individuels pour les services et applications spécifiques
Exemple de configuration pour APT (situé dans /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
}
Le fichier contient deux blocs — pour term.log et history.log. Tout paramètre non spécifié dans un bloc est hérité de /etc/logrotate.conf.
Description des directives :
rotate 12— conserver 12 copies archivéesmonthly— effectuer la rotation une fois par moiscompress— compresser les anciens logs avec gzipmissingok— ne pas générer d'erreur si le fichier journal est absentnotifempty— ignorer la rotation si le journal est vide
Méthode 1 : configuration standard (recommandée)
C'est la meilleure approche pour la plupart des cas. Les fichiers de configuration sont placés dans /etc/logrotate.d/ et exécutés quotidiennement par cron.
Exemple : créer une configuration pour une application personnalisée qui écrit ses logs dans /var/log/example-app/ :
sudo nano /etc/logrotate.d/example-app
/var/log/example-app/*.log {
daily
rotate 14
compress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Description des directives :
create 0640 www-data www-data— crée un nouveau fichier journal après la rotation avec les permissions0640, propriétaire et groupewww-datasharedscripts— le scriptpostrotaten'est exécuté qu'une seule fois après le traitement de tous les fichiers, et non pour chaque fichier séparémentpostrotate ... endscript— bloc de commandes exécutées après la rotation ; dans l'exemple, l'application est rechargée
Après la configuration, vérifiez les paramètres en mode debug :
sudo logrotate /etc/logrotate.conf --debug
La commande affiche des informations détaillées sur les fichiers traités par logrotate, sans appliquer réellement les modifications.
Nos produits et services
Méthode 2 : configuration personnalisée avec Cron (pour les planifications non standard)
Utilisez cette méthode si vous avez besoin d'une rotation horaire ou souhaitez gérer les logs d'un utilisateur spécifique.
Supposons que l'application s'exécute sous l'utilisateur testing et écrit ses logs dans /home/testing/logs/. Créez un fichier de configuration :
nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
hourly
rotate 24
compress
missingok
create
}
Fichier de configuration logrotate
Cette configuration effectue la rotation des fichiers toutes les heures, conserve 24 copies archivées et crée un nouveau fichier journal après chaque rotation.
Créez un fichier journal de test :
cd ~
mkdir logs
touch logs/access.log
Lancez logrotate manuellement en spécifiant le fichier d'état :
logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force
Sortie :
reading config file /home/testing/logrotate.conf
Handling 1 logs
rotating pattern: /home/testing/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
log does not need rotating
--state— indique où stocker les informations sur la dernière rotation.--verbose— affiche un journal d'exécution détaillé.--force— force la rotation même si elle n'est pas encore nécessaire selon le planning.
Vérifiez le contenu du fichier d'état :
cat /home/testing/logrotate-state
Logrotate enregistre dans ce fichier quand et quels journaux ont été traités pour la dernière fois.
Automatisation via Cron
Pour que la rotation s'exécute automatiquement toutes les heures, ajoutez une tâche cron :
crontab -e
Ajoutez la ligne suivante à la fin du fichier :
14 * * * * /usr/sbin/logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state
Tâche cron pour logrotate
La tâche s'exécutera à la 14e minute de chaque heure, tous les jours.
Conseils utiles
- Testez toujours les modifications de configuration avec
--debugavant de les appliquer. - Utilisez la directive
createpour garantir les permissions correctes sur les nouveaux fichiers journaux. - Pour les services à fort trafic, envisagez des périodes de rotation plus courtes et la compression.
- N'attribuez jamais les permissions
666ou777aux fichiers journaux ou aux répertoires — cela crée de sérieux risques de sécurité.
Aide
Une question ou besoin d'un coup de main ? Écrivez-nous via le système de tickets — nous sommes toujours là pour vous aider !