Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 56|Svar: 0

[ASP.NET] ASP.NET Core (34) Trace-kontekst

[Kopier link]
Opslået påFor 4 dage siden | | | |
Krav: I mikroservicearkitektur er det ofte meget vanskeligt at fejlfinde ved problemer, da man ikke ved, om det er en undtagelse fra tjenesten, det kan være, at tjenesten skriver en fejl, eller at der er et problem med informationen fra den service, der kalder tjenesten. Hvis konteksten for alle forespørgsler kan registreres, altså linket til hele den fulde transaktionsanmodning, er det afgørende at fejlfinde og analysere problemet.

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

ASP.NET Core Link Tracing (4) Adgang til Jaeger link tracing
https://www.itsvse.com/thread-9537-1-1.html

Undtagelsesstakspor er ideelle for applikationer, der retter sig mod en enkelt proces, såsom et monolitisk applikationssystem. Men på den anden side, når man håndterer distribuerede applikationer, såsom microservices-arkitekturer, er stack traces ikke nok til at vise den samlede meddelelsestrace. Derfor bliver distribuerede sporingsværktøjer og standarder nødvendige. W3C definerer en standard for denne type spor kaldet Trace Context.

Trace Context-standarden

W3C Trace Context dokumentation:Hyperlink-login er synlig.

W3C Trace Context-specifikationen definerer standarder og formater for HTTP-headere til at udbrede distribueret trace-kontekstinformation. Den definerer 2 felter, der bruges til at videreføre trace-flowet i HTTP-anmodningsheaderen. Lad os se på disse 2 felter i standarddefinitionen:

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

Traceparent-feltet

Specifikationen for traceparent-feltet er defineret i form af Extended Baccos Paradigm (ABNF) og består af 4 dele:
Version - traceid - parentid/spanid - traceflags

For eksempel:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Værdien er præcis den samme i det samme link
  • Parent-ID/SPAN-ID: 8 bytes til at udtrykke forælderen til den aktuelle SPAN i en indgående eller udgående anmodning.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Alle felter er kodet i hexadecimalt, som vist på billedet nedenfor:



.NET distribueret sporing

Distribueret sporing er en diagnostisk teknik, der hjælper ingeniører med at lokalisere fejl og ydelsesproblemer i applikationer, især dem, der kan være fordelt på flere computere eller processer. Denne teknik korrelerer det arbejde, der udføres af forskellige applikationskomponenter, sammen gennem anmodningssporing i applikationen og adskiller det fra andet arbejde, som applikationen måtte udføre ved håndtering af samtidige forespørgsler. For eksempel kan en load balancer først modtage en forespørgsel om en typisk webservice, derefter videresende den til en webserverproces og derefter sende flere forespørgsler til databasen. Med distribueret sporing kan ingeniører afgøre, om disse trin fejlede, hvor lang tid hvert trin tager, og hvilke beskeder der kan blive logget, når hvert trin kører.

I .NET er System.Diagnostics.Activity-biblioteket konfigureret til at bruge W3C-standarden. W3C-stil traceparent-headeren Request-Id blev tilføjet i ASP.NET Core 2.0. For at ændre det til et traceparent-header, der overholder W3C Trace Context, sæt den statiske egenskab Activity.DefaultIdFormat til W3C, når du starter programmet. Koden er som følger:
Testproces,Browser -> A-tjeneste (/http, backend bruger HttpClient til at anmode om B-tjeneste) interface -> B service (/test) interface, Service A outputter sin egen Trace Context og Service B's Trace Context, koden er som følger:
Start tjenester A og B, som vist i følgende figur:



Browseren åbner Service A, som vist i følgende figur:


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

Svarindhold:{"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. dec 2025 01:37:21 GMT
  Server: Kestrel
  Overførsel-kodning: chunked
  Forbindelse: hold dig i live
  Indholdstype: application/json; charset=utf-8
}, Request = metode: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', version: 1.1, indhold: <null>, headers:
{
  traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Ved brug af Charles Proxy pakkefangstværktøjet er anmodning og svar som følger:



Hvis du vil deaktivere HttpClient fra at sende traceparent, sættes miljøvariablerne som følger:

Henvisning:

Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.




Tidligere:010 Editor leveres ikke som standard med en DEX-skabelon
Næste:Front-end projektkompilering Kan ikke sætte egenskaber for udefinerede (sætter 'forælder')
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com