Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 56|Atsakyti: 0

[ASP.NET] ASP.NET Core (34) Sekti kontekstą

[Kopijuoti nuorodą]
Paskelbtaprieš 4 dienas | | | |
Reikalavimai: Mikropaslaugų architektūroje, susidūrus su problemomis, dažnai labai sunku pašalinti triktis, nežinant, ar tai yra paslaugos išmesta išimtis, gali būti, kad paslauga rašo klaidą, arba yra problemų dėl paslaugą iškviečiančios paslaugos perduodamos informacijos. Jei galima įrašyti visų užklausų kontekstą, tai yra nuorodą į visą operacijos užklausą, labai svarbu pašalinti triktis ir išanalizuoti problemą.

Peržiūra:
ASP.NET Core nuorodų sekimas (2) naudoja SkyAPM integraciją
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core Link Tracing (4) Prieiga prie Jaeger nuorodų sekimo
https://www.itsvse.com/thread-9537-1-1.html

Išimčių rietuvės pėdsakai idealiai tinka programoms, skirtoms vienam procesui, pvz., monolitinei programų sistemai. Tačiau, kita vertus, dirbant su paskirstytomis programomis, pvz., mikropaslaugų architektūromis, rietuvės pėdsakų nepakanka, kad būtų parodytas bendras pranešimo sekimas. Štai kodėl paskirstytos sekimo priemonės ir standartai tampa būtini. W3C apibrėžia šio tipo sekimo standartą, vadinamą Trace Context.

Sekti konteksto standartą

W3C Trace konteksto dokumentacija:Hipersaito prisijungimas matomas.

W3C sekimo konteksto specifikacija apibrėžia HTTP antraščių standartus ir formatus, skirtus paskirstyto sekimo konteksto informacijai platinti. Jame apibrėžiami 2 laukai, kurie naudojami sekimo srautui platinti HTTP užklausos antraštėje. Pažvelkime į šiuos 2 standartinio apibrėžimo laukus:

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

Laukas "TraceParent"

Traceparent lauko specifikacija apibrėžiama išplėstinės Baccos paradigmos (ABNF) forma ir susideda iš 4 dalių:
versija - traceid - parentid/spanid - traceflags

Pavyzdžiui:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Toje pačioje nuorodoje reikšmė yra lygiai tokia pati
  • parent-id/span-id: 8 baitai, skirti išreikšti dabartinio intervalo pirminį gaunamoje arba siunčiamoje užklausoje.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Visi laukai yra užkoduoti šešioliktaine, kaip parodyta paveikslėlyje žemiau:



.NET paskirstytas sekimas

Paskirstytas sekimas yra diagnostikos metodas, padedantis inžinieriams lokalizuoti programų gedimus ir našumo problemas, ypač tas, kurios gali būti paskirstytos keliuose kompiuteriuose ar procesuose. Šis metodas susieja skirtingų programos komponentų atliekamą darbą per užklausų sekimą programoje ir atskiria jį nuo kitų darbų, kuriuos programa gali atlikti tvarkydama vienu metu vykdomas užklausas. Pavyzdžiui, apkrovos balansavimo priemonė pirmiausia gali gauti tipinės žiniatinklio tarnybos užklausą, tada persiųsti ją į žiniatinklio serverio procesą ir pateikti kelias užklausas duomenų bazei. Naudodami paskirstytą sekimą, inžinieriai gali atskirti, ar šie veiksmai nepavyko, kiek laiko užtrunka kiekvienas veiksmas ir kokie pranešimai gali būti registruojami, kai atliekamas kiekvienas veiksmas.

.NET System.Diagnostics.Activity biblioteka sukonfigūruota naudoti W3C standartą. W3C stiliaus traceparent antraštė Request-Id antraštė buvo įtraukta į ASP.NET Core 2.0. Norėdami pakeisti ją į W3C sekimo kontekstą atitinkančią antrinę antraštę, paleidę programą nustatykite statinę ypatybę Activity.DefaultIdFormat į W3C. Kodas yra toks:
bandymo procesas,Naršyklė -> A paslauga (/http, backend naudoja HttpClient B paslaugai užklausti) sąsaja -> B paslaugos (/test) sąsaja, A paslauga išveda savo sekimo kontekstą, o B paslaugos sekimo kontekstą, kodas yra toks:
Paleiskite A ir B paslaugas, kaip parodyta šiame paveikslėlyje:



Naršyklė atidaro paslaugą A, kaip parodyta šiame paveikslėlyje:


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

Atsakymo turinys:{"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:
{
  Data: Mon, 22 Dec 2025 01:37:21 GMT
  Serveris: Kestrel
  Perdavimo kodavimas: fragmentas
  Ryšys: išlaikyti gyvą
  Turinio tipas: application/json; simbolių rinkinys=utf-8
}, užklausa = metodas: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', versija: 1.1, turinys: <null>, antraštės:
{
  Pėdsakas: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Naudojant "Charles Proxy" paketų fiksavimo įrankį, užklausa ir atsakymas yra tokie:



Jei norite išjungti HttpClient perdavimą traceparent, aplinkos kintamieji nustatomi taip:

Nuoroda:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.




Ankstesnis:010 redaktorius pagal numatytuosius nustatymus nėra su DEX šablonu
Kitą:Išorinio projekto kompiliavimas Neįmanoma nustatyti neapibrėžtų ypatybių (nustatymas 'pirminis')
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com