Distribueret sporing (tracing)
Også kendt som: tracing
At følge én brugerforespørgsel gennem mange tjenester og tage tid på hvert trin for at se, hvor den blev langsom eller fejlede.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
En metode, hvor hver forespørgsel får et fælles ID, der sendes videre fra tjeneste til tjeneste, og hver tjeneste registrerer et tidsmålt trin, kaldet et span, under det ID, så hele vejen kan samles igen som en sporing.
Forklaret enkelt
Som sporingssiden for en pakke, der viser hver terminal, den har været igennem, og hvor længe den lå der, så man kan se, at den sad fast tre dage ét sted.
I praksis
En sporing af en langsom side i regionens patientportal viser, at webtjenesten svarede næsten med det samme, men ventede fire sekunder på tidsbestillingstjenesten, så teamet ved, hvor det skal lede.
Teknisk uddybning
En sporing (trace) er en rettet acyklisk graf af spans med samme trace-ID. Hvert span registrerer et navn, et span-ID, forælderens span-ID, start- og sluttidspunkt, en type (i OpenTelemetry: SERVER, CLIENT, PRODUCER, CONSUMER eller INTERNAL), en status, nøgle-værdi-attributter, tidsstemplede hændelser som exceptions og eventuelle links til spans i andre sporinger, som er måden, batch- og fan-in-beskedbehandling modelleres på, når ét consumer-span har mange årsagsforældre. Span-modellen stammer fra Googles Dapper-artikel (2010), der inspirerede Zipkin, Jaeger, OpenTracing og OpenCensus; de to sidste blev i 2019 slået sammen til OpenTelemetry, som i dag er de facto-standarden for instrumentering.
Kontekstpropagering er det, der gør sporingen distribueret. Over HTTP er det dominerende format W3C-anbefalingen Trace Context: en traceparent-header på formen version-traceid-parentid-flags, hvor trace-ID'et er 16 byte (32 hex-tegn), parent-ID'et 8 byte (16 hex-tegn), og den laveste bit i flags-byten markerer, at sporingen er samplet; ID'er, der kun består af nuller, er ugyldige. En tilhørende tracestate-header bærer op til 32 leverandørspecifikke listeelementer. Ældre systemer bruger Zipkins B3-headers, og beskedsystemer skal bære samme kontekst i beskedheaders. Propageringen brydes lydløst ved ethvert led, der ikke videresender headers, fx en proxy, en trådpulje, der mister kontekst i processen, eller en køforbruger uden instrumentering, og resultatet er forældreløse fragmenter frem for en fejl.
At spore hver eneste forespørgsel er som regel for dyrt, så sampling er central. Head-based sampling beslutter ved roden, typisk sandsynlighedsbaseret ud fra trace-ID'et, så alle tjenester når samme beslutning, og sender den videre via sampled-flaget; det er billigt, men kan ikke favorisere langsomme eller fejlede forespørgsler, fordi beslutningen træffes, før de sker. Tail-based sampling holder alle spans i en sporing i buffer, fx i et lag af OpenTelemetry Collectors, og beslutter efter afslutning, så fejl og latensudliggere bevares, prisen er hukommelse og et routinglag, der sender alle spans fra samme sporing til samme instans.
Instrumentering er enten automatisk (agenter eller biblioteker, der pakker HTTP-servere, klienter og databasedrivere ind) eller manuelle spans omkring forretningslogik, og attributter bør følge OpenTelemetrys semantiske konventioner, så backends kan fortolke dem. Sporinger adskiller sig fra logs og metrikker ved at indkode årsagssammenhæng og timing på tværs af procesgrænser; exemplars knytter et metrikdatapunkt til et repræsentativt trace-ID, og når trace-ID'er skrives ind i logposter, kan logs kobles til sporinger. Attributter kan lække personoplysninger eller hemmeligheder, fx fulde URL'er med tokens, så span-processorer, der renser attributter, hører med til en forsvarlig opsætning.
Hvad du bør lære først
Alt det, dette bygger på - grundlaget først.
- Tjeneste (service)
- →Distribueret sporing (tracing)
Relationer
- Del af
- Observerbarhed
- Forudsætter
- Tjeneste (service)
- Åbner for
- Telemetri
Kilder og videre læsning
Standarder og officielle tekster
Officiel dokumentation
- OpenTelemetry - Traces · OpenTelemetry (CNCF)
Opslagsværker
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Nævnt i
Test dig selv
Indlæser…