Docker-Logs zentralisieren mit dem Loki-Log-Driver
Docker-Logs zentralisieren mit dem Loki-Log-Driver
Der Loki Log Driver sendet Container-Logs direkt vom Docker-Daemon an Loki — ohne Promtail als Zwischenschicht.
Zwei Wege zu Loki
Der [vorherige Artikel](2023-06-10-19_00%20-%20Docker-Logs%20zentralisieren%20-%20Loki%20und%20Promtail%20mit%20Docker.md) zeigt den Promtail-Ansatz: Promtail liest Docker-Logdateien vom Host. Der Loki-Log-Driver geht einen anderen Weg: Docker selbst schickt Logs direkt an Loki, kein Promtail nötig.
Plugin installieren
docker plugin install grafana/loki-docker-driver:latest \
--alias loki \
--grant-all-permissions
# Plugin-Status prüfen
docker plugin ls
Daemon-weit konfigurieren
In /etc/docker/daemon.json:
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://localhost:3100/loki/api/v1/push",
"loki-retries": "5",
"loki-batch-size": "400",
"loki-pipeline-stages": ""
}
}
sudo systemctl restart docker
Achtung: Nach daemon.json-Änderungen müssen alle Container neu gestartet werden, damit der neue Log-Driver greift.
Pro Container konfigurieren
Statt den Daemon umzustellen, lässt sich der Driver per Container setzen:
services:
myapp:
image: myapp:latest
logging:
driver: loki
options:
loki-url: "http://loki:3100/loki/api/v1/push"
loki-retries: "5"
loki-batch-size: "400"
loki-external-labels: "job=myapp,env=production"
Labels automatisch anhängen
logging:
driver: loki
options:
loki-url: "http://loki:3100/loki/api/v1/push"
loki-external-labels: "container_name={{.Name}},image_name={{.ImageName}}"
Docker-Template-Variablen werden automatisch aufgelöst.
Nachteil: Loki muss verfügbar sein
Der größte Unterschied zum Promtail-Ansatz: Wenn Loki nicht erreichbar ist, schlägt der Log-Write im Container fehl. Das kann Anwendungen blockieren oder verlangsamen.
Promtail hingegen puffert Logs auf Disk und sendet sie, wenn Loki wieder verfügbar ist — deutlich resilienter.
Wann welcher Ansatz?
| | Loki Log Driver | Promtail |
|--|-----------------|---------|
| Setup | Einfacher | Etwas aufwändiger |
| Resilienz bei Loki-Ausfall | Schlecht | Gut (Puffer) |
| docker logs verfügbar | Nein (bei daemon-weitem Driver) | Ja |
| Empfehlung | Dev/Test | Produktion |
docker logs weiterhin nutzen
Wenn der Loki-Driver daemon-weit aktiv ist, funktioniert docker logs nicht mehr — Docker speichert keine lokalen Logs mehr.
Lösung: loki-pipeline-stages mit docker logs-Fallback via multi:
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://localhost:3100/loki/api/v1/push",
"max-size": "10m",
"max-file": "3"
}
}
Oder: lokalen Log-Driver zusätzlich behalten (nicht möglich mit einem einzelnen Driver — dann besser Promtail nutzen).
Zusammenfassung
Der Loki Log Driver ist die schnellste Möglichkeit, Container-Logs nach Loki zu schicken — ohne Promtail-Container. Für Produktionsumgebungen ist der Promtail-Ansatz stabiler, weil er Logs auf Disk puffert und docker logs erhalten bleibt.