Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 56|Odpoveď: 0

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

[Kopírovať odkaz]
ZverejnenéPred 4 dňami | | | |
Požiadavky: V architektúre mikroslužieb je pri výskyte problémov často veľmi ťažké diagnostikovať, nevediac, či ide o výnimku zo strany služby, či služba napíše chybu alebo je problém s informáciami prenášanými službou, ktorá službu volá. Ak je možné zaznamenať kontext všetkých požiadaviek, teda prepojenie na celú požiadavku na celú transakciu, je kľúčové problém diagnostikovať a analyzovať.

Revízia:
ASP.NET Core link tracing (2) využíva integráciu so SkyAPM
https://www.itsvse.com/thread-9458-1-1.html

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

Výnimkové stack trace sú ideálne pre aplikácie, ktoré cielia na jeden proces, napríklad monolitický aplikačný systém. Na druhej strane, pri riešení distribuovaných aplikácií, ako sú architektúry mikroslužieb, stack trace nestačia na zobrazenie celkovej správnej stopy. Preto sú nástroje a štandardy distribuovaného trasovania nevyhnutné. W3C definuje štandard pre tento typ stopy nazývaný Trace Context.

Štandard Trace Context

Dokumentácia kontextu W3C Trace:Prihlásenie na hypertextový odkaz je viditeľné.

Špecifikácia W3C Trace Context definuje štandardy a formáty pre HTTP hlavičky na šírenie informácií o kontexte distribuovaného sledovania. Definuje 2 polia, ktoré sa používajú na šírenie toku trasy v HTTP hlavičke požiadavky. Pozrime sa na tieto 2 polia v štandardnej definícii:

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

pole parentparentu

Špecifikácia pre pole traceparent je definovaná vo forme Rozšíreného Baccos Paradigmu (ABNF) a pozostáva zo 4 častí:
Version - traceID - parentid/spanid - traceflags

Napríklad:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Hodnota je presne rovnaká v tom istom odkaze
  • Parent-ID/SPAN-ID: 8 bajtov na vyjadrenie rodiča aktuálneho spanu v prichádzajúcej alebo odchádzajúcej požiadavke.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Všetky polia sú kódované v hexadecimálnom formáte, ako je znázornené na obrázku nižšie:



.NET distribuované trasovanie

Distribuované trasovanie je diagnostická technika, ktorá pomáha inžinierom lokalizovať poruchy a problémy s výkonom v aplikáciách, najmä tých, ktoré môžu byť distribuované medzi viacerými počítačmi alebo procesmi. Táto technika koreluje prácu vykonanú rôznymi aplikačnými komponentmi prostredníctvom sledovania požiadaviek v aplikácii a oddeľuje ju od inej práce, ktorú môže aplikácia vykonávať pri spracovaní súbežných požiadaviek. Napríklad load balancer môže najprv prijať požiadavku na typickú webovú službu, potom ju preposlať procesu webového servera a následne zadať viacero dotazov do databázy. Vďaka distribuovanému sledovaniu môžu inžinieri rozlíšiť, či tieto kroky zlyhali, ako dlho každý krok trvá a aké správy môžu byť zaznamenané pri každom kroku.

V .NET bola knižnica System.Diagnostics.Activity nakonfigurovaná tak, aby používala štandard W3C. Hlavička traceparent v štýle W3C Request-Id bola pridaná v ASP.NET Core 2.0. Ak ho chcete zmeniť na hlavičku traceparent, ktorá zodpovedá W3C Trace Context, nastavte statickú vlastnosť Activity.DefaultIdFormat na W3C pri spustení programu. Kód je nasledovný:
Testovací proces,Prehliadač -> Rozhranie služby A (/http, backend používa HttpClient na požiadavku služby B) -> rozhranie služby B (/test), Služba A vydáva svoj vlastný Trace Context a Trace Context služby B, kód je nasledovný:
Začnite služby A a B, ako je znázornené na nasledujúcom obrázku:



Prehliadač otvára Službu A, ako je znázornené na nasledujúcom obrázku:


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

Obsah odpovede:{"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:
{
  Dátum: Po 22. dec 2025 01:37:21 GMT
  Server: Kestrel
  Prenosové kódovanie: rozdelené na kúsky
  Spojenie: udržiavať nažive
  Typ obsahu: application/json; charset=utf-8
}, Request = Metóda: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Verzia: 1.1, Obsah: <null>, Hlavičky:
{
  TraceParent: 00-9891603E6C4921598951F425D98E4DF7-E0336CC56A4F2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Pomocou nástroja na zachytávanie paketov Charles Proxy sú požiadavky a odpovede nasledovné:



Ak chcete zakázať, aby HttpClient neprešiel cez traceparent, premenné prostredia sú nastavené nasledovne:

Referencia:

Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:010 Editor nemá štandardne šablónu DEX
Budúci:Kompilácia front-end projektu Nemôže nastaviť vlastnosti nedefinovaných (nastavenie 'rodiča')
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com