Linuxguide

Docker Container Logging mit Loki und Grafana 2025

Zentrale Log-Aggregation für alle Container

S
SeeColors IT
11. Juni 20264 Min. Lesezeit149 Aufrufe

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

  1. Grafana öffnen: http://SERVER:3000
  2. Configuration → Data Sources → Add data source → Loki
  3. URL: http://loki:3100
  4. 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.

Artikel teilen

War dieser Artikel hilfreich?

Dein Feedback hilft uns, bessere Inhalte zu erstellen.

Kommentar hinterlassen

Verwandte Artikel