Logrotate

De Wiki doc

Version datée du 13 juillet 2020 à 10:09 par Ycharbi (discussion | contributions) (Page créée avec « Category:service_journalisation ''Logrotate'' est un outil permettant la rotation de journaux d'évènements. Il a pour objectif de limiter la place occupée par ceux... »)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)


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 <source lang="bash" inline>/etc/logrotate.d/</source> qu'ils parcourras lors d'un rechargement via un <source lang="bash" inline>systemctl restart logrotate.service</source>. 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:

<source lang="bash"> /toto/titi/tutu.log /toto/tata/toto.log /titi/toto/tata.log { paramètre1 paramètre2 paramètre3 } </source>

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 <source lang="bash" inline>/etc/logrotate.d/rsyslog</source> se compose de deux ensembles de paramètres distincts:

<source lang="bash"> /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 } </source>

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 (<source lang="bash" inline>/etc/logrotate.d/dpkg</source>). Celui-ci à l'avantage d'être simple à appréhender et conviendra à une configuration basique d'un service comme Traefik:

<source lang="bash"> /var/log/dpkg.log { monthly rotate 12 compress delaycompress missingok notifempty create 644 root root } </source>

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: <source lang="bash" inline>/var/log/dpkg.log</source>. Le mois suivant, ce journal se retrouve déplacé sous le nom de (<source lang="bash" inline>/var/log/dpkg.log.1</source>) et le prochain évennement recréra le <source lang="bash" inline>/var/log/dpkg.log</source> (ce qui permet d'avoir un noueau fichier pour le nouveau mois en cours). Le mois d'après, le fichier <source lang="bash" inline>/var/log/dpkg.log.1</source> sera compressé en <source lang="bash" inline>/var/log/dpkg.log.2.gz</source>, <source lang="bash" inline>/var/log/dpkg.log</source> deviendra <source lang="bash" inline>/var/log/dpkg.log.1</source> et un nouveau <source lang="bash" inline>/var/log/dpkg.log</source> sera créé au prochain évennement. Tout ceci sera reproduit jusqu'à la limite fixée par le paramètre <source lang="bash" inline>rotate</source> qui supprimera alors les fichiers trop anciens à chaque rotation. Un <source lang="bash" inline>ls -t /var/log/dpkg.log*</source> nous denera donc:

<source lang="bash"> /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 </source>