Nätverk & systemintegration/Kursinnehåll
SV
← Till kursöversikten
ÄMNE 09 / 09 · Robusthet

Loggning & övervakning

Följ händelser genom systemet med strukturerade loggar, korrelations-ID och mätetal som hjälper dig felsöka.

23 min läsning5 kunskapsfrågorPraktisk övning
DET HÄR TAR DU MED DIG
  • Skriva sökbara, strukturerade loggar med rätt nivå och utan hemligheter.
  • Knyta ihop klient och server med ett korrelations-ID.
  • Välja relevanta mätetal och jämföra logg, dashboard och nätverksspår.
  • Dokumentera en felsökning så att någon annan kan upprepa den.
Klient · request_id
API · logg + mätetal
Dashboard · felsökning
Se vad som faktiskt händer · Ett förenklat flöde
01 — UTFORSKA

Från ”det fungerar inte” till ett undersökningsbart fel

Ett distribuerat fel kan finnas i klienten, nätverket, brokern, API:t eller lagringen. Observerbarhet handlar om att använda synliga signaler för att förstå vad som händer inne i systemet. Börja med frågor: vad hände, när, var, hur ofta och hur långsamt?

Loggar, mätetal och nätverksspår kompletterar varandra. Ingen enskild vy bevisar att hela kedjan fungerar. Samla signaler vid flera tjänstegränser och jämför samma tidsperiod.

  • Logg: beskriver en specifik händelse och dess sammanhang.
  • Mätetal: visar mängd, frekvens och tidsåtgång över tid.
  • Nätverksspår: visar vad som passerade ett fångat nätverksgränssnitt.
02 — UTFORSKA

Skriv loggar som går att söka i

Strukturerade loggar använder konsekventa fältnamn, exempelvis JSON, så att du kan filtrera på händelse, nivå, statuskod eller request_id. En tidsstämpel gör det möjligt att jämföra händelser mellan komponenter. Ange enhet för tidsmått, som duration_ms.

I exemplet avvisar API:t en ogiltig mätning. Loggen visar tid, orsak, status och hur lång tid behandlingen tog. WARNING beskriver betydelsen av händelsen; nivån är inte bara en färg i terminalen.

  • DEBUG: tillfälliga detaljer för diagnos.
  • INFO: en normal händelse, till exempel accepterad mätning.
  • WARNING: en avvikelse, till exempel avvisad ogiltig indata.
  • ERROR: ett begärt arbete misslyckades.
EXEMPEL
{
  "timestamp": "2026-09-22T08:21:04.123Z",
  "level": "WARNING",
  "event": "reading_rejected",
  "request_id": "lab-invalid-1",
  "status": 400,
  "duration_ms": 0.42,
  "reason": "value must be a positive number"
}
03 — UTFORSKA

Låt samma ID följa förloppet

Klienten kan skicka ett korrelations-ID, eller servern kan skapa ett. Samma ID returneras och loggas så att klientens anrop kan kopplas till serverns behandling. Dokumentera hur ID:t överförs i just ert API-kontrakt.

Sök på lab-invalid-1 för att hitta båda sidorna av exempelförloppet. ID:t är till för att hitta samband, inte för att bevisa behörighet. Det ska varken vara ett lösenord eller innehålla persondata.

EXEMPEL
Klient skickar: request_id = lab-invalid-1
API loggar:     request_id = lab-invalid-1, status = 400
Klient tar emot samma ID i svaret
04 — UTFORSKA

Välj mätetal utifrån frågan

Samla inte ett mätetal bara för att det är enkelt att samla. Utgå från det du behöver avgöra i drift och bestäm vad värdet betyder. En räknare för accepterade mätningar säger något annat än en räknare för skapade sensorhändelser.

En dashboard kan visa utvecklingen över tid. När valideringsfelen ökar använder du loggarna för att undersöka enskilda avvisade anrop. När svarstiden stiger jämför du med belastning och ködjup i samma tidsintervall.

  • Kommer data fram? Räkna accepterade mätningar.
  • Avvisas indata? Räkna valideringsfel.
  • Är tjänsten långsam? Mät svarstid i millisekunder.
  • Tappar enheten kontakt? Räkna återanslutningar.
  • Växer kön? Följ aktuellt och maximalt ködjup.
05 — UTFORSKA

Jämför signalerna och gör felet reproducerbart

Tänk dig att klienten inte får någon ny mätning. Börja med att avgränsa tidsintervallet och hitta ett korrelations-ID. Kontrollera klientens och serverns loggar, jämför räknarna och granska vid behov nätverksspåret. Ett nätverksspår visar trafik, men krypterad payload kan inte läsas som vanlig klartext.

Som övning kan du skicka en ogiltig mätning och jämföra klientens svar, serverns logghändelse och förändringen i räknaren för valideringsfel. Det här arbetssättet gör kursens mål om en reproducerbar felsökningsguide konkret.

  • Beskriv symtom, testmiljö och förutsättningar.
  • Spara exakt indata och stegen som utlöser felet.
  • Ange förväntat respektive observerat resultat.
  • Bifoga relevanta tidsstämplar, ID:n och mätetal före och efter.
  • Dokumentera åtgärden och hur återställd funktion verifierades.
06 — UTFORSKA

Logga utfallet, skydda hemligheterna

Logga tid, klientidentitet när det behövs, operation eller topic och om utfallet godkändes eller nekades. Lösenord, access-token och privata nycklar ska inte hamna i loggen. Undvik också onödig persondata, hela certifikat i varje händelse och obegränsad sensordata utan tydligt syfte och lagringstid.

Bestäm varför uppgifterna behövs och hur länge de ska sparas. Bifoga minsta relevanta bevis i felsökningsguiden och kontrollera att varken loggar eller nätverksspår sprider hemligheter.

07 — UTFORSKA

Tidsstämplar och en klocka för tidsåtgång

Använd UTC, skriv ut tidszonen och håll samma tidsformat i alla komponenter. Z i 2026-09-22T08:21:04.123Z betyder UTC. Synkronisera enheternas klockor för att kunna jämföra klientens och serverns händelser.

Mät duration med en monoton klocka, som ett tidtagarur, mellan tydliga start- och slutpunkter. Väggklockan kan justeras vid tidssynkronisering eller manuellt, och lokal tid påverkas av tidszon och sommartid. En monoton klocka skyddar tidsmätningen mot sådana hopp.

EXEMPEL
timestamp   → När inträffade händelsen? UTC med tidszon.
duration_ms → Hur lång tid tog arbetet? Monoton sluttid − starttid.
08 — UTFORSKA

Räknare, mätare och duration

Från föregående del känner du igen tasks som producerar händelser, timers som startar arbete och en kö som skiljer produktion från publicering. Räknare och anslutningshändelser hjälper oss att se återanslutningar och bortfall. Nu behöver varje mätetal också en tydlig definition.

En räknare ökar när något händer, exempelvis requests_total. En mätare visar ett aktuellt tillstånd som kan gå både upp och ned, exempelvis queue_depth. Duration anger tidsåtgången mellan bestämda start- och slutpunkter.

En omstart kan nollställa processens räknare. Visa därför uptime eller starttid i dashboarden. En lägre total efter en omstart betyder inte att tidigare anrop har försvunnit.

09 — UTFORSKA

Skilj total, feltakt och felandel

Totalen sedan start saknar tidskontext. Feltakt anger hur snabbt nya fel tillkommer: förändringen i antalet valideringsfel delad med förfluten tid. Felandel anger hur stor del av de relevanta anropen som var felaktiga under samma mätintervall.

Om 12 av 240 anrop avvisas under 60 sekunder är feltakten 0,2 fel per sekund och felandelen 5 procent. Ange alltid mätintervall, enhet och vilka anrop som ingår i nämnaren. Blanda inte räknarvärden från före och efter en omstart.

EXEMPEL
Feltakt  = Δ valideringsfel / Δ tid = 12 / 60 = 0,2 fel/s
Felandel = valideringsfel / relevanta anrop = 12 / 240 = 5 %
Båda beräkningarna avser samma 60 sekunder.
10 — UTFORSKA

Medelvärde kan dölja långsamma anrop

Svarstiderna 10, 11, 12, 13 och 500 ms ger medelvärdet 109,2 ms och maxvärdet 500 ms. Medelvärdet ensamt visar inte att ett av fem anrop tog mycket längre tid än de andra.

Visa åtminstone antal mätningar och enhet tillsammans med tidsintervallet. Maxvärdet synliggör en topp men beskriver inte hela fördelningen. Percentiler är en möjlig fördjupning när du vill undersöka hur svarstiderna fördelar sig.

11 — UTFORSKA

Dashboarden är en vy av samma mätetal

I presentationens flöde går mätetal från tjänsten via /api/metrics till dashboarden och vidare till verktyg eller människa. Alla vyer behöver använda samma definitioner av exempelvis accepterade anrop, valideringsfel och svarstid.

Gör uppdateringsintervallet synligt. En tom panel behöver inte betyda noll fel eller noll trafik: insamlingen eller hämtningen kan ha misslyckats. Kontrollera datakällan innan du drar slutsatser om tjänstens tillstånd.

EXEMPEL
Tjänst → /api/metrics → Dashboard → Verktyg eller människa
12 — UTFORSKA

Demons roller, trafikfilter och TLS

Terminal 1 kör servern eller gatewayen med logg och mätetal. Terminal 2 kör en simulerad sensorenhet. En valfri tredje terminal observerar nätverkstrafiken passivt. Roller och insamlingspunkter behöver vara tydliga när du jämför bevis.

Ett capture filter begränsar vilken trafik som samlas in. Ett display filter begränsar vilken del av den redan insamlade trafiken som visas. I demon avgränsar port 8090 trafiken från annan trafik; byt port om din tjänst använder en annan.

Med TLS kan observatören normalt se IP-adresser, portar, tidpunkter, paketstorlekar och att en anslutning upprättas. HTTP- eller MQTT-nyttolast, headers och topic inne i tunneln samt sensorvärden och token skyddas. HTTP-filtret visar därför inte automatiskt HTTP-innehållet i en krypterad anslutning.

EXEMPEL
Capture filter: tcp port 8090
Display filter: tcp.port == 8090 && http
FRÅN KUNSKAP TILL HANDLING

Prova själv

Ta med ämnet in i ditt eget IoT-case. Dokumentera vad du upptäcker.

  1. Lägg till strukturerade loggar i klient och API med tid, nivå, händelse, korrelations-ID, status och duration_ms.
  2. Skicka en giltig och en ogiltig mätning. Kontrollera att samma ID kan hittas i klientens svar och serverns logg.
  3. Visa accepterade mätningar, valideringsfel och svarstid i en enkel dashboard eller tabell. Ange tidsintervall och enheter.
  4. Kör server/gateway i terminal 1 och den simulerade sensorn i terminal 2. Använd vid behov en passiv nätverksobservatör i terminal 3 och filtrera på demotrafikens port.
  5. Visa uptime eller starttid och dashboardens uppdateringsintervall. Beräkna feltakt och felandel för samma intervall och redovisa antal svarstider, medel och max i ms.
  6. Skriv startläge och version, exakta steg och testdata samt förväntat och observerat resultat. Bifoga minsta relevanta bevis. Återställ miljön och upprepa testet.
  7. Klart innebär minst en strukturerad logghändelse, minst ett definierat mätetal, dokumenterat normalfall och avsiktligt fel samt samma scenario synligt i minst två beviskällor. Kontrollera att underlaget inte innehåller hemligheter. Låt gärna en annan grupp verifiera guiden.
DIN TUR

Testa dina kunskaper

Stanna upp en stund. Vad har fastnat?

01Du vill veta varför ett specifikt anrop avvisades. Vilken signal är mest direkt användbar?

02Hur ska ett korrelations-ID användas mellan klient och server?

03Under 60 sekunder avvisas 12 av 240 anrop. Vad är feltakten och felandelen?

04Vilken kombination beskriver korrekt hur tid och nätverkstrafik ska undersökas?

05Vilket underlag passar i en reproducerbar felsökningsguide?

Fortsätt vara nyfiken

Originalmaterial och utvalda källor för dig som vill gå djupare.

Föreläsningsbilder · Ämne 9Joakim Englund · Systementor AB · PDF på svenskaStrukturerade loggar och deras sammanhangOpenTelemetry · EngelskaVälj och instrumentera användbara mätetalPrometheus · Engelska

Ett steg närmare helheten.

Markera ämnet när du känner dig redo.

Hitta nästa sak att förstå.

Introduktion & MQTTÄmne 1 · GrundernaPortar & socketsÄmne 2 · NätverkHTTP(S) & API:erÄmne 3 · IntegrationJSON, XML & datakontraktÄmne 4 · IntegrationSystemintegration & SOAÄmne 5 · IntegrationNätverk & segmenteringÄmne 6 · NätverkSäker kommunikationÄmne 7 · SäkerhetTrådar & återanslutningÄmne 8 · RobusthetLoggning & övervakningÄmne 9 · Robusthet