Skip to content
BotServBotServ
DockerLogsLog-Rotationjson-filelogrotate

Docker-Log-Rotation einrichten

Docker-Container-Logs rotieren und begrenzen. json-file, logrotate, Promtail und Konfiguration.

S

schutzgeist

3 min read
Docker-Log-Rotation einrichten

Docker-Log-Rotation einrichten

Was dieser Artikel über Docker-Log-Rotation behandelt

  • Warum Container-Logs begrenzt werden müssen.
  • Wie Docker Logs standardmässig speichert.
  • Wie man Log-Grösse und Anzahl beschränkt.
  • Alternativen wie local und externe Log-Dienste.
  • Tipps für produktive Setups.

Einleitung: Docker-Log-Rotation einrichten

Docker-Container schreiben standardmässig Logs nach stdout und stderr. Wenn nichts weiter konfiguriert wird, wachsen diese Logs unbegrenzt an und füllen mit der Zeit die Festplatte. Besonders bei wachsenden Anwendungen, Chatbots oder Applikationen mit vielen Anfragen können Logs schnell mehrere Gigabyte erreichen. Log-Rotation sorgt dafür, dass alte Logs gelöscht oder archiviert werden, während aktuelle Logs verfügbar bleiben.

Dieser Artikel zeigt, wie man Docker-Log-Rotation sauber einrichtet.

Wichtige Begriffe

  • Log-Driver: Treiber, der Logs speichert oder weiterleitet.
  • json-file: Standard-Driver, speichert Logs als JSON.
  • local: Treiber, der Logs lokal rotiert.
  • Log-Rotation: Regelmässiges Archivieren oder Löschen alter Logs.
  • Log-Forwarder: Dienst, der Logs an externe Systeme sendet.
  • Retention: Aufbewahrungsdauer.
  • max-size: Maximale Grösse einer Log-Datei.
  • max-file: Maximale Anzahl rotierter Dateien.

Standardverhalten

Docker speichert Logs mit dem json-file-Driver. Jede Zeile wird in eine JSON-Datei geschrieben. Ohne Begrenzung wachsen diese Dateien unendlich:

/var/lib/docker/containers/<id>/<id>-json.log

Log-Driver pro Container konfigurieren

In compose.yaml:

services:
  app:
    image: mein-app
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Das begrenzt jede Log-Datei auf 10 MB und behält drei Dateien.

Global konfigurieren

In /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Danach Docker neu starten:

sudo systemctl restart docker

Bestehende Container müssen neu erstellt werden, damit die neuen Optionen greifen.

Local-Log-Driver

Der local Driver rotiert automatisch und ist leichtgewichtiger als json-file:

{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Logs prüfen

docker logs <container>
docker logs --tail 100 <container>
docker logs --since 1h <container>

Log-Grösse prüfen

sudo du -sh /var/lib/docker/containers/*

Oder spezifisch für einen Container:

sudo ls -lh /var/lib/docker/containers/<id>/<id>-json.log

Logs löschen

Container stoppen:

docker stop <container>

Log-Datei leeren:

sudo sh -c 'truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log'

Container starten:

docker start <container>

Externe Logs mit syslog

services:
  app:
    image: mein-app
    logging:
      driver: "syslog"
      options:
        syslog-address: "udp://localhost:514"

Logs an Loki oder Splunk

services:
  app:
    image: mein-app
    logging:
      driver: "loki"
      options:
        loki-url: "http://localhost:3100/loki/api/v1/push"

Logrotate für Container-Logs

Für Host-Logs oder Bind-Mount-Logs kann logrotate verwendet werden:

/var/log/containers/*.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  create 0640 root adm
  sharedscripts
}

Tipps

  • Auf jeden Fall Grösse und Anzahl begrenzen.
  • local statt json-file, wenn keine JSON-Verarbeitung nötig.
  • Für Produktion externes Logging wie Loki oder Splunk.
  • Retention-Policy dokumentieren.
  • Logs regelmässig prüfen, ob Rotation funktioniert.
  • Nicht Secrets in Logs ausgeben.

Typische Stolpersteine

  • Keine Log-Begrenzung: Festplatte läuft voll.
  • Global geändert, Container neu: Bestehende Container behalten alten Driver.
  • Truncate während Laufzeit: Datenverlust.
  • Log-Forwarder nicht erreichbar: Container startet nicht.
  • Zu kurze Retention: Fehler nicht mehr nachvollziehbar.
  • Falsche Berechtigungen: Logs können nicht gelöscht werden.

FAQ: Docker-Log-Rotation

Werden Logs automatisch gelöscht? Nein, ohne Konfiguration wachsen sie unbegrenzt.

Was ist der beste Log-Driver? Für lokale Setups local oder json-file mit max-size. Für zentrale Sammlung Loki oder Splunk.

Wie wirken globale Einstellungen? Nur für Container, die danach neu erstellt werden.

Wie oft werden Logs rotiert? Wenn max-size erreicht ist, nicht nach Zeit.

Soll ich Logs komprimieren? Bei langer Aufbewahrung ja, um Speicher zu sparen.

Quellen und weiterführende Literatur

Zusammenfassung: Docker-Log-Rotation einrichten

Docker-Log-Rotation verhindert, dass Container-Logs ungebremst wachsen und die Festplatte füllen. Der json-file oder local Driver mit max-size und max-file ist für lokale Setups die einfachste Lösung. Für zentrale Verwaltung bieten sich externe Log-Dienste an. Wer Logs begrenzt, regelmässig prüft und die Aufbewahrungsdauer festlegt, behält den Speicherbedarf im Griff und kann bei Problemen trotzdem auf relevante Logeinträge zugreifen.

Zurück zum KI Blog
Share:

Ähnliche Beiträge