Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 157|Antwort: 0

[ASP.NET] ASP.NET Core (34) Trace-Kontext

[Link kopieren]
Veröffentlicht am 22.12.2025 09:54:17 | | | |
Anforderungen: In der Microservice-Architektur ist es bei Problemen oft sehr schwierig, Fehler zu beheben, da man nicht weiß, ob es sich um eine Ausnahme handelt, die vom Service ausgelöst wird; es kann daran liegen, dass der Dienst einen Fehler schreibt oder es ein Problem mit den Informationen gibt, die vom Service übermittelt werden, der den Service aufruft. Wenn der Kontext aller Anfragen aufgezeichnet werden kann, also die Verbindung zur gesamten vollständigen Transaktionsanfrage, ist es entscheidend, das Problem zu beheben und zu analysieren.

Rezension:
ASP.NET Core Link Tracing (2) verwendet SkyAPM-Integration
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Core Link Tracing (4) Zugriff auf Jaeger Link Tracing
https://www.itsvse.com/thread-9537-1-1.html

Ausnahmestack-Traces sind ideal für Anwendungen, die auf einen einzelnen Prozess abzielen, wie etwa ein monolithisches Anwendungssystem. Andererseits reichen Stack-Traces für den Umgang mit verteilten Anwendungen wie Microservices-Architekturen nicht aus, um die gesamte Nachrichtenspur darzustellen. Deshalb sind Werkzeuge und Standards für verteiltes Nachverfolgen notwendig. Das W3C definiert einen Standard für diese Art von Spur namens Trace Context.

Trace Context Standard

W3C Trace Context Dokumentation:Der Hyperlink-Login ist sichtbar.

Die W3C Trace Context-Spezifikation definiert Standards und Formate für HTTP-Header zur Weitergabe verteilter Trace-Kontextinformationen. Es definiert zwei Felder, die verwendet werden, um den Trace-Fluss im HTTP-Anfrage-Header weiterzugeben. Schauen wir uns diese zwei Felder in der Standarddefinition an:

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

traceparent-Feld

Die Spezifikation für das traceparent-Feld ist in Form des Extended Baccos Paradigm (ABNF) definiert und besteht aus 4 Teilen:
Version - traceid - parentid/spanid - traceflags

Zum Beispiel:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Der Wert ist im selben Link exakt gleich
  • Parent-ID/SPAN-ID: 8 Bytes, um den Elternteil des aktuellen SPAN in einer eingehenden oder ausgehenden Anfrage auszudrücken.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Alle Felder sind hexadezimal codiert, wie im untenstehenden Bild gezeigt:



.NET-verteiltes Tracking

Distributed Tracing ist eine Diagnosetechnik, die Ingenieuren hilft, Fehler und Leistungsprobleme in Anwendungen zu lokalisieren, insbesondere solche, die über mehrere Computer oder Prozesse verteilt sein können. Diese Technik korreliert die von verschiedenen Anwendungskomponenten geleistete Arbeit durch Request Tracking in der Anwendung und trennt sie von anderen Arbeiten, die die Anwendung bei gleichzeitiger Bearbeitung von Anfragen ausführen könnte. Zum Beispiel kann ein Load Balancer zunächst eine Anfrage für einen typischen Webservice erhalten, diese dann an einen Webserver-Prozess weiterleiten und anschließend mehrere Abfragen an die Datenbank senden. Mit verteiltem Nachverfolgen können Ingenieure erkennen, ob diese Schritte fehlgeschlagen haben, wie lange jeder Schritt dauert und welche Nachrichten beim Ausführen protokolliert werden können.

In .NET wurde die System.Diagnostics.Activity-Bibliothek so konfiguriert, dass sie den W3C-Standard verwendet. Der W3C-ähnliche traceparent-Header Request-Id wurde in ASP.NET Core 2.0 hinzugefügt. Um es in einen Traceparent-Header zu ändern, der dem W3C-Trace-Kontext entspricht, setzen Sie beim Start des Programms die statische Eigenschaft Activity.DefaultIdFormat auf W3C. Der Code lautet wie folgt:
Testprozess,Browser -> Dienst A (/http, Backend nutzt HttpClient zur Anfrage von Dienst B) Schnittstelle -> Dienst B (/test) Schnittstelle, Dienst A gibt seinen eigenen Trace-Kontext und den Trace-Kontext von Service B aus, der Code lautet wie folgt:
Starte die Dienste A und B, wie in der folgenden Abbildung dargestellt:



Der Browser öffnet Service A, wie in der folgenden Abbildung gezeigt:


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

Inhalt der Antwort:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"Keine","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:
{
  Datum: Mo, 22. Dez 2025 01:37:21 GMT
  Kellner: Kestrel
  Transfer-Kodierung: gehackt
  Verbindung: am Leben bleiben
  Inhaltstyp: application/json; charset=utf-8
}, Request = Methode: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Version: 1.1, Inhalt: <null>, Headers:
{
  traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Mit dem Charles Proxy Paketerfassungstool sind Anfrage und Antwort wie folgt:



Wenn Sie den HttpClient daran hindern möchten, Traceparent zu übergeben, werden die Umgebungsvariablen wie folgt gesetzt:

Referenz:

Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.




Vorhergehend:Der 010-Editor wird standardmäßig nicht mit einer DEX-Vorlage geliefert
Nächster:Frontend-Projektkompilierung Kann keine undefinierten Eigenschaften festlegen (setzt 'parent')
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com