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.
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
# 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
# Aktuellen Log-Treiber prüfen
docker info | grep 'Logging Driver'
Log-Treiber-Konfiguration
// /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"compress": "true"
}
}
# Docker-Daemon neu starten
systemctl restart docker
Log-Treiber beim Container-Start
# 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
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
# 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
# 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
# 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)
// 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.
Verwandte Artikel
K3s Kubernetes-Installation: Leichte Container-Orchestrierung
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Docker Volume und Netzwerkverwaltung: Persistenter Speicher und Netzwerkkonfiguration
Docker Volume-Typen (Named, Bind Mount, tmpfs), Volume-Verwaltung, Docker-Netzwerkmodi (Bridge, Host, Overlay), benutzerdefinierte Netzwerke und Container-Kommunikation. Umfassender Leitfaden.
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.