Handbok för felsökning i produktion och incidenthantering · Lektion

Distribuerad tracing för latensproblem

Lär dig använda distribuerad tracing för att följa en enskild request genom flera tjänster, hitta latensproblem och korrelera traces med loggar vid felsökning i produktion.

Lektion 4 av 413 steg

Distribuerad tracing för latensproblem är en gratis lektion i Handbok för felsökning i produktion och incidenthantering på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Handbok för felsökning i produktion och incidenthantering, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Handbok för felsökning i produktion och incidenthantering innehåller totalt 4 lektioner.

Varför distribuerad spårning

I ett mikrotjänstsystem kan en enda användarbegäran spridas över dussintals tjänster. När den är långsam, vilken tjänst är då orsaken?

Distribuerad spårning besvarar detta genom att koppla ett gemensamt trace_id till en begäran och registrera en span för varje operation som den berör.

  • Ett spår = hela begärans förlopp
  • En span = en tidsmätt arbetsenhet

En spans anatomi

Varje span innehåller tidsinformation och kontext så att ni kan återskapa anropsträdet.

  • trace_id länkar samman alla spans för en begäran
  • span_id identifierar operationen
  • parent_id anger vem som anropade den
  • Tidsstämplar för start och slut anger varaktigheten
{
  "trace_id": "abc123",
  "span_id": "s2",
  "parent_id": "s1",
  "name": "db.query.users",
  "start_ms": 1042,
  "end_ms": 1310
}

Kontextspridning

För att spans ska ingå i samma spår måste trace_id färdas med begäran. Detta kallas kontextspridning.

De flesta system infogar standardiserade huvuden som traceparent (W3C Trace Context) i utgående HTTP-anrop och meddelandemetadata.

Om spridningen bryts fragmenteras spåren och anropsträdet faller samman.

GET /orders HTTP/1.1
traceparent: 00-abc123-s1-01

Instrumentera kod

Ni skapar spans runt de operationer som ni vill mäta. Automatisk instrumentering täcker vanliga bibliotek, medan manuella spans fångar er egen logik.

Exemplet nedan omsluter en funktion i en span enligt OpenTelemetry-konventioner.

with tracer.start_as_current_span('charge_card') as span:
    span.set_attribute('amount', 42)
    result = payment.charge(42)
    span.set_attribute('status', result.status)

Läs vattenfallsdiagrammet

Gränssnitt för spårning visar spans som ett vattenfallsdiagram. Den bredaste stapeln som INTE bara väntar på ett underordnat anrop är vanligtvis er flaskhals.

  • Långa staplar utan underordnade anrop = lokal CPU-/I/O-kostnad
  • Långa staplar fyllda med underordnade anrop = kostnad nedströms
  • Luckor mellan spans = köbildning eller oinstrumenterat arbete

Samplingstrategier

Det är dyrt att spåra varje begäran. Sampling håller mängden hanterbar.

  • Head-sampling: beslut fattas i början (till exempel att behålla 5 %)
  • Tail-sampling: beslut fattas när spåret är klart, och långsamma spår eller spår med fel behålls

För felsökning av latens är tail-sampling baserad på lång varaktighet ovärderlig.

Korrelera spår och loggar

Ett spår visar var, medan loggar visar varför. Skriv in det aktiva trace_id i varje loggrad så att ni kan gå direkt från en långsam span till dess loggar.

import logging
logging.info('cache miss', extra={'trace_id': current_trace_id()})

Span-attribut och händelser

Attribut är nyckel-/värdetaggar på en span (databasuttryck, HTTP-status). Händelser är tidsstämplade punkter inuti en span (omförsök, lås förvärvat).

Utförliga attribut gör det möjligt att filtrera spår som i 'alla spans där db.rows > 10000', vilket förvandlar spårning till ett frågeverktyg.

span.add_event('retry', {'attempt': 2})
span.set_attribute('db.rows', 12044)

Hitta den kritiska vägen

Total latens är inte summan av alla spans. Parallella spans överlappar varandra. Den kritiska vägen är kedjan av spans som faktiskt avgör tiden från början till slut.

Att optimera en span som INTE ligger på den kritiska vägen gör inte begäran snabbare.

Spårning av asynkrona flöden och köer

I köer kör konsumenten senare än producenten. Sprid kontexten i meddelandet så att konsumentens span länkas tillbaka som relationen follows-from i stället för som en överordnad–underordnad relation.

producer:  msg.headers['traceparent'] = inject_context()
consumer:  ctx = extract_context(msg.headers)

Ett felsökningsarbetsflöde

Sätt ihop delarna när en slutpunkt är långsam i produktion:

  • Filtrera spår för slutpunkten och sortera efter varaktighet
  • Öppna det långsammaste spåret och läs vattenfallsdiagrammet
  • Identifiera den dominerande spannen på den kritiska vägen
  • Gå till den spannes loggar via trace_id
  • Åtgärda problemet och kontrollera sedan latensfördelningen igen

Snabb kontroll

Testa er förståelse av distribuerad spårning.

Sammanfattning

Ni har lärt er hur distribuerad spårning återskapar en begäran genom flera tjänster med hjälp av trace_id, spans och kontextspridning.

  • Läs vattenfallsdiagram för att hitta flaskhalsar
  • Fokusera på den kritiska vägen, inte den totala spantiden
  • Använd tail-sampling för att behålla långsamma spår
  • Korrelera spans med loggar för hela bilden
Gratis att börja

Lär dig Handbok för felsökning i produktion och incidenthantering med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Distribuerad tracing för latensproblem” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Handbok för felsökning i produktion och incidenthantering, inklusive ”Distribuerad tracing för latensproblem”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Handbok för felsökning i produktion och incidenthantering innehåller totalt 4 lektioner.

Vad lär jag mig i ”Distribuerad tracing för latensproblem”?

Lär dig använda distribuerad tracing för att följa en enskild request genom flera tjänster, hitta latensproblem och korrelera traces med loggar vid felsökning i produktion. Ni övar på Handbok för felsökning i produktion och incidenthantering med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Handbok för felsökning i produktion och incidenthantering?

Du behöver inga förkunskaper. Utbildningen i Handbok för felsökning i produktion och incidenthantering på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Distribuerad tracing för latensproblem”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Handbok för felsökning i produktion och incidenthantering-lektionen?

Ja. Varje Handbok för felsökning i produktion och incidenthantering-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Fjärrfelsökning av applikationer i drift
  2. Efterhandsfelsökning med core dumps
  3. Tekniker för minnes- och CPU-profilering
  4. Distribuerad tracing för latensproblem
← Tillbaka till Handbok för felsökning i produktion och incidenthantering