Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


11.10.3 Log-Rotation

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 (siehe Log Rotation in 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. Siehe Timers in 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 (siehe GNU Rot[t]log Manual), is also provided.

Warnung: 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
  ;; Log-Dateien, die ich rotieren lassen will.
  '("/var/log/irgendein.log" "/var/log/noch-ein.log"))

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

Dies ist der Typ des Rottlog-Dienstes, dessen Wert ein rottlog-configuration-Objekt ist.

Andere Dienste können diesen Dienst um neue log-rotation-Objekte erweitern (siehe unten), wodurch die Auswahl an zu rotierenden Dateien ausgeweitet wird.

Dieser Diensttyp kann mcron-Aufträge definieren (siehe Geplante Auftragsausführung), die den rottlog-Dienst ausführen.

Datentyp: rottlog-configuration

Datentyp, der die Konfiguration von rottlog repräsentiert.

rottlog (Vorgabe: rottlog)

Das Rottlog-Paket, das verwendet werden soll.

rc-file (Vorgabe: (file-append rottlog "/etc/rc"))

Die zu benutzende Rottlog-Konfigurationsdatei (siehe Mandatory RC Variables in GNU Rot[t]log Manual).

rotations (Vorgabe: %default-rotations)

Eine Liste von log-rotation-Objekten, wie wir sie weiter unten definieren.

jobs

Dies ist eine Liste von G-Ausdrücken. Jeder G-Ausdruck darin entspricht einer mcron-Auftragsspezifikation (siehe Geplante Auftragsausführung).

Datentyp: log-rotation

Datentyp, der die Rotation einer Gruppe von Protokolldateien repräsentiert.

Um ein Beispiel aus dem Rottlog-Handbuch (siehe Period Related File Examples in GNU Rot[t]log Manual) aufzugreifen: Eine Log-Rotation kann auf folgende Art definiert werden:

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

Die Liste der Felder ist folgendermaßen aufgebaut:

frequency (Vorgabe: 'weekly)

Die Häufigkeit der Log-Rotation, dargestellt als englischsprachiges Symbol.

files

Die Liste der Dateien oder Glob-Muster für Dateien, die rotiert werden sollen.

options (Vorgabe: %default-log-rotation-options)

Die Liste der Rottlog-Optionen für diese Rotation (siehe Configuration parameters in Handbuch von GNU Rot[t]log).

post-rotate (Vorgabe: #f)

Entweder #f oder ein G-Ausdruck, der nach Abschluss der Rotation einmal ausgeführt wird.

Variable: %default-rotations

Gibt wöchentliche Rotationen der %rotated-files und von /var/log/guix-daemon.log an.

Variable: %rotated-files

Die Liste der von Syslog verwalteten Dateien, die rotiert werden sollen. Vorgegeben ist '("/var/log/messages" "/var/log/secure" "/var/log/debug" "/var/log/maillog").

Manche Protokolldateien müssen einfach nur regelmäßig gelöscht werden, wenn sie alt geworden sind, ohne Sonderfälle und ohne Archivierung. Das trifft auf Erstellungsprotokolle zu, die guix-daemon unter /var/log/guix/drvs vorhält (siehe Aufruf von guix-daemon). Der Dienst log-cleanup kann diesen Anwendungsfall übernehmen. Zum Beispiel ist Folgendes Teil der %base-services (siehe Basisdienste):

;; Regelmäßig alte Erstellungsprotokolle löschen.
(service log-cleanup-service-type
         (log-cleanup-configuration
          (directory "/var/log/guix/drvs")))

Dadurch sammeln sich Erstellungsprotokolle nicht bis in alle Ewigkeit an.

Variable: log-cleanup-service-type

Der Diensttyp des Dienstes, um alte Protokolldateien zu löschen. Sein Wert muss ein log-cleanup-configuration-Verbundsobjekt sein, wie im Folgenden beschrieben.

Datentyp: log-cleanup-configuration

Der Datentyp repräsentiert die Konfiguration, um Protokolldateien zu löschen.

directory

Der Name des Verzeichnisses mit den Protokolldateien.

expiry (Vorgabe: (* 6 30 24 3600))

Nach wie vielen Sekunden eine Datei für die Löschung vorgesehen ist (sechs Monate nach Vorgabe).

schedule (Vorgabe: "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 (siehe Timers in The GNU Shepherd Manual).

Anonip-Dienst

Anonip ist ein Datenschutz-Filter, der IP-Adressen aus den Protokollen von Web-Servern entfernt. Mit diesem Dienst wird eine FIFO erzeugt und jede Zeile, die in diese hinein geschrieben wird, wird mit anonip gefiltert und das gefilterte Protokoll in eine Zieldatei übertragen.

Folgendes Beispiel zeigt, wie die FIFO /var/run/anonip/https.access.log eingerichtet wird und die gefilterte Protokolldatei /var/log/anonip/https.access.log geschrieben wird.

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

Richten Sie Ihren Web-Server so ein, dass er seine Protokolle in die FIFO unter /var/run/anonip/https.access.log schreibt, und Sie finden die anonymisierte Protokolldatei in /var/web-logs/https.access.log vor.

Datentyp: anonip-configuration

Dieser Datentyp repräsentiert die Konfiguration von anonip. Zu ihm gehören folgende Parameter:

anonip (Vorgabe: anonip)

Das anonip-Paket, das benutzt werden soll.

input

Der Dateiname der zu verarbeitenden Eingabeprotokolldatei. Durch den Dienst wird eine FIFO erzeugt, die diesen Namen trägt. Der Web-Server sollte seine Protokolle in diese FIFO hinein schreiben.

output

Der Dateiname der verarbeiteten Protokolldatei.

Die folgenden optionalen Einstellungen können Sie angeben:

debug?

Print debug messages when #true.

skip-private?

Wenn das auf #true gesetzt ist, werden Adressen in privaten Adressbereichen nicht verborgen.

column

Eine bei 1 beginnende Spaltennummer. Es werden IP-Adressen in der angegebenen Spalte verarbeitet (die Vorgabe ist Spalte 1).

replacement

Durch welche Zeichenkette ersetzt wird, wenn die IP-Adresse nicht erkannt wird; zum Beispiel "0.0.0.0".

ipv4mask

Anzahl der Bits, die in IPv4-Adressen verborgen werden.

ipv6mask

Anzahl der Bits, die in IPv6-Adressen verborgen werden.

increment

Die IP-Adresse wird um diese Zahl erhöht. Vorgegeben ist null.

delimiter

Welche Zeichenkette der Trenner im Protokoll ist.

regex

Ein regulärer Ausdruck zur Erkennung von IP-Adressen. Er kann statt column benutzt werden.


Nächste: Netzwerkeinrichtung, Vorige: Geplante Auftragsausführung, Nach oben: Dienste   [Inhalt][Index]