Gestion des logs avec Logrotate

Comment configurer Logrotate pour gérer les journaux système et applicatifs.

Lorsque vous travaillez avec des VPS ou des serveurs dédiés, le suivi des événements et des erreurs est indispensable pour le monitoring et le diagnostic. Les fichiers de logs volumineux posent de véritables problèmes : ils sont difficiles à analyser, consomment du CPU et de la mémoire, et peuvent provoquer des pannes applicatives lorsque le disque est plein.

Logrotate résout ce problème en archivant automatiquement les logs en cours et en créant de nouveaux fichiers pour les données entrantes.

Vérifier l'installation

Logrotate est préinstallé sur la plupart des distributions Linux et s'exécute automatiquement via le planificateur cron. Pour vérifier la version :

logrotate --version

Exemple de sortie :

logrotate 3.21.0
    Default mail command: /usr/bin/mail
    Default compress command: /bin/gzip
    Default uncompress command: /bin/gunzip
    Default compress extension: .gz
    Default state file path: /var/lib/logrotate/status
    ACL support: yes
    SELinux support: yes

La sortie indique quels outils Logrotate utilise pour la compression et les notifications, ainsi que le chemin vers le fichier d'état qui enregistre l'historique des rotations.

Structure de la configuration

Logrotate repose sur une structure de configuration hiérarchique. Les paramètres globaux sont définis dans /etc/logrotate.conf, tandis que les paramètres par application se trouvent dans /etc/logrotate.d/.

Exemple de /etc/logrotate.conf sur Ubuntu :

# rotate log files weekly
weekly

# use the adm group by default
su root adm

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
#dateext

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

Paramètres clés :

  • weekly — les logs sont tournés une fois par semaine.
  • create — un nouveau fichier de log vide est créé après la rotation.
  • rotate 4 — quatre copies archivées sont conservées.
  • su root adm — la rotation s'exécute en tant qu'utilisateur root et groupe adm, ce qui évite les problèmes de permissions sur les logs système.
  • compress — compression des archives (désactivée par défaut).
  • include /etc/logrotate.d — charge les fichiers de configuration par application.

Pour la liste complète des directives :

man logrotate

Configuration par application

Les fichiers dans /etc/logrotate.d/ suivent la même structure que la configuration globale, mais ne s'appliquent qu'à des logs spécifiques. Les paramètres de ces fichiers écrasent les valeurs globales de /etc/logrotate.conf. Si une directive n'est pas spécifiée dans la configuration de l'application, la valeur globale est utilisée.

Exemple de /etc/logrotate.d/nginx :

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
}

Si /etc/logrotate.conf définit rotate 4 et qu'une configuration d'application ne définit pas rotate, les logs de cette application conserveront tout de même quatre copies archivées.

Fréquence de rotation

Par défaut, Logrotate utilise une approche temporelle : les logs sont tournés selon un calendrier fixe. Intervalles pris en charge : hourly, daily, weekly, monthly, yearly.

Logrotate s'exécute généralement une fois par jour via /etc/cron.daily/logrotate. Pour activer la rotation horaire, déplacez la tâche vers cron.hourly :

sudo mv /etc/cron.daily/logrotate /etc/cron.hourly

Pour des exécutions encore plus fréquentes, configurez une tâche cron personnalisée.

Rotation par taille

Pour les services dont le volume de logs est imprévisible, la rotation peut être déclenchée par la taille du fichier plutôt que par un calendrier.

size — rotation uniquement lorsque le fichier atteint la taille spécifiée, indépendamment du calendrier :

/var/log/app/*.log {
    size 50M
}

size et les directives temporelles sont mutuellement exclusives — c'est toujours la dernière option indiquée qui s'applique. Si daily apparaît après size, les logs tourneront quotidiennement et le seuil de taille sera ignoré.

minsize — rotation selon le calendrier, mais uniquement si le fichier a atteint la taille minimale :

/var/log/app/*.log {
    daily
    minsize 50M
}

maxsize — rotation immédiate dès que le fichier dépasse la limite de taille, même si l'heure planifiée n'est pas encore atteinte :

/var/log/app/*.log {
    daily
    maxsize 50M
}

Les tailles peuvent être spécifiées en octets (par défaut), kilo-octets (k), mégaoctets (M) ou gigaoctets (G).

Méthodes de rotation

Logrotate prend en charge deux méthodes principales pour gérer les fichiers de logs actifs.

create (par défaut) — renomme le fichier actif (app.logapp.log.1) et crée un nouveau fichier vide avec le nom d'origine. C'est la méthode recommandée, qui minimise le risque de perte de données de logs :

/var/log/app/*.log {
    create
    # create 644 appuser group — définir optionnellement les permissions, le propriétaire et le groupe
}

copytruncate — copie le contenu du fichier courant dans une archive, puis vide l'original. Permet aux applications de continuer à écrire dans le même descripteur de fichier. Recommandé uniquement pour les applications legacy qui ne peuvent pas rouvrir les fichiers de logs après rotation :

/var/log/app/*.log {
    copytruncate
}

Nommage des fichiers d'archive

Par défaut, les fichiers tournés reçoivent des numéros séquentiels : app.log.1, app.log.2, etc. Pour ajouter des horodatages, utilisez dateext :

/var/log/app/*.log {
    dateext
    # par défaut : -%Y%m%d pour daily, -%Y%m%d%H pour hourly
}

Un log tourné le 25 juin 2025 sera nommé app.log-20250625.

Pour les logs tournés plusieurs fois par jour, utilisez un timestamp Unix pour garantir l'unicité :

/var/log/app/*.log {
    dateformat -%Y%m%d-%s
}

La directive dateyesterday horodate le fichier avec la date de la veille — utile lorsque la rotation a lieu après minuit mais que les données appartiennent au jour précédent.

Compression

La directive compress active la compression gzip :

/var/log/app/*.log {
    compress
}

Pour utiliser un outil de compression différent :

/var/log/app/*.log {
    compress
    compresscmd /usr/bin/bzip2
    uncompresscmd /usr/bin/bunzip2
    compressext .bz2
}

delaycompress empêche la compression immédiate du fichier le plus récemment tourné — utile lorsqu'une application continue d'écrire dans l'ancien fichier après la rotation :

/var/log/app/*.log {
    compress
    delaycompress
}

compressoptions définit le niveau de compression gzip de -1 (rapide, faible compression) à -9 (lent, compression maximale) :

/var/log/app/*.log {
    compress
    compressoptions -9
}

Dépannage

Le fichier d'état de Logrotate indique la date de la dernière rotation de chaque fichier de log :

sudo cat /var/lib/logrotate/status

Pour une analyse détaillée, exécutez Logrotate en mode debug :

sudo logrotate --debug /etc/logrotate.conf

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