Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 56|Atbildi: 0

[ASP.NET] ASP.NET Core (34) Izsekošanas konteksts

[Kopēt saiti]
Publicētspirms 4 dienām | | | |
Prasības: Mikropakalpojumu arhitektūrā, saskaroties ar problēmām, bieži vien ir ļoti grūti novērst problēmas, nezinot, vai tas ir pakalpojuma izmestais izņēmums, var būt, ka pakalpojums raksta kļūdu, vai arī ir problēma ar informāciju, ko pārraida pakalpojums, kas izsauc pakalpojumu. Ja var ierakstīt visu pieprasījumu kontekstu, tas ir, saiti uz visu pilnu darījuma pieprasījumu, ir svarīgi novērst un analizēt problēmu.

Pārskats:
ASP.NET Core saišu izsekošana (2) izmanto SkyAPM integrāciju
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core Link Tracing (4) Piekļuve Jaeger saišu izsekošanai
https://www.itsvse.com/thread-9537-1-1.html

Izņēmumu steka izsekošana ir ideāli piemērota lietojumprogrammām, kuru mērķauditorija ir viens process, piemēram, monolīta lietojumprogrammu sistēma. Bet, no otras puses, lai strādātu ar izplatītām lietojumprogrammām, piemēram, mikropakalpojumu arhitektūrām, steka izsekošana nav pietiekama, lai parādītu kopējo ziņojumu izsekošanu. Tāpēc ir nepieciešami izplatīti izsekošanas rīki un standarti. W3C definē šāda veida izsekošanas standartu, ko sauc par izsekošanas kontekstu.

Izsekošanas konteksta standarts

W3C Trace konteksta dokumentācija:Hipersaites pieteikšanās ir redzama.

W3C izsekošanas konteksta specifikācija definē HTTP galveņu standartus un formātus, lai izplatītu izplatīto izsekošanas konteksta informāciju. Tas definē 2 laukus, kas tiek izmantoti, lai izplatītu izsekošanas plūsmu HTTP pieprasījuma galvenē. Apskatīsim šos 2 laukus standarta definīcijā:

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

Lauks TraceParent

Traceparent lauka specifikācija ir definēta paplašinātās Baccos paradigmas (ABNF) veidā un sastāv no 4 daļām:
versija - traceid - parentid/spanid - traceflags

Piemēram:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Vērtība tajā pašā saitē ir tieši tāda pati
  • parent-id/span-id: 8 baiti, lai izteiktu pašreizējā diapazona vecāku ienākošajā vai izejošajā pieprasījumā.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Visi lauki ir kodēti heksadecimālā, kā parādīts zemāk redzamajā attēlā:



.NET izplatītā izsekošana

Izkliedētā izsekošana ir diagnostikas metode, kas palīdz inženieriem lokalizēt kļūmes un veiktspējas problēmas lietojumprogrammās, īpaši tajās, kas var būt sadalītas vairākos datoros vai procesos. Šis paņēmiens korelē dažādu lietojumprogrammu komponentu paveikto darbu, izmantojot pieprasījumu izsekošanu lietojumprogrammā, un atdala to no cita darba, ko lietojumprogramma var veikt, apstrādājot vienlaicīgus pieprasījumus. Piemēram, slodzes balansētājs vispirms var saņemt tipiska tīmekļa pakalpojuma pieprasījumu, pēc tam pārsūtīt to uz tīmekļa servera procesu un pēc tam izdot vairākus vaicājumus datu bāzei. Izmantojot izkliedēto izsekošanu, inženieri var atšķirt, vai šie soļi neizdevās, cik ilgs laiks aizņem katru soli un kādi ziņojumi var tikt reģistrēti, kad katrs solis tiek izpildīts.

Programmā .NET System.Diagnostics.Activity bibliotēka ir konfigurēta, lai izmantotu W3C standartu. W3C stila izsekošanas galvenes Request-ID galvene tika pievienota ASP.NET Core 2.0. Lai to mainītu uz traceparent galveni, kas atbilst W3C izsekošanas kontekstam, startējot programmu, iestatiet statisko rekvizītu Activity.DefaultIdFormat uz W3C. Kods ir šāds:
testa process,Pārlūkprogramma -> A pakalpojums (/http, aizmugursistēma izmanto HttpClient, lai pieprasītu B pakalpojumu) interfeiss -> B pakalpojuma (/test) interfeiss, A pakalpojums izvada savu izsekošanas kontekstu un pakalpojuma B izsekošanas kontekstu, kods ir šāds:
Startējiet pakalpojumus A un B, kā parādīts šajā attēlā:



Pārlūkprogramma atver pakalpojumu A, kā parādīts šajā attēlā:


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

Atbildes saturs:{"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:
{
  Datums: Mon, 22 Dec 2025 01:37:21 GMT
  Serveris: Kestrel
  Pārsūtīšanas kodējums: sadalīts
  Savienojums: uzturēt dzīvu
  Satura tips: lietojumprogramma/json; rakstzīmju kopa=utf-8
}, Pieprasījums = Metode: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Versija: 1.1, Saturs: <null>, Galvenes:
{
  Izsekotājs: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Izmantojot Charles Proxy pakešu tveršanas rīku, pieprasījums un atbilde ir šāda:



Ja vēlaties atspējot HttpClient nodot traceparent, vides mainīgie tiek iestatīti šādi:

Atsauce:

Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.




Iepriekšējo:010 redaktoram pēc noklusējuma nav DEX veidnes
Nākamo:Priekšgala projekta kompilācija Nevar iestatīt nedefinētus rekvizītus (iestatījums 'vecāks')
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com