Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 56|Antwoord: 0

[ASP.NET] ASP.NET Core (34) Trace Context

[Link kopiëren]
Geplaatst op4 dagen geleden | | | |
Vereisten: In de microservice-architectuur is het bij problemen vaak erg moeilijk om te troubleshooten, omdat je niet weet of het een uitzondering is die door de service wordt gegooid, het kan zijn dat de service een bug schrijft, of dat er een probleem is met de informatie die door de service wordt verzonden die de service oproept. Als de context van alle verzoeken kan worden vastgelegd, dat wil zeggen de link naar het volledige transactieverzoek, is het cruciaal om het probleem op te lossen en te analyseren.

Recensie:
ASP.NET Core linktracing (2) gebruikt SkyAPM-integratie
https://www.itsvse.com/thread-9458-1-1.html

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

Uitzonderingsstacktraces zijn ideaal voor toepassingen die zich richten op één enkel proces, zoals een monolithisch applicatiesysteem. Maar aan de andere kant, voor het omgaan met gedistribueerde applicaties, zoals microservices-architecturen, zijn stacktraces niet voldoende om het volledige berichtspoor weer te geven. Daarom worden gedistribueerde traceertools en -standaarden noodzakelijk. Het W3C definieert een standaard voor dit type trace genaamd Trace Context.

Trace Context-standaard

W3C Trace Context documentatie:De hyperlink-login is zichtbaar.

De W3C Trace Context-specificatie definieert standaarden en formaten voor HTTP-headers om gedistribueerde tracecontextinformatie te verspreiden. Het definieert 2 velden die worden gebruikt om de traceflow in de HTTP-verzoekheader te verspreiden. Laten we eens kijken naar deze twee velden in de standaarddefinitie:

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

traceparentveld

De specificatie voor het traceparent-veld is gedefinieerd in de vorm van het Extended Baccos Paradigm (ABNF) en bestaat uit 4 delen:
Versie - traceid - parentid/spanid - traceflags

Bijvoorbeeld:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,De waarde is exact hetzelfde in dezelfde link
  • Ouder-ID/SPAN-ID: 8 bytes om de ouder van de huidige SPAN uit te drukken in een inkomend verzoek of een uitgaande aanvraag.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Alle velden zijn gecodeerd in hexadecimaal, zoals weergegeven in de onderstaande afbeelding:



.NET distributed tracing

Gedistribueerd traceren is een diagnostische techniek die ingenieurs helpt storingen en prestatieproblemen in applicaties te lokaliseren, vooral die welke over meerdere computers of processen verspreid kunnen zijn. Deze techniek correleert het werk dat door verschillende applicatiecomponenten wordt verricht met elkaar via verzoektracking in de applicatie en scheidt dit van ander werk dat de applicatie mogelijk uitvoert bij het afhandelen van gelijktijdige verzoeken. Een load balancer kan bijvoorbeeld eerst een verzoek ontvangen voor een typische webservice, dit vervolgens doorsturen naar een webserverproces, en vervolgens meerdere queries naar de database sturen. Met gedistribueerd traceren kunnen ingenieurs onderscheiden of deze stappen zijn mislukt, hoe lang elke stap duurt en welke berichten er kunnen worden gelogd wanneer elke stap wordt uitgevoerd.

In .NET is de bibliotheek System.Diagnostics.Activity geconfigureerd om de W3C-standaard te gebruiken. De W3C-stijl traceparent-header Request-Id header werd toegevoegd in ASP.NET Core 2.0. Om het te veranderen in een traceparent-header die voldoet aan de W3C Trace Context, zet je de statische eigenschap Activity.DefaultIdFormat op W3C wanneer je het programma start. De code is als volgt:
Testproces,Browser -> dienst A (/http, backend gebruikt HttpClient om dienst B aan te vragen) interface -> B service (/test) interface, Service A geeft zijn eigen Trace Context en Service B's Trace Context uit, de code is als volgt:
Start diensten A en B, zoals weergegeven in de volgende figuur:



De browser opent Service A, zoals weergegeven in de volgende figuur:


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

Inhoud van de reactie:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"Geen","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:
{
  Datum: ma, 22 dec 2025 01:37:21 GMT
  Server: Kestrel
  Transfer-codering: gehuld
  Verbinding: in leven blijven
  Inhoudstype: applicatie/json; charset=utf-8
}, Request = Method: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Versie: 1.1, Inhoud: <null>, Headers:
{
  traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Met behulp van de Charles Proxy packet capture-tool zijn het verzoek en de reactie als volgt:



Als je de HttpClient wilt uitschakelen om traceparent door te geven, worden de omgevingsvariabelen als volgt ingesteld:

Referentie:

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.




Vorig:010 Editor wordt standaard niet geleverd met een DEX-sjabloon
Volgend:Front-end projectcompilatie Kan geen eigenschappen instellen van ongedefinieerd (instelling 'ouder')
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com