Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 56|Отговор: 0

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

[Копирай линк]
Публикувано вПреди 4 дни | | | |
Изисквания: В архитектурата на микросервизите, при среща с проблеми, често е много трудно да се диагностицира, тъй като не се знае дали това е изключение, хвърлено от услугата, може да е грешка или да има проблем с информацията, предавана от услугата, която извиква услугата. Ако контекстът на всички заявки може да бъде записан, тоест връзката към цялата заявка за пълна транзакция, критично е да се диагностицира и анализира проблема.

Преглед:
ASP.NET Core link trace (2) използва интеграция със SkyAPM
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Проследяване на основни връзки (4) Достъп до проследяване на връзки с Ягер
https://www.itsvse.com/thread-9537-1-1.html

Следите на стека изключения са идеални за приложения, които таргетират един процес, като монолитна система за приложения. Но от друга страна, за работа с разпределени приложения, като архитектури на микроуслуги, стековите следи не са достатъчни, за да покажат цялостната следа на съобщението. Затова разпределените инструменти и стандарти за проследяване стават необходими. W3C дефинира стандарт за този тип трасе, наречен Trace Context.

Стандарт Trace Context

Документация на контекста на W3C Trace:Входът към хиперлинк е видим.

Спецификацията W3C Trace Context дефинира стандарти и формати за HTTP заглавия за разпространение на разпределена контекстна информация за проследяване. Той дефинира 2 полета, които се използват за разпространение на потока от следи в заглавието на HTTP заявката. Нека разгледаме тези две полета в стандартната дефиниция:

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

Следово-родителско поле

Спецификацията за следовото поле е дефинирана под формата на Разширената парадигма на Баккос (ABNF) и се състои от 4 части:
версия - traceid - parentid/spanid - traceflags

Например:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Стойността е абсолютно същата в същата връзка
  • Parent-ID/Span-ID: 8 байта за изразяване на родителя на текущия обхват в входяща заявка или изходяща заявка.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Всички полета са кодирани в шестнадесетично, както е показано на изображението по-долу:



.NET разпределено проследяване

Разпределеното проследяване е диагностична техника, която помага на инженерите да локализират повреди и проблеми с производителността в приложения, особено тези, които могат да бъдат разпределени между множество компютри или процеси. Тази техника свързва работата, извършена от различни компоненти на приложението, чрез проследяване на заявки в приложението, и я отделя от другите задачи, които приложението може да извърши при обработка на едновременни заявки. Например, балансьор на натоварването може първо да получи заявка за типична уеб услуга, след това да я препрати към уеб сървърен процес и след това да изпрати множество заявки към базата данни. С разпределено проследяване инженерите могат да разграничат дали тези стъпки са се провалили, колко време отнема всяка стъпка и какви съобщения могат да бъдат записани при изпълнение на всяка стъпка.

В .NET библиотеката System.Diagnostics.Activity е конфигурирана да използва стандарта W3C. Header Request-Id в стил W3C беше добавен в ASP.NET Core 2.0. За да го промените в traceparent заглавие, което съответства на W3C Trace Context, задайте статичното свойство Activity.DefaultIdFormat на W3C при стартиране на програмата. Кодът е следният:
Тестов процес,Браузър -> A услуга (/http, бекенд използва HttpClient за заявка на B услуга) интерфейс -> B service (/test) интерфейс, Услуга A извежда свой собствен Trace Context и Trace Context на Услуга B, кодът е следният:
Стартиране на услуги A и B, както е показано на следната фигура:



Браузърът отваря Услуга А, както е показано на следващата фигура:


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

Съдържание на отговора:{"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:
{
  Дата: Пон, 22 дек 2025 01:37:21 GMT
  Сервитьор: Kestrel
  Трансферно кодиране: на части
  Връзка: поддържане на живо
  Тип съдържание: application/json; Чарсет=UTF-8
}, Request = Метод: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Версия: 1.1, Съдържание: <null>, Заглавия:
{
  Traceparent: 00-9891603E6C4921598951F425D98E4df7-E0336cc56A4F2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Използвайки инструмента за улавяне на пакети Charles Proxy, заявката и отговорът са както следва:



Ако искате да изключите HttpClient да предава traceparent, променливите на околната среда се задават по следния начин:

Препратка:

Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.




Предишен:010 Editor по подразбиране не идва с DEX шаблон
Следващ:Компилация на фронтенд проекти Не може да се задават свойствата на неопределени (задаване на 'parent')
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com