Zum Hauptinhalt springen
Zurück zur Kategorie

Container-Logging: Docker und Kubernetes Log-Verwaltung

Docker-Log-Treiber, docker logs-Befehl, Kubernetes Pod-Logs, zentralisierte Log-Sammlung (Loki, ELK Stack), Log-Rotation und Best Practices für Log-Verwaltung in Produktionsumgebungen.

Lesezeit: 15 dk Container & Orchestrierung
dockerkubernetesloggingloglokielkfluentdmonitoring
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

Container-Logging: Docker und Kubernetes Log-Verwaltung

Logging in Container-Umgebungen unterscheidet sich vom traditionellen Server-Logging. Da Container flüchtig sind, ist das zentrale Sammeln von Logs außerhalb des Containers kritisch wichtig. Dieser Leitfaden behandelt Docker- und Kubernetes-Log-Verwaltung, zentralisierte Log-Sammellösungen und Production-Best-Practices.

Docker-Logging-Grundlagen

Der docker logs-Befehl

hljs bash
# Container-Logs anzeigen
docker logs CONTAINER_NAME

# Letzte N Zeilen anzeigen
docker logs --tail 100 CONTAINER_NAME

# Live-Log-Streaming
docker logs -f CONTAINER_NAME

# Mit Zeitstempeln anzeigen
docker logs -t CONTAINER_NAME

# Ab einem bestimmten Zeitpunkt
docker logs --since 1h CONTAINER_NAME  # Letzte 1 Stunde

# Bestimmter Zeitraum
docker logs --since 2h --until 1h CONTAINER_NAME

Docker-Log-Treiber

hljs bash
# Aktuellen Log-Treiber prüfen
docker info | grep 'Logging Driver'

Log-Treiber-Konfiguration

hljs json
// /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "compress": "true"
  }
}
hljs bash
# Docker-Daemon neu starten
systemctl restart docker

Log-Treiber beim Container-Start

hljs bash
# json-file mit Log-Rotation
docker run -d \
  --name myapp \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

# An Syslog weiterleiten
docker run -d \
  --name myapp \
  --log-driver syslog \
  --log-opt syslog-address=udp://localhost:514 \
  myapp:latest

Log-Konfiguration mit Docker Compose

hljs yaml
version: '3.8'

services:
  app:
    image: myapp:latest
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"
        compress: "true"

  nginx:
    image: nginx:latest
    logging:
      driver: json-file
      options:
        max-size: "5m"
        max-file: "3"

Kubernetes Pod-Logs

hljs bash
# Pod-Logs anzeigen
kubectl logs POD_NAME

# Bestimmter Container (Multi-Container-Pod)
kubectl logs POD_NAME -c CONTAINER_NAME

# Live-Log-Streaming
kubectl logs -f POD_NAME

# Letzte N Zeilen
kubectl logs --tail=100 POD_NAME

# Ab einem bestimmten Zeitpunkt
kubectl logs --since=1h POD_NAME

# Vorheriger Container (nach Absturz)
kubectl logs --previous POD_NAME

# Logs aller Pods in einem Deployment
kubectl logs -l app=myapp --all-containers

Zentralisierte Log-Sammlung: Loki + Grafana

hljs yaml
# loki-stack.yml
version: '3.8'

services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    volumes:
      - loki-data:/loki
    command: -config.file=/etc/loki/local-config.yaml

  promtail:
    image: grafana/promtail:latest
    volumes:
      - /var/log:/var/log:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - ./promtail-config.yml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=StarkesPasswort123!
    volumes:
      - grafana-data:/var/lib/grafana

volumes:
  loki-data:
  grafana-data:

Log-Rotation und Festplattenverwaltung

hljs bash
# Docker-Log-Dateigrößen prüfen
du -sh /var/lib/docker/containers/*/*-json.log

# Bestimmten Container-Log leeren
truncate -s 0 $(docker inspect --format='{{.LogPath}}' CONTAINER_NAME)

# Automatische Rotation mit logrotate
cat > /etc/logrotate.d/docker-containers << 'EOF'
/var/lib/docker/containers/*/*.log {
  rotate 7
  daily
  compress
  size=10M
  missingok
  delaycompress
  copytruncate
}
EOF

Strukturiertes Logging (JSON)

hljs javascript
// Node.js — JSON-Logging mit Winston
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.errors({ stack: true }),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console()
  ]
});

logger.info('Benutzeranmeldung', {
  userId: 123,
  action: 'login',
  ip: '192.168.1.1'
});

Fazit

Effektives Container-Logging ist für die Fehlerbehebung und Systemgesundheitsüberwachung in Produktionsumgebungen unerlässlich. Verhindern Sie Festplattenüberlauf mit Docker-Log-Rotation, richten Sie zentralisierte Log-Sammlung mit Loki oder ELK Stack ein und vereinfachen Sie die Log-Analyse mit strukturierten JSON-Logs. Mit diesen Konfigurationen auf REXE-Servern können Sie Ihre Container-Infrastruktur mit vollständiger Transparenz verwalten.

Häufig gestellte Fragen

Wo werden Docker-Logs gespeichert?

Mit dem Standard-json-file-Treiber werden Logs unter /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log gespeichert. Verwenden Sie docker inspect CONTAINER_NAME | grep LogPath, um den genauen Pfad zu finden. Ohne konfigurierte Log-Rotation können diese Dateien mit der Zeit die Festplatte füllen.

Wie sehe ich Logs nach dem Löschen eines Containers?

Wenn ein Container gelöscht wird, gehen auch seine Logs verloren. Deshalb ist die Verwendung zentralisierter Log-Sammlung (Loki, ELK, Fluentd) in der Produktion kritisch. Alternativ können Sie mit --log-driver syslog an Systemlogs weiterleiten oder in eine Datei schreiben und mit einem Volume persistent machen.

Wie konfiguriere ich Log-Rotation?

Zwei Methoden: 1) Auf Docker-Daemon-Ebene max-size und max-file in /etc/docker/daemon.json hinzufügen (gilt für alle Container). 2) Beim Container-Start --log-opt max-size=10m --log-opt max-file=3 verwenden. Vergessen Sie nicht, Docker nach Änderungen neu zu starten.

Wie verfolge ich Logs von mehreren Pods in Kubernetes?

Verwenden Sie kubectl logs -l app=myapp --all-containers mit einem Label-Selektor, um Logs von mehreren Pods gleichzeitig anzuzeigen. Für fortgeschrittenere Lösungen verwenden Sie Tools wie stern oder kubetail. In der Produktion wird zentralisierte Log-Sammlung mit Loki oder ELK Stack empfohlen.

Warum ist JSON-Format-Logging wichtig?

JSON-Logs sind strukturiert und können von Systemen wie Loki und Elasticsearch automatisch geparst werden. Sie können nach bestimmten Feldern filtern und suchen (z.B. alle Logs mit userId=123). Klartext-Logs erfordern Regex-Parsing, was sowohl langsam als auch fehleranfällig ist.

Verwandte Artikel

Docker-Sicherheit: Container-Umgebung absichern

Docker-Sicherheits-Best-Practices: Nicht-Root-Benutzer, Read-Only-Dateisystem, Seccomp-Profile, Image-Scanning, Docker-Socket-Sicherheit, Netzwerkisolierung und Secrets-Verwaltung.

17 dk
dockersicherheitcontainer
NetzwerkverkehrEingehend GbpsAusgehend Gbps