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:
- Gehe zu Settings → Data Sources und füge Loki hinzu.
- Trage die URL zu Loki ein (z. B.
http://loki:3100
). - 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! 😊