Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 56|Odpověď: 0

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

[Kopírovat odkaz]
ZveřejněnoPřed 4 dny | | | |
Požadavky: V architektuře mikroslužeb je při výskytu problémů často velmi obtížné je diagnostikovat, aniž by bylo jasné, zda jde o výjimku ze strany služby, může se stát, že služba napíše chybu, nebo je problém s informacemi přenášenými službou, která službu volá. Pokud lze zaznamenat kontext všech požadavků, tedy spojení s celým požadavkem na celou transakci, je zásadní problém diagnostikovat a analyzovat.

Přezkoumání:
ASP.NET Core link tracing (2) využívá integraci se SkyAPM
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core Link Tracing (4) Přístup k Jaeger link tracing
https://www.itsvse.com/thread-9537-1-1.html

Stopy výjimek jsou ideální pro aplikace zaměřené na jeden proces, například pro monolitické aplikační systémy. Na druhou stranu, pro práci s distribuovanými aplikacemi, jako jsou architektury mikroservisů, stack trace nestačí k zobrazení celkového message trace. Proto jsou nástroje a standardy pro distribuované trasování nezbytné. W3C definuje standard pro tento typ stopy nazývaný Trace Context.

Standard Trace Context

Dokumentace kontextu W3C Trace:Přihlášení k hypertextovému odkazu je viditelné.

Specifikace W3C Trace Context definuje standardy a formáty pro HTTP hlavičky pro šíření informací o kontextu distribuovaného trace. Definuje 2 pole, která se používají k šíření trace flow v HTTP hlavičce požadavku. Podívejme se na tyto dvě pole ve standardní definici:

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

pole traceparent

Specifikace pole traceparent je definována ve formě Rozšířeného Baccos Paradigmatu (ABNF) a skládá se ze 4 částí:
Verze - traceId - parentID/Spanid - TraceFlags

Například:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Hodnota je ve stejném odkazu přesně stejná
  • Parent-ID/SPAN-ID: 8 bajtů pro vyjádření rodiče aktuálního spanu v příchozím nebo odchozím požadavku.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Všechna pole jsou kódována v hexadecimálním formátu, jak je znázorněno na obrázku níže:



.NET distribuované trasování

Distribuované trasování je diagnostická technika, která pomáhá inženýrům lokalizovat poruchy a problémy s výkonem v aplikacích, zejména těch, které mohou být distribuovány mezi více počítačů nebo procesů. Tato technika koreluje práci vykonanou různými aplikačními komponentami prostřednictvím sledování požadavků v aplikaci a odděluje ji od jiné práce, kterou může aplikace provádět při zpracování současných požadavků. Například load balancer může nejprve přijmout požadavek na typickou webovou službu, poté jej předat procesu webového serveru a následně zaslat více dotazů do databáze. Díky distribuovanému trasování mohou inženýři rozlišit, zda tyto kroky selhaly, jak dlouho každý krok trvá a jaké zprávy mohou být zaznamenány při každém provedení jednotlivých kroků.

V .NET byla knihovna System.Diagnostics.Activity nakonfigurována tak, aby používala standard W3C. Hlavička traceparent ve stylu W3C Request-Id byla přidána v ASP.NET Core 2.0. Pro změnu na traceparent hlavičku, která odpovídá W3C Trace Context, nastavte při spuštění programu statickou vlastnost Activity.DefaultIdFormat na W3C. Kód je následující:
Testovací proces,Prohlížeč -> A služba (/http, backend používá HttpClient k požadavku B služby) rozhraní -> B služba (/test), Služba A vydává svůj vlastní Trace Context a Trace Context služby B, kód je následující:
Začněte služby A a B, jak je znázorněno na následujícím obrázku:



Prohlížeč otevírá službu A, jak je znázorněno na následujícím obrázku:


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

Obsah odpovědí:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"None","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: Po 22. prosince 2025 01:37:21 GMT
  Server: Kestrel
  Přenosové kódování: rozdělené na části
  Spojení: udržuj naživu
  Typ obsahu: aplikace/json; Charset=utf-8
}, Request = Method: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Version: 1.1, Content: <null>, Headers:
{
  TraceParent: 00-9891603e6c4921598951F425D98e4DF7-E0336CC56A4F2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Pomocí nástroje Charles Proxy pro zachycení paketů jsou požadavky a odpovědi následující:



Pokud chcete zakázat HttpClientovi předávání traceparent, proměnné prostředí jsou nastaveny následovně:

Odkaz:

Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.




Předchozí:Editor 010 ve výchozím nastavení neobsahuje šablonu DEX
Další:Kompilace front-end projektů Nelze nastavit vlastnosti nedefinovaných (nastavení 'rodiče')
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com