Logrotate

De Wiki doc


Logrotate est un outil permettant la rotation de journaux d'évènements. Il a pour objectif de limiter la place occupée par ceux-ci en les compressant, puis supprimant périodiquement selon des paramètres définis par l'administrateur. Couplés, à un Rsyslog distant, c'est une bonne solution de gestion de journaux système.

Installation

Ce programme est bien souvent installé par défaut dans les distributions Linux. Sous Debian, il est disponible dans les dépôts.

apt install logrotate

Configuration

Structure des fichiers

Logrotate se base sur des fichiers de configuration présents dans /etc/logrotate.d/ qu'ils parcourras lors d'un rechargement via un systemctl restart logrotate.service. Chaque fichier représente un service et non un journal. Ainsi, une configuration peut contenir plusieurs fichiers de journaux à faire tourner et des paramètres différents pour chacun d'eux (on est pas obliger de faire un fichier de configuration par fichier de journal).

Un fichier de configuration se compose de deux parties:

  • les fichiers à faire tourner
  • les paramètres de rotation

On aura donc une structure comme ceci:

/toto/titi/tutu.log
/toto/tata/toto.log
/titi/toto/tata.log
{
	paramètre1
	paramètre2
	paramètre3
}

Ces sections peuvent êtres présentes plusieurs fois dans un même fichier de configuration afin d'appliquer des paramètres différents à des ensembles de fichiers différents. Par exemple, la configuration du service Rsyslog située dans /etc/logrotate.d/rsyslog se compose de deux ensembles de paramètres distincts:

/var/log/syslog
{
	rotate 7
	daily
	missingok
	notifempty
	delaycompress
	compress
	postrotate
		/usr/lib/rsyslog/rsyslog-rotate
	endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
	rotate 4
	weekly
	missingok
	notifempty
	compress
	delaycompress
	sharedscripts
	postrotate
		/usr/lib/rsyslog/rsyslog-rotate
	endscript
}

Il existe un grand nombre d'options et les retracer ici serai bien trop volumineux. Je vous renvois à la page de manuel dédiée afin de sélectionner les paramètres qui peuvent répondre à vos besoins. En l'absence d'exigence particulière, vous pouvez toujours copier et adapter les fichiers déjà présents avec le paquet comme par exemple celui de DPKG (/etc/logrotate.d/dpkg). Celui-ci à l'avantage d'être simple à appréhender et conviendra à une configuration basique d'un service comme Traefik:

/var/log/dpkg.log {
	monthly
	rotate 12
	compress
	delaycompress
	missingok
	notifempty
	create 644 root root
}

Caractéristiques de rotation

Le résultat du travail de Logrotate est visualisable dans le même répertoire que le journal à faire tourner et se présente sous forme d'un ensemble de fichiers compressés ou non (en fonction de vos règles) par rotation et par journal. Pour reprendre l'exemple de DPKG, nous aurons pour le mois en cours, le journal standard du système sans aucune action de rotation: /var/log/dpkg.log. Le mois suivant, ce journal se retrouve déplacé sous le nom de (/var/log/dpkg.log.1) et le prochain évennement recréra le /var/log/dpkg.log (ce qui permet d'avoir un noueau fichier pour le nouveau mois en cours). Le mois d'après, le fichier /var/log/dpkg.log.1 sera compressé en /var/log/dpkg.log.2.gz, /var/log/dpkg.log deviendra /var/log/dpkg.log.1 et un nouveau /var/log/dpkg.log sera créé au prochain évennement. Tout ceci sera reproduit jusqu'à la limite fixée par le paramètre rotate qui supprimera alors les fichiers trop anciens à chaque rotation. Un ls -t /var/log/dpkg.log* nous denera donc:

/var/log/dpkg.log
/var/log/dpkg.log.1
/var/log/dpkg.log.2.gz
/var/log/dpkg.log.3.gz
/var/log/dpkg.log.4.gz
/var/log/dpkg.log.5.gz
/var/log/dpkg.log.6.gz
/var/log/dpkg.log.7.gz
/var/log/dpkg.log.8.gz
/var/log/dpkg.log.9.gz
/var/log/dpkg.log.10.gz
/var/log/dpkg.log.11.gz
/var/log/dpkg.log.12.gz