Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 56|Odpowiedź: 0

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

[Skopiuj link]
Opublikowano4 dni temu | | | |
Wymagania: W architekturze mikroserwisów, gdy napotykamy problemy, często bardzo trudno jest rozwiązać problem, nie wiedząc, czy jest to wyjątek wyrzucony przez usługę, może to być zapis błędu, czy też problem z informacjami przesyłanymi przez usługę, która wywołuje usługę. Jeśli można zarejestrować kontekst wszystkich żądań, czyli łącze do całego żądania pełnej transakcji, kluczowe jest rozwiązywanie i analiza problemu.

Recenzja:
ASP.NET Core link tracing (2) wykorzystuje integrację ze SkyAPM
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core Link Tracing (4) Dostęp do trasowania łączy Jaegera
https://www.itsvse.com/thread-9537-1-1.html

Śledzenia stosu wyjątków są idealne dla aplikacji skierowanych do jednego procesu, takich jak monolityczny system aplikacyjny. Z drugiej strony, w przypadku aplikacji rozproszonych, takich jak architektury mikroserwisów, ślady stosu nie wystarczają, by pokazać ogólny ślad wiadomości. Dlatego właśnie narzędzia i standardy śledzenia rozproszonego stają się niezbędne. W3C definiuje standard dla tego typu śladu zwany Kontekstem Śladu.

Standard kontekstu śladowego

Dokumentacja kontekstu W3C Trace:Logowanie do linku jest widoczne.

Specyfikacja kontekstu śledzenia W3C definiuje standardy i formaty nagłówków HTTP w celu propagowania rozproszonych informacji o kontekście śledzenia. Definiuje 2 pola używane do propagowania przepływu śladów w nagłówku HTTP request. Przyjrzyjmy się tym dwóm polom w standardowej definicji:

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

pole nadrzędne trace

Specyfikacja pola traceparent jest zdefiniowana w formie Rozszerzonego Paradygmatu Baccos (ABNF) i składa się z 4 części:
Version - traceId - parentID/Spanid - Traceflags

Na przykład:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Wartość jest dokładnie taka sama w tym samym linku
  • parent-ID/span-ID: 8 bajtów do wyrażenia rodzica bieżącego spanu w żądaniu przychodzonym lub wychodzącym żądaniu.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Wszystkie pola są kodowane w systemie szesnastkowym, jak pokazano na poniższym obrazku:



Rozproszone śledzenie .NET

Śledzenie rozproszone to technika diagnostyczna pomagająca inżynierom lokalizować awarie i problemy z wydajnością w aplikacjach, zwłaszcza tych, które mogą być rozproszone na wielu komputerach lub procesach. Technika ta koreluje pracę wykonywaną przez różne komponenty aplikacji poprzez śledzenie żądań w aplikacji i oddziela ją od innych zadań, które aplikacja może wykonywać podczas obsługi jednoczesnych żądań. Na przykład load balancer może najpierw otrzymać żądanie dla typowej usługi webowej, następnie przekazać je do procesu serwera WWW, a następnie wysłać wiele zapytań do bazy danych. Dzięki śledzeniu rozproszonym inżynierowie mogą rozpoznać, czy te kroki zawiodły, ile czasu zajmuje każdy krok oraz jakie wiadomości mogą być rejestrowane podczas wykonywania każdego kroku.

W .NET biblioteka System.Diagnostics.Activity została skonfigurowana do korzystania ze standardu W3C. Nagłówek traceparent w stylu W3C, Request-Id, został dodany w ASP.NET Core 2.0. Aby zmienić go na nagłówek traceparent zgodny z kontekstem śledzenia W3C, ustaw statyczną właściwość Activity.DefaultIdFormat na W3C przy uruchamianiu programu. Kod jest następujący:
Proces testowy,Przeglądarka -> Interfejs usługi A (/http, backend korzysta z HttpClient do żądania usługi B) -> interfejs usługi B (/test), Usługa A generuje własny Kontekst Śladu oraz Kontekst Śladu Usługi B, a kod wygląda następująco:
Rozpocznij usługi A i B, jak pokazano na poniższym rysunku:



Przeglądarka otwiera Usługę A, jak pokazano na poniższym rysunku:


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

Treść odpowiedzi:{"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: poniedziałek, 22 gru 2025 01:37:21 GMT
  Serwer: Kestrel
  Transfer-Encoding: chunked
  Połączenie: zachowaj życie
  Typ treści: application/json; Charset=UTF-8
}, Request = Metoda: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Wersja: 1.1, Treść: <null>, Nagłówki:
{
  Traceparent: 00-9891603e6c4921598951F425D98E4DF7-E0336CC56A4F2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Korzystając z narzędzia Charles Proxy do przechwytywania pakietów, żądania i odpowiedzi wyglądają następująco:



Jeśli chcesz wyłączyć HttpClient przed przekazywaniem traceparent, zmienne środowiskowe są ustawione następująco:

Odniesienie:

Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.




Poprzedni:Edytor 010 domyślnie nie zawiera szablonu DEX
Następny:Kompilacja projektu front-end Nie można ustawić właściwości niezdefiniowanych (ustawiając 'rodzica')
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com