Outils pour utilisateurs

Outils du site


sysadmin:linux:logs:rotation-des-logs-via-logrotate

Ceci est une ancienne révision du document !


logrotate: rotation des fichiers logs

Principal intérêt de logrotate: limiter l'accroissement à l'infini de la taille des fichiers logs.

Pour chaque fichier journal logrotate agit en 2 étapes:

  1. rotation: archive le fichier de log et supprime les anciennes versions.
  2. compression: si définit, compression du fichier ar
L'opération de compression diminue l'occupation disque mais accroît les opérations d'I/O et l'usure disque ainsi que la consommation d’énergie.

Principales directives

daily,weekly,monthly Périodicité de rotation du fichier de log
rotate n Conserve n rotations
create nnnn user group Création d'un fichier vide après rotation avec les droits d'accès spécifiés ici.
compress, nocompress L' archive du log sera compressée ou pas.
delaycompress Si la compression est active, elle a lieu lors de la prochaine rotation.
missingok N’arrête pas le processus et poursuit avec le fichier de log suivant.
notifempty Pas de rotation si le fichier de log est vide.
size Définir une taille limite déclenchant la rotation. Cette directive est prioritaire sur la périodicité de rotation.
prerotate/endscript Actions/commandes a exécuter avant rotation.
postrotate/endscript Actions/commandes a exécuter après rotation.
sharedscripts Les scripts pre/postrotate sont exécutés une seule fois pour le fichier log considéré et non pas à chaque rotation.
su user group

Syntaxe

Les directives sont groupées entre crochets { } et s'appliquent sur un ou plusieurs fichiers journaux:

/path/to/file-1.log
{
  directive 1
  directive 2
  ...
  directive n
}

/path/to/file-2.log
/path/to/file-3.log
...
/path/to/file-n.log
{
  directive 1
  directive 2
  ...
  directive n
}

Contrôle des rotations

logrotate trace ses actions dans le fichiers /var/lib/logrotate/status le fichier texte indique pour chaque entrée le nom du fichier de log et le timestamp de la dernière altération.

Pour lancer manuellement logrotate

logrotate --verbose -f /etc/logrotate.conf

Pour déboguer/vérifier le bon fonctionnement la configuration courante:

logrotate -d /etc/logrotate.conf

Sécurité et droits d'accès

Par sécurité logrotate interrompt le processus de rotation si les droits d'écritures sur le répertoire contenant les logs ne sont pas limités au groupe root. L'erreur est clairement remontée lors de l’exécution de logrotate avec l'option debug:

error: skipping "/path/to/log/file.log" because parent directory has insecure permissions (It'
s world writable or writable by group which is not "root") Set "su" directive in config file to tell
 logrotate which user/group should be used for rotation.

Si un groupe autre que root a le droit d’écriture sur le dossier contenant le fichier log, il doit être précisé dans la configuration de logrotate via la directive su afin que la rotation puisse s’effectuer.

# Exemple de rotation de fichiers de logs
# contenus dans un dossier ayant pour proprietaire www-data 

/srv/appweb/log/access.log
/srv/appweb/log/error.log
/srv/appweb/log/php_error.log
{
  su www-data www-data
  weekly
  rotate 4
  nocompress
  missingok
  create 0640 www-data www-data
}

Dépannages

Apache n’écrit pas dans le nouveau fichier de log

La rotation des logs de l'hôte virtuel apache s'est bien exécutée mais apache continue à écrire dans le fichier précédent xxx.log.1 au lieu d'utiliser xxx.log

Dans ce cas, utiliser la directive postrotate/endscript pour recharger la configuration apache après rotation:

postrotate
/usr/sbin/apache2ctl -k graceful
endscript

Références

sysadmin/linux/logs/rotation-des-logs-via-logrotate.1571911782.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)