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

Inhaltsverzeichnis

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.