Das Problem mit Standard-Docker-Logs
docker logs container-name zeigt Logs nur für einzelne Container. In Umgebungen mit 10+ Containern brauchen Sie eine zentrale Lösung.
Grafana Loki ist der schlanke Log-Aggregator (kein Elasticsearch-Cluster nötig) von Grafana Labs.
Stack: Loki + Promtail + Grafana
# docker-compose.yml
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
volumes:
- loki-data:/loki
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./promtail-config.yml:/etc/promtail/config.yml:ro
command: -config.file=/etc/promtail/config.yml
restart: unless-stopped
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
restart: unless-stopped
volumes:
loki-data:
grafana-data:
Promtail Konfiguration
# promtail-config.yml
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: docker
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
relabel_configs:
- source_labels: ['__meta_docker_container_name']
target_label: container
- source_labels: ['__meta_docker_container_image']
target_label: image
- source_labels: ['__meta_docker_compose_service']
target_label: service
Loki als Grafana-Datenquelle
- Grafana öffnen:
http://SERVER:3000 - Configuration → Data Sources → Add data source → Loki
- URL:
http://loki:3100 - Save & Test
LogQL – Logs durchsuchen
# Alle Logs von nginx Container
{container="nginx"}
# Nur Fehler
{container="nginx"} |= "error"
# Regex-Filter
{service="backend"} |~ "ERROR|CRITICAL"
# Rate der Fehler über Zeit
rate({container="nginx"} |= "error" [5m])
# Logs der letzten Stunde eines Services
{service="api"} | json | level="error"
Loki als Docker-Logging-Treiber
Alternativ: Container direkt an Loki senden (ohne Promtail):
// /etc/docker/daemon.json
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://localhost:3100/loki/api/v1/push",
"loki-batch-size": "400",
"loki-external-labels": "server=mein-server"
}
}
sudo systemctl restart docker
FAQ
Wie viel Speicher braucht Loki?
Loki ist sehr sparsam – ~200 MB RAM für normale Homelab-Workloads. Im Gegensatz zu Elasticsearch das GBs RAM benötigt.
Wie lange werden Logs aufbewahrt?
Standard: 168 Stunden (7 Tage). Konfigurierbar in der Loki-Konfiguration unter limits_config.retention_period.
Fazit
Loki + Promtail + Grafana ist der schlanke, moderne Ersatz für ELK-Stacks in KMU-Umgebungen. Container-Logs zentral durchsuchen war nie einfacher.
Monitoring und Observability für KMU in Heidelberg, Mannheim und Rhein-Neckar. Anfragen.