Suivant: , Précédent: , Monter: Services   [Table des matières][Index]


11.10.3 Rotation des journaux

Log files such as those found in /var/log tend to grow endlessly, so it’s a good idea to rotate them once in a while—i.e., archive their contents in separate files, possibly compressed. The (gnu services admin) module provides an interface to the log rotation service provided by the Shepherd (voir Log Rotation dans The GNU Shepherd Manual).

This log rotation service is made available through log-rotation-service-type, which takes a log-rotation-configuration record has its value. By default, this provides log-rotation, a Shepherd “timed service” that runs periodically—once a week by default. It automatically knows about the log files produced by Shepherd services and can be taught about external log files. You can inspect the service and see when it’s going to run the usual way:

$ sudo herd status log-rotation
Status of log-rotation:
  It is running since Mon 09 Dec 2024 03:27:47 PM CET (2 days ago).
  …

Upcoming timer alarms:
  Sun 15 Dec 2024 10:00:00 PM CET (in 4 days)
  Sun 22 Dec 2024 10:00:00 PM CET (in 11 days)
  Sun 29 Dec 2024 10:00:00 PM CET (in 18 days)

You can also list files subject to rotation with herd files log-rotation and trigger rotation manually with herd trigger log-rotation.

This service is part of %base-services, and thus enabled by default, with the default settings.

Variable :log-rotation-service-type

This is the type of the log rotation service. Its associated value must be a log-rotation-configuration record, as discussed below.

Data Type :log-rotation-configuration

Available log-rotation-configuration fields are:

provision (default: (log-rotation)) (type: list-of-symbols)

The name(s) of the log rotation Shepherd service.

requirement (default: (user-processes)) (type: list-of-symbols)

Dependencies of the log rotation Shepherd service.

calendar-event (type: gexp)

Gexp containing the calendar event when log rotation occurs. Voir Timers dans The GNU Shepherd Manual, for more information on calendar events.

external-log-files (default: ()) (type: list-of-strings)

List of file names, external log files that should also be rotated.

compression (default: zstd) (type: symbol)

The compression method used for rotated log files, one of 'none, 'gzip, and 'zstd.

expiry (type: gexp-or-integer)

Age in seconds after which a log file is deleted.

size-threshold (type: gexp-or-integer)

Size in bytes below which a log file is not rotated.

Rottlog

An alternative log rotation service relying on GNU Rot[t]log, a log rotation tool (voir GNU Rot[t]log Manual), is also provided.

Attention : The Rottlog service presented here is deprecated in favor of log-rotation-service-type (see above). The rottlog-service-type variable and related tools will be removed after 2025-06-15.

The example below shows how to extend it with an additional rotation, should you need to do that (usually, services that produce log files already take care of that):

(use-modules (guix) (gnu))
(use-service-modules admin)

(define my-log-files
  ;; Journaux que je veux faire tourner.
  '("/var/log/something.log" "/var/log/another.log"))

(operating-system
  ;; …
  (services (cons (simple-service 'rotate-my-stuff
                                  rottlog-service-type
                                  (list (log-rotation
                                         (frequency 'daily)
                                         (files my-log-files))))
                  %base-services)))
Variable :rottlog-service-type

C’est le type du service Rotlog, dont la valeur est un objet rottlog-configuration.

D’autres services peuvent étendre celui-ci avec de nouveaux objets log-rotation (voir plus bas), en augmentant ainsi l’ensemble des fichiers à faire tourner.

Ce type de service peut définir des tâches (voir Exécution de tâches planifiées) pour lancer le service rottlog.

Type de données :rottlog-configuration

Type de données représentant la configuration de rottlog.

rottlog (par défaut : rottlog)

Le paquet Rottlog à utiliser.

rc-file (par défaut : (file-append rottlog "/etc/rc"))

Le fichier de configuration Rottlog à utiliser (voir Mandatory RC Variables dans GNU Rot[t]log Manual).

rotations (par défaut : %default-rotations)

Une liste d’objets log-rotation définis plus bas.

jobs

C’est une liste de gexps où chaque gexp correspond à une spécification de tâche de mcron (voir Exécution de tâches planifiées).

Type de données :log-rotation

Type de données représentant la rotation d’un groupe de fichiers journaux.

En reprenant un exemple du manuel de Rottlog (voir Period Related File Examples dans GNU Rot[t]log Manual), on peut définir la rotation d’un journal de cette manière :

(log-rotation
  (frequency 'daily)
  (files '("/var/log/apache/*"))
  (options '("storedir apache-archives"
             "rotate 6"
             "notifempty"
             "nocompress")))

La liste des champs est la suivante :

frequency (par défaut : 'weekly)

La fréquence de rotation, un symbole.

files

La liste des fichiers ou des motifs de noms de fichiers à faire tourner.

options (par défaut : %default-log-rotation-options)

La liste des options de rottlog pour cette rotation (voir Configuration parameters dans GNU Rot[t]log Manual).

post-rotate (par défaut : #f)

Soit #f, soit une gexp à exécuter une fois la rotation terminée.

Variable :%default-rotations

Spécifie la rotation hebdomadaire de %rotated-files et de /var/log/guix-daemon.log.

Variable :%rotated-files

La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il s’agit de : '("/var/log/messages" "/var/log/secure" "/var/log/debug" \ "/var/log/maillog").

Certains fichiers journaux doivent simplement être supprimés périodiquement quand ils deviennent trop vieux, sans autre critère et sans étape d’archivage. C’est le cas des journaux de construction stockés par guix-daemon dans /var/log/guix/drvs (voir Invoquer guix-daemon). Le service log-cleanup gère ce cas. Par exemple, %base-services (voir Services de base) inclus ce qui suit :

;; Supprime régulièrement les anciens journaux de construction.
(service log-cleanup-service-type
         (log-cleanup-configuration
          (directory "/var/log/guix/drvs")))

Cela s’assure que les journaux de construction ne s’accumulent pas sans fin.

Variable :log-cleanup-service-type

C’est le type du service pour supprimer les anciens journaux. Sa valeur doit être un enregistrement log-cleanup-configuration, décrit ci-dessous.

Type de données :log-cleanup-configuration

Type de données représentant la configuration de nettoyage des journaux

directory

Nom du répertoire contenant les fichiers journaux.

expiry (par défaut : (* 6 30 24 3600))

Âge en secondes après lequel un fichier peut être supprimé (six moins par défaut).

schedule (par défaut : "30 12 01,08,15,22 * *")

Schedule of the log cleanup job written either as a string in traditional cron syntax or as a gexp representing a Shepherd calendar event (voir Timers dans The GNU Shepherd Manual).

Service Anonip

Anonip est un filtre pour la vie privée qui supprime les adresses IP des journaux des serveurs web. Ce service crée une FIFO et filtre toutes les lignes écrite avec anonip avant d’écrire les journaux filtrés dans un fichier cible.

L’exemple suivant configure la FIFO /var/run/anonip/https.access.log et écrit le fichier journal filtré dans /var/log/anonip/https.access.log.

(service anonip-service-type
         (anonip-configuration
           (input  "/var/run/anonip/https.access.log")
           (output "/var/log/anonip/https.access.log")))

Configurez votre serveur web pour écrire ses journaux dans la FIFO /var/run/anonip/https.access.log et récupérez les fichiers journaux anonymisés dans /var/web-logs/https.access.log.

Type de données :anonip-configuration

Ce type de données représente la configuration d’anonip. Il a les paramètres suivants :

anonip (par défaut : anonip)

Le paquet anonip à utiliser.

input

Le nom de fichier du fichier journal d’entrée à traiter. Le service crée une FIFO de ce nom. Le serveur web doit écrire ses journaux dans cette FIFO.

output

Le nom du fichier journal traité.

Les réglages facultatifs suivants peuvent être fournis :

debug?

Print debug messages when #true.

skip-private?

Lorsque la valeur est #true, ne masque pas les adresses dans les plages privées.

column

Un numéro de colonne commençant par 1 pour la première colonne. Suppose que l’adresse IP est dans la colonne donnée (1 par défaut).

replacement

Chaine de remplacement au cas où l’analyse de l’adresse échoue, p. ex. "0.0.0.0".

ipv4mask

Nombre de bits à masquer dans les adresses IPv4.

ipv6mask

Nombre de bits à masquer dans les adresses IPv6.

increment

Incrémente l’adresse IP par le nombre donné. La valeur par défaut est zéro.

delimiter

Chaine de délimitation des journaux.

regex

Expression régulière pour détecter l’adresse IP. À utiliser à la place de column.


Suivant: Configuration du réseau, Précédent: Exécution de tâches planifiées, Monter: Services   [Table des matières][Index]