Grafana og Loki - Observability

Skip to content

Info

Nå tar vi steget inn i den “virkelige verden”! I produksjon logger man ikke bare til filer og terminaler - man sender loggene til et sentralt system der man kan søke, filtrere og visualisere dem. Det er her Grafana og Loki kommer inn! 📊

Del 1 - Hva er Grafana og Loki?

Grafana

Grafana er et open-source verktøy for å visualisere data. Tenk på det som et dashbord der du kan se grafer, tabeller og annet som viser hva som skjer i systemene dine i sanntid.

Du har kanskje sett slike dashboards i filmer der noen overvåker servere? Det er ofte noe à la Grafana! 🖥️

Loki

Loki er et logg-aggregeringssystem laget av folkene bak Grafana. Det samler inn logger fra alle applikasjonene dine og gjør dem søkbare. Tenk på det som en “Google for loggene dine”.

Hvorfor ikke bare lese logg-filene? 🤔

Forestill deg at du har 10 servere som kjører appen din. Hver server har sin egen app.log. Hvis noe går galt, må du logge inn på alle 10 serverne og lete gjennom filene manuelt. 😱

Med Loki sendes alle loggene til ett sted, og du kan søke gjennom alt fra Grafana. Mye enklere!

Hvordan henger det sammen?

┌──────────────┐      ┌─────────────┐     ┌─────────────┐
│  FastAPI App │──────│    Loki     │─────│   Grafana   │
│  (logger)    │      │  (lagrer)   │     │  (viser)    │
└──────────────┘      └─────────────┘     └─────────────┘
      │                                          │
      │              Logger sendes hit      Dashboards
      │                                     og søk her

Del 2 - Forutsetninger

Grafana og Loki må være installert

Denne oppgaven forutsetter at du allerede har en Grafana-instans oppe og kjører, og at Loki er installert som datakilde. Oppgaven vil ikke gå gjennom installasjon av Grafana eller Loki i detalj, men du kan lese mer her:

Del 3 - Sende logger til Loki

Vi bruker Python-pakken python-logging-loki som gir oss en LokiHandler - altså en vanlig logging-handler som sender meldinger rett til Loki over HTTP. Installer med:

pip install python-logging-loki

Deretter legger du til handleren i setup_logger() fra tidligere:

import logging_loki

LOKI_URL = "http://localhost:3100"  # Bør hentes fra miljøvariabel i produksjon

loki_handler = logging_loki.LokiHandler(
    url=f"{LOKI_URL}/loki/api/v1/push",
    tags={"application": "fastapi-logging", "environment": "development"},
    version="1",
)

logger.addHandler(loki_handler)

Det er alt! 🎉 LokiHandler tar seg av å sende loggnivå, tidsstempel og annen kontekst automatisk. Du trenger ikke konfigurere noe ekstra - den bare fungerer som en hvilken som helst annen handler.

Tags

tags er labels som Loki bruker til å filtrere logger. Du kan legge til hva som helst som er nyttig for å identifisere appen din, for eksempel environment for å skille mellom utvikling og produksjon. Dersom du har flere instanser av samme app kan du også bruke tags for å skille dem:

tags={"application": "min-app", "server": "web-02", "region": "eu-north-1"}

Da kan du i Grafana filtrere med f.eks. {application="min-app", region="eu-north-1"} for å bare se logger fra én region.

Del 4 - Se loggene i Grafana

Når appen kjører og sender logger til Loki, kan du finne dem i Grafana:

  1. Gå til DrilldownLogs i menyen
  2. Du bør nå se loggene fra appen din! 🎉

Prøv å klikke på de forskjellige filtrene i sidepanelet - du kan filtrere på application, environment, loggnivå og mer. Alt dette kommer automatisk fra tags og konteksten som LokiHandler sender med.


Oppgaver

Easy Oppgave 5.1 - Koble appen til Loki

  1. Installer python-logging-loki
  2. Legg til LokiHandler i setup_logger() fra Level 3
  3. Start appen og besøk noen endpoints
  4. Verifiser at loggene dukker opp i Grafana Explore

Medium Oppgave 5.2 - Generer trafikk og analyser

  1. Bruk Swagger-siden (/docs) til å gjøre mange forskjellige forespørsler - hent produkter, prøv å hente produkter som ikke finnes, opprett nye, slett noen
  2. Gå til DrilldownLogs i Grafana og bruk filtrene til å:
    • Vise bare WARNING-meldinger
    • Vise bare ERROR-meldinger
    • Filtrere på application-tagen

Hard Oppgave 5.3 - Lag et Dashboard

Lag et Grafana-dashboard med følgende paneler:

  1. Log Panel - Viser en live-strøm av logger fra appen
  2. Stat Panel - Viser antall feil (ERROR) den siste timen
Tips for å komme i gang
  • I Grafana, gå til DashboardsNewNew Dashboard
  • Legg til paneler med Add visualization
  • Velg Loki som data source

Alternativ: Grafana Alloy

I denne oppgaven brukte vi python-logging-loki for å sende logger direkte fra Python til Loki. Et populært alternativ er Grafana Alloy - en agent som samler logger, metrikker og traces fra systemene dine og sender dem videre til Loki (og andre datakilder). Appen din trenger ikke vite noe om Loki i det hele tatt - den bare skriver til filer som vanlig, og Alloy tar seg av resten.

Fordelen med Alloy er at den fungerer med alle språk og programmer, og kan samle inn flere typer data samtidig. Ulempen er at det krever en ekstra tjeneste som må settes opp og kjøres. For større systemer med mange forskjellige apper er Alloy veien å gå.

Grafana anbefaler selv Alloy, men det finnes også flere tredjepartsalternativer for å sende logger til Loki. Sjekk ut oversikten her: Send data to Loki