5 Minuten

Zentralisiertes Logging mit Loki, Promtail und Grafana visualisieren

Inhaltsverzeichnis

Einleitung

Stell dir vor, du sitzt in einem Raum mit dutzenden Bildschirmen, auf denen alle Aktionen in deinem Kubernetes-Cluster angezeigt werden. Jeder Bildschirm zeigt einzelne Logs – von Crash-Reports bis zu normalen Statusmeldungen. Ohne ein zentrales Dashboard müsstest du von einem Bildschirm zum nächsten rennen und mühst dich durch unendliche Daten. Chaos pur, oder? Mit dem Loki-Stack bekommst du die Kontrolle zurück: Alle Logs laufen in einer zentralen Schaltzentrale zusammen, durchsuchbar und grafisch aufbereitet.

In diesem Beitrag zeige ich dir, wie ich diese elegante Logging-Lösung auf meinem k3s-Cluster aufgebaut habe – mit Loki, Promtail und Grafana.

Warum zentralisiertes Logging?

In einem Kubernetes-Cluster laufen unzählige Prozesse wie Zahnräder in einem Uhrwerk. Jeder dieser Prozesse schreibt Logs. Wenn du keine zentrale Logging-Lösung hast, bedeutet das:

  • Verlorene Logs: Wenn ein Pod abstürzt oder neu gestartet wird, verschwinden wichtige Informationen.
  • Zeitfresser: Du musst dich manuell durch Logs auf verschiedenen Nodes graben – wie nach der Nadel im Heuhaufen suchen.
  • Kein Gesamtbild: Ohne zentrale Sammlung hast du nur Bruchstücke und verstehst das Problem nur teilweise.

Ein zentrales Logging-System wie der Loki-Stack ist wie ein Spiegel, in dem du das gesamte System reflektiert siehst.

Architektur des Loki-Stacks

  • Loki: Der Log-Safe – hier landen alle gesammelten Logs.
  • Promtail: Der Log-Spürhund – durchstöbert Kubernetes und lokale Dateien auf der Suche nach Logs und liefert sie an Loki.
  • Grafana: Dein Kommandoturm – hier kannst du alle Logs durchsuchen und visualisieren.

Im Fokus dieses Beitrags steht der Spürhund Promtail, da er die Basis für die Datenjagd bildet.

Promtail einrichten

Promtail funktioniert als DaemonSet in Kubernetes und schnüffelt auf allen Nodes nach Logs. Ein echtes Detektiv-Tool für dein Cluster.

Schritt 1: Deployment von Promtail

Hier ist ein Beispiel-Manifest für Promtail:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: promtail
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: promtail
  template:
    metadata:
      labels:
        app: promtail
    spec:
      containers:
        - name: promtail
          image: grafana/promtail:2.8.0
          args:
            - "-config.file=/etc/promtail/config.yml"
          volumeMounts:
            - name: config-volume
              mountPath: /etc/promtail
            - name: varlog
              mountPath: /var/log
            - name: systemd
              mountPath: /run/log/journal
              readOnly: true
      volumes:
        - name: config-volume
          configMap:
            name: promtail-config
        - name: varlog
          hostPath:
            path: /var/log
        - name: systemd
          hostPath:
            path: /run/log/journal

Schritt 2: Konfiguration von Promtail

Erstelle eine ConfigMap für die Promtail-Konfiguration:

apiVersion: v1
kind: ConfigMap
metadata:
  name: promtail-config
  namespace: monitoring
data:
  config.yml: |
    server:
      http_listen_port: 9080
      grpc_listen_port: 0

    positions:
      filename: /tmp/positions.yaml

    clients:
      - url: http://loki:3100/loki/api/v1/push

    scrape_configs:
      - job_name: system
        static_configs:
          - targets:
              - localhost
            labels:
              job: varlogs
              __path__: /var/log/**/*.log

Erläuterung der wichtigen Konfigurationspunkte

  • Positions-Datei: Eine Art Notizblock für Promtail, um festzuhalten, welche Logs bereits übermittelt wurden – wichtig, falls Promtail neu startet.
  • Clients: Die Zieladresse von Loki – quasi die Haustür, an der Promtail klingelt.
  • Scrape Configs: Definiert, welche Logs gesammelt werden sollen. Hier werden alle Logs aus /var/log/**/*.log eingesammelt.

Grafana einrichten

Um die Logs sichtbar zu machen, richtest du Loki als Datenquelle in Grafana ein:

  1. Gehe zu Settings → Data Sources und füge Loki hinzu.
  2. Trage die URL zu Loki ein (z. B. http://loki:3100).
  3. Speichere die Einstellungen und erstelle ein Dashboard.

Ein einfaches Beispiel für eine Query in Grafana:

{job="varlogs"} |= "error"

Stell dir das wie eine Schatzkarte vor: Mit der richtigen Query findest du schnell die wertvollen Informationen.

Best Practices für Promtail

  • Labeling: Denk an sinnvolle Labels (z. B. Namespace, Pod-Name) – sie sind wie Wegweiser im Log-Dschungel.
  • Vermeidung von log-spamming: Filtere irrelevante Logs bereits in Promtail aus – dein Grafana wird es dir danken.
  • Ressourcenschonend: Setze Limits für Speicher- und CPU-Nutzung, damit Promtail auf jedem Node leichtgewichtig bleibt.

Sicherheit

  • Zugriffskontrolle: Schließe die Haustür zu Loki und Grafana ab – Authentifizierung ist ein Muss.
  • Log-Sanität: Entferne vertrauliche Informationen aus deinen Logs – niemand möchte interne Geheimnisse in den Logs sehen.

Erfahrungen & Lessons Learned

  • Die Integration von MinIO als Speicher für Loki war anfangs wie ein Puzzle ohne Anleitung – mit Geduld hat es geklappt.
  • Die Label-Struktur in Promtail ist der Schlüssel zu schnellen Suchergebnissen in Grafana.
  • Alerts für kritische Logs haben sich als Rettungsanker erwiesen, um Probleme frühzeitig zu erkennen.

Fazit

Mit dem Loki-Stack wird das Log-Management vom nervigen Detektivspiel zur entspannten Analyse. Promtail ist dabei der unermüdliche Spürhund, der dir die Logs auf dem Silbertablett serviert. Die Visualisierung mit Grafana rundet das Ganze perfekt ab und gibt dir den vollen Überblick – wie eine Kommandozentrale im Raumschiff.

Hast du bereits Erfahrungen mit dem Loki-Stack gemacht? Lass es mich gerne in den Kommentaren wissen! 😊