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.
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_idlänkar samman alla spans för en begäranspan_ididentifierar operationenparent_idanger 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-01Instrumentera 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
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
- Fjärrfelsökning av applikationer i drift
- Efterhandsfelsökning med core dumps
- Tekniker för minnes- och CPU-profilering
- Distribuerad tracing för latensproblem