Distributed Tracing
Verfolgen Sie Anfragen mit Activity über mehrere Services hinweg.
Distributed Tracing ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist verteiltes Tracing?
Verteiltes Tracing verfolgt eine einzelne Anfrage auf ihrem Weg durch mehrere Dienste und Komponenten. Jede Arbeitseinheit wird zu einem Span, und die verbundenen Spans bilden einen Trace, der als Zeitachse verschachtelter Vorgänge visualisiert wird.
Spans und Traces
Ein Span hat einen Namen, eine Start- und eine Endzeit, Attribute sowie einen Status. Spans werden verschachtelt: Ein übergeordneter Span (die HTTP-Anfrage) enthält untergeordnete Spans (eine Datenbankabfrage, einen ausgehenden Aufruf). Ein gesamter Baum verwendet dieselbe Trace-ID.
Activity ist der .NET-Span
In .NET ist die Klasse System.Diagnostics.Activity die Implementierung eines OpenTelemetry-Spans. Sie erstellen Activities aus einer ActivitySource.
using System.Diagnostics;
private static readonly ActivitySource Source =
new("Checkout.Orders");Eine Activity starten
StartActivity startet einen Span. Verwenden Sie ihn in einem using-Block, damit er beim Verlassen des Blocks beendet wird und seine Dauer aufgezeichnet werden kann.
using Activity activity = Source.StartActivity("PlaceOrder");
// work happens here; span ends when disposedTags zu einem Span hinzufügen
Tags (Attribute) fügen einem Span Kontext in Form von Schlüssel-Wert-Paaren hinzu, etwa eine Bestell-ID oder einen Betrag. Dadurch werden Traces durchsuchbar und aussagekräftig.
activity?.SetTag("order.id", orderId);
activity?.SetTag("order.amount", amount);Ereignisse und Status aufzeichnen
Verwenden Sie AddEvent für zeitpunktbezogene Anmerkungen und SetStatus, um Erfolg oder Fehler zu kennzeichnen. Dadurch werden Fehler in Ihrem Tracing-Backend sichtbar.
activity?.AddEvent(new ActivityEvent("inventory.reserved"));
activity?.SetStatus(ActivityStatusCode.Error, "Payment declined");Die ActivitySource registrieren
OTel erfasst nur Activities aus Quellen, die Sie mit AddSource registrieren. Teilen Sie dem Tracer daher den Namen Ihrer ActivitySource mit.
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddSource("Checkout.Orders"));Automatische Instrumentierung
Die integrierte Instrumentierung erstellt automatisch Spans für eingehende ASP.NET-Core-Anfragen und ausgehende HttpClient-Aufrufe. So erhalten Sie ohne zusätzlichen Code einen grundlegenden Trace.
tracing
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation();Kontextweitergabe
Damit sich ein Trace über mehrere Dienste erstrecken kann, muss die Trace-ID zwischen ihnen übertragen werden. OTel fügt sie in ausgehende HTTP-Header ein (W3C traceparent) und liest sie am empfangenden Ende aus. So werden Spans automatisch zu einem Trace verbunden.
Beziehungen zwischen übergeordneten und untergeordneten Spans
Wenn Sie eine Activity starten, während eine andere aktuell ist, wird die neue über Activity.Current zu ihrer untergeordneten Activity. Durch diese Verschachtelung entsteht der Trace-Baum ohne manuelle Verknüpfung.
using var parent = Source.StartActivity("PlaceOrder");
using var child = Source.StartActivity("ChargeCard");
// child is nested under parent automaticallySampling
Das Aufzeichnen jeder Anfrage kann teuer sein. Beim Sampling wird nur ein Teil der Anfragen aufgezeichnet (zum Beispiel 10 %), um die Kosten zu kontrollieren und dennoch repräsentative Daten zu erhalten.
Kurzer Test
Testen Sie verteiltes Tracing.
Zusammenfassung
Verteiltes Tracing verfolgt eine Anfrage anhand verbundener Spans, die dieselbe Trace-ID verwenden. In .NET ist Activity der Span, der aus einer registrierten ActivitySource über StartActivity erstellt wird (verwenden Sie using, um ihn zu beenden). Fügen Sie mit SetTag, AddEvent und SetStatus Kontext hinzu. Automatische Instrumentierung und die W3C-Kontextweitergabe verbinden Traces über mehrere Dienste hinweg; Sampling kontrolliert die Kosten.
Häufig gestellte Fragen
Ist die Lektion „Distributed Tracing“ kostenlos?
Ja — der vollständige Text von „Distributed Tracing“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Distributed Tracing“?
Verfolgen Sie Anfragen mit Activity über mehrere Services hinweg. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Distributed Tracing“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Die drei Säulen der Observability
- Distributed Tracing
- Metriken erfassen
- An Backends exportieren