Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 56|Svare: 0

[ASP.NET] ASP.NET Kjerne (34) Sporkontekst

[Kopier lenke]
Publisert påFor 4 dager siden | | | |
Krav: I mikrotjenestearkitektur er det ofte svært vanskelig å feilsøke når man støter på problemer, uten å vite om det er et unntak kastet av tjenesten, det kan være at tjenesten skriver en feil, eller at det er et problem med informasjonen som sendes av tjenesten som kaller tjenesten. Hvis konteksten til alle forespørsler kan registreres, altså lenken til hele den fullstendige transaksjonsforespørselen, er det avgjørende å feilsøke og analysere problemet.

Anmeldelse:
ASP.NET Core link tracing (2) bruker SkyAPM-integrasjon
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Kjerne lenkesporing (4) Tilgang til Jaeger-lenkesporing
https://www.itsvse.com/thread-9537-1-1.html

Unntaksstakkspor er ideelle for applikasjoner som retter seg mot en enkelt prosess, som et monolittisk applikasjonssystem. Men på den annen side, for å håndtere distribuerte applikasjoner, som mikrotjenestearkitekturer, er ikke stakkspor nok til å vise hele meldingssporet. Derfor blir distribuerte sporingsverktøy og standarder nødvendige. W3C definerer en standard for denne typen spor kalt Trace Context.

Trace Context-standarden

W3C Trace Context-dokumentasjon:Innloggingen med hyperkoblingen er synlig.

W3C Trace Context-spesifikasjonen definerer standarder og formater for HTTP-headere for å spre distribuert sporingskontekstinformasjon. Den definerer to felt som brukes til å videreføre sporingsflyten i HTTP-forespørselshodet. La oss se på disse to feltene i standarddefinisjonen:

  • traceparent: 用来描述在追踪图谱中到达请求的位置。它表示在追踪系统中到达请求的通用格式,被所有的 vendor 所理解。
  • tracestate: 使用 vendor 特定的数据表示形式来扩展 traceparent,使用 name/value 对形式。在 tracestate 中保存信息是可选的。

Traceparent-feltet

Spesifikasjonen for traceparent-feltet er definert i form av Extended Baccos Paradigm (ABNF) og består av 4 deler:
versjon - traceid - parentid/spanid - traceflags

For eksempel:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Verdien er nøyaktig den samme i samme lenke
  • Foreldre-ID/SPAN-ID: 8 byte for å uttrykke forelderen til den nåværende SPAN i en innkommende forespørsel eller en utgående forespørsel.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Alle feltene er kodet i heksadesimal, som vist på bildet nedenfor:



.NET-distribuert sporing

Distribuert sporing er en diagnostisk teknikk som hjelper ingeniører med å lokalisere feil og ytelsesproblemer i applikasjoner, spesielt de som kan være distribuert over flere datamaskiner eller prosesser. Denne teknikken korrelerer arbeidet utført av ulike applikasjonskomponenter gjennom forespørselssporing i applikasjonen og skiller det fra annet arbeid applikasjonen kan utføre ved håndtering av samtidige forespørsler. For eksempel kan en lastbalanserer først motta en forespørsel om en typisk webtjeneste, deretter videresende den til en webserverprosess, og deretter sende flere forespørsler til databasen. Med distribuert sporing kan ingeniører avgjøre om disse stegene feilet, hvor lang tid hvert steg tar, og hvilke meldinger som kan logges når hvert steg kjøres.

I .NET er System.Diagnostics.Activity-biblioteket konfigurert til å bruke W3C-standarden. W3C-stil traceparent-headeren Request-Id ble lagt til i ASP.NET Core 2.0. For å endre det til en traceparent-header som samsvarer med W3C Trace Context, sett den statiske egenskapen Activity.DefaultIdFormat til W3C når du starter programmet. Koden er som følger:
testprosess,Nettleser -> tjeneste A (/http, backend bruker HttpClient for å be om tjeneste B) grensesnitt -> B tjeneste (/test) grensesnitt, Tjeneste A gir sin egen Trace Context og Service B sin Trace Context, koden er som følger:
Starttjenester A og B, som vist i følgende figur:



Nettleseren åpner Tjeneste A, som vist i følgende figur:


Id: 00-9891603e6c4921598951f425d98e4df7-bd06e8d507a43f42-00
TraceId: 9891603e6c4921598951f425d98e4df7
SpanId: bd06e8d507a43f42
ParentId:

Svarinnhold:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"Ingen","isSampled":false}

--------------------------------------------------
Name: HttpHandlerDiagnosticListener
DateTime: 2025/12/22 9:37:22
Id: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
TraceId: 9891603e6c4921598951f425d98e4df7
SpanId: e0336cc56a4f2150
ParentId: 00-9891603e6c4921598951f425d98e4df7-bd06e8d507a43f42-00

Key: System.Net.Http.HttpRequestOut.Stop, Value: { Response = StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Dato: Man, 22. des 2025 01:37:21 GMT
  Server: Kestrel
  Overføring-koding: chunked
  Forbindelse: hold deg i live
  Innholdstype: application/json; charset=utf-8
}, Request = Metode: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Versjon: 1.1, Innhold: <null>, Headers:
{
  traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Ved å bruke Charles Proxy pakkefangstverktøyet er forespørsel og respons som følger:



Hvis du vil deaktivere HttpClient fra å sende traceparent, settes miljøvariablene som følger:

Referanse:

Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.




Foregående:010 Editor leveres ikke med en DEX-mal som standard
Neste:Front-end prosjektkompilering Kan ikke sette egenskaper for udefinerte (setter 'forelder')
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com