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:
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. |