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ées
  • monthly — effectuer la rotation une fois par mois
  • compress — compresser les anciens logs avec gzip
  • missingok — ne pas générer d'erreur si le fichier journal est absent
  • notifempty — 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 permissions 0640, propriétaire et groupe www-data
  • sharedscripts — le script postrotate n'est exécuté qu'une seule fois après le traitement de tous les fichiers, et non pour chaque fichier séparément
  • postrotate ... 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

Hébergement webFonctionne sur des disques NVMe ultra-rapides. Convient aux sites de toute complexité.
Commande
VPSInfrastructure cloud flexible avec accès root complet.
Commande
Serveurs dédiésServeurs physiques pour une performance maximale.
Commande

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 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 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 --debug avant de les appliquer.
  • Utilisez la directive create pour 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 666 ou 777 aux 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 !

Besoin d’aide?Nos ingénieurs vous aideront gratuitement pour n’importe quelle question en quelques minutesNous contacter