Zum Inhalt

Loki-Logs in Grafana visualisieren

Ziel

In diesem Projekt lernst du, wie man mit Loki gesammelte Logs in Grafana durchsucht und visualisiert. Du wirst:

  • erste Abfragen im Bereich Explore erstellen
  • Logs filtern und strukturierte Daten im JSON-Format nutzen
  • typische Fehler wie 404-Requests in den Logs identifizieren
  • ein Dashboard anlegen, um Log-Level und Status Codes übersichtlich darzustellen

Hilfsmittel

  • Versuche, die Aufgaben eigenständig zu lösen. Bei jeder Aufgabe findest du einen ausklappbaren Block mit einem Lösungsvorschlag, falls du nicht weiterkommst.

Aufgabe 1 - Erste Abfrage

  • Wechsle in Grafana in den Bereich Explore.
  • Wähle als Datenquelle Loki aus.
  • Lasse dir alle Logs anzeigen, die von der App Traefik gesammelt wurden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"}

Aufgabe 2 - Logs filtern

Aufgabe 2.1 - Structured Metadata Filter

  • Mache dich mit der Struktur der Logs vertraut.
  • Filtere die Logs nach detected_level und zeige nur die Logs mit dem Level info an.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | detected_level="info"
  • Optional: Filtere die Logs nach detected_level und zeige nur die Logs mit dem Level error an. Diese Logs sind in der Regel interessanter, da sie auf Probleme hinweisen. Sie sind aber möglicherweise in unserem Fall nicht vorhanden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | detected_level="error"

Aufgabe 2.2 - JSON Filter

  • Filter die Logs nach POST Requests.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | json | RequestMethod="POST"
  • Filtere die Logs nach Requests an Grafana.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | json | RequestMethod="POST", RequestHost="grafana.cluster.code-XX.labs.corewire.de"
  • Optimiere die Abfrage so, dass nur für die im JSON genutzen Felder Labels erstellt werden. Dadurch wird die Abfrage effizienter und die Ausgabe übersichtlicher.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | json RequestMethod, RequestHost | RequestMethod="POST", RequestHost="grafana.cluster.code-XX.labs.corewire.de"
  • Filtere die Logs nach Requests an Grafana, die von deiner IP-Adresse stammen.
  • deine IP Adresse kannst du auf https://icanhazip.com/ finden
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | json ClientHost, RequestMethod | RequestMethod="GET", ClientHost="<deine IP Adresse>"

Aufgabe 3 - KubeApiserver Logs analysieren

  • Zeige dir alle Logs des kube-apiserver an.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{service_name="kube-apiserver"}
  • Suche nach Logs, die einen nicht autorisierten Zugriff (Unauthorized) enthalten.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

{service_name="kube-apiserver"} |= "Unauthorized"
Hier ist es gut, wenn keine Logs auftauchen.

  • Optional: Filtere nach dem HTTP Status Code 401.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{service_name="kube-apiserver"} | json | OriginStatus="401"

Aufgabe 4 - Logs finden

In dieser Aufgabe gehen wir davon aus, dass sich in einem Link ein Tippfehler eingeschlichen hat und die die User auf einer nicht existierenden Seite landen. Wir wollen herausfinden, welche URL aufgerufen wurde.

  • Rufe deine Grafana Instanz unter /loginn auf.
  • Lade ein paar mal die Seite neu, damit der Fehler in den Logs besser sichtbar wird.
  • Suche in den Logs nach dem Aufruf der URL /loginn ohne explizit nach der URL zu filtern.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | json RequestMethod, OriginStatus, RequestPath | RequestMethod="GET",OriginStatus="404" 

Aufgabe 5 - Logs in Grafana Dashboard anzeigen

Aufgabe 5.1 - Log Levels anzeigen

  • Erstelle ein neues Dashboard in Grafana.
  • Füge ein neues Panel hinzu.
  • Wähle als Datenquelle Loki aus.
  • Frag zunächst die Anzahl der Logs in Traefik ab, über jeweils 5 Minuten aufsummiert.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
count_over_time({app="traefik"}[5m])
  • Summiere die Anzahl der Logs nach detected_level auf, um die Verteilung der Log-Level zu sehen.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
sum(count_over_time({app="traefik"}[5m])) by (detected_level)
  • Konfiguriere das Panel nach eigenen Wünschen.
  • Konfiguriere die Legende so, dass die detected_level als Label angezeigt wird, ohne das detected_level selbst auftaucht.
  • Speichere das Dashboard unter dem Namen Traefik Logs.

Aufgabe 5.2 - Log Details anzeigen

  • Erstelle ein weiteres Panel im selben Dashboard.
  • Wähle als Datenquelle Loki aus.
  • Konfiguriere das Panel so, dass errors in Traefik angezeigt werden.
  • Verwende dazu die Visualisierung Logs.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
{app="traefik"} | detected_level="error"

Aufgabe 5.3 - HTTP Status Codes anzeigen

  • Erstelle ein weiteres Panel im selben Dashboard.
  • Zeige die Anzahl der Logs mit verschiedenen HTTP Status Codes an.
  • Verwende dazu folgende Abfrage:
count_over_time({app="traefik"} | json OriginStatus | OriginStatus=~"[0-9]{3}" [5m])
  • Summiere die Anzahl der Logs nach OriginStatus, um die Verteilung der HTTP Status Codes zu sehen.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
sum(count_over_time({app="traefik"} | json OriginStatus | OriginStatus=~"[0-9]{3}" [5m])) by (OriginStatus)

Aufgabe 5.4 - 404 Fehler anzeigen (optional)

  • Erstelle ein weiteres Panel im selben Dashboard.
  • Zeige die Anzahl der Logs mit Statuscode 404, summiert nach Host und Path an.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
sum(count_over_time({app="traefik"} | json OriginStatus, RequestHost, RequestPath | OriginStatus="404", RequestRequestHost=~".*" [5m])) by (RequestHost, RequestPath)