> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Verteiltes Tracing

> Verfolgen Sie eine Anfrage über Services und Anwendungen hinweg: wie AppSignal den Subtrace jedes Service zu einem Trace zusammenführt.

Wo verbringt eine langsame Anfrage tatsächlich ihre Zeit? Die Response Time Ihrer
Web-App sieht normal aus, die Datenbank ist ruhig, und die Anfrage dauert trotzdem
vier Sekunden.

Eine einzelne Anfrage kann sich bei einem Service authentifizieren, Daten aus
einer internen API laden, einen Background-Job einreihen und eine Zahlungs-API
eines Drittanbieters aufrufen, bevor die Antwort zurückkommt. Ist sie langsam
oder schlägt sie fehl, liegt die Ursache oft in einem anderen Service als dem,
der das Problem gemeldet hat.

Verteiltes Tracing verfolgt diese Anfrage über diese Grenzen hinweg und führt
die Arbeit aller beteiligten Services in einem Trace zusammen, sodass Sie den
gesamten Weg sehen, statt ihn aus den Daten jedes einzelnen Service selbst
zusammenzusetzen. Stellen Sie es sich wie einen Gruppenchat vor: Jeder Service
antwortet im selben Thread, sodass sich die Anfrage wie eine einzige
Unterhaltung liest statt wie fünf getrennte Chats.

<h2 id="what-is-distributed-tracing">
  Was ist verteiltes Tracing?
</h2>

Wenn jeder Service für sich selbst berichtet, sehen Sie, dass eine Web-Action
langsam ist, aber nicht, dass ein Inventory-Service weiter unten in der
Aufrufkette die Ursache war. In AppSignal ist jeder dieser Services eine eigene
App oder ein eigener Namespace. Um eine Anfrage über sie hinweg zu verfolgen,
müssen Sie jede einzeln öffnen und die Zeitstempel abgleichen.

Verteiltes Tracing entfernt diese Grenzen. Während eine Anfrage von einem
Service zum nächsten wandert, markiert jeder Service seine Arbeit mit
derselben Trace-ID und speichert, von welcher Arbeit sie aufgerufen wurde.
AppSignal nutzt diese IDs, um den vollständigen Weg der Anfrage über alle
beteiligten Services hinweg zu rekonstruieren.

Mit einem verteilten Trace können Sie:

* Eine Anfrage von ihrem Einstiegspunkt bis zu jedem erreichten Service
  verfolgen.
* Sehen, wohin die Zeit geflossen ist, selbst wenn der langsame Teil in einem
  anderen Service oder einer anderen Anwendung läuft.
* Herausfinden, in welchem Service ein Fehler entstanden ist, nicht nur, wo er
  sichtbar wurde.

<h2 id="spans-traces-and-services">
  Spans, Traces und Services
</h2>

AppSignal beschreibt einen Trace anhand von drei Bausteinen.

* **Span**: eine einzelne Arbeitseinheit, etwa eine eingehende HTTP-Anfrage,
  eine Datenbankabfrage, ein Aufruf an einen anderen Service oder ein
  Codeblock, den Sie selbst instrumentieren. Ein Span hat einen Namen, eine
  Dauer und Attribute, und er erfasst den Span, der ihn gestartet hat. Spans
  sind die kleinste Einheit, aus der ein Trace besteht.
* **Trace**: alle Spans, die zu einem durchgängigen Vorgang gehören. Da jeder
  Span seinen Parent-Span kennt, bilden die Spans in einem Trace einen Baum,
  der die Anfrage von Anfang bis Ende beschreibt.
* **Service**: eine benannte Komponente, die an einem Trace beteiligt ist,
  etwa eine Web-App, ein Background-Worker oder eine interne API. Sie benennen
  einen Service mit der Option `service_name` (oder der Umgebungsvariable
  `APPSIGNAL_SERVICE_NAME`), und AppSignal nutzt diesen Namen, um Services
  innerhalb eines Trace zu unterscheiden. Ein einzelner Trace erstreckt sich
  meist über mehrere Services, und diese Services können an unterschiedliche
  AppSignal-Anwendungen berichten.

<Frame caption="Die Spans in einem Trace bilden einen Baum. Jeder Span erfasst den Span, der ihn gestartet hat, vom Root-Span abwärts.">
  <img src="https://mintcdn.com/appsignal-715f5a51/ydExjxcWacNDpILG/assets/images/diagrams/distributed-tracing/span-tree.png?fit=max&auto=format&n=ydExjxcWacNDpILG&q=85&s=ada68a41a3078ae6ab60c8bf9bf578a3" alt="Die Spans eines Trace, angeordnet als Baum, vom Root-Span abwärts durch Parent- und Child-Spans" width="1672" height="941" data-path="assets/images/diagrams/distributed-tracing/span-tree.png" />
</Frame>

<Note>
  AppSignal baut Traces auf OpenTelemetry auf, daher entsprechen diese Begriffe
  denen von OpenTelemetry. AppSignal gruppiert jeden Trace unter einer
  [Action](/appsignal/terminology#actions) und einem
  [Namespace](/application/namespaces), je nach Endpoint, Job oder Task, zu dem
  der Trace gehört.
</Note>

Innerhalb von AppSignal ist ein Trace eine Art
[Sample](/appsignal/terminology#samples): die detaillierte Aufzeichnung einer
Anfrage, gespeichert, damit Sie sie öffnen und Span für Span nachvollziehen
können. AppSignal leitet Ihre Performance-Metriken, etwa Response Time und
Throughput, aus diesen Traces ab, sodass ein Performance-Diagramm und ein
einzelner Trace zwei Ansichten derselben Daten sind.

<h2 id="availability-and-setup">
  Verfügbarkeit und Einrichtung
</h2>

Verteiltes Tracing ist zunächst für Python, Ruby und PHP verfügbar. Andere
Sprachen, etwa Elixir und JavaScript, werden noch nicht unterstützt.

<Note>
  Verteiltes Tracing ist eine **experimentelle Funktion, die nur verfügbar
  ist**, wenn Sie den gehosteten AppSignal Collector verwenden.
</Note>

Ob Sie etwas aktivieren müssen, hängt davon ab, wie Ihre Integration an
AppSignal berichtet. Python und Ruby können entweder über den in der
Integration enthaltenen Agent oder über einen Collector berichten, daher muss
der Collector-Modus konfiguriert werden. PHP und ein individuelles
OpenTelemetry-Setup berichten stets nur über einen Collector, daher gibt es
hier nichts zu aktivieren.

* **Python und Ruby**: Setzen Sie die Option `collector_endpoint` auf die URL
  eines gehosteten statt eines selbst gehosteten Collectors. Der Unterschied
  zwischen beiden wird unter [Collector-Konfiguration für
  Python](/python/configuration/collector), [Collector-Konfiguration für
  Ruby](/ruby/configuration/collector) und [Gehostete vs. selbst gehostete
  Collector](/collector/hosted-vs-self-hosted) erklärt.
* **PHP**: nichts zu konfigurieren. Das PHP-Paket berichtet bereits über einen
  Collector, daher funktioniert verteiltes Tracing, sobald Ihre App an
  AppSignal berichtet.
* **Ein individuelles OpenTelemetry-Setup**: nichts zu konfigurieren. Der
  Export an einen Collector ist die einzige Art, wie diese Setups berichten,
  daher verbinden sich Traces von selbst.

Verteiltes Tracing basiert auf OpenTelemetry und ist daher nicht auf die oben
genannten Integrationen beschränkt. Jede mit OpenTelemetry instrumentierte
Anwendung kann einem Trace beitreten, indem sie ihre Daten an einen gehosteten
Collector exportiert. Das können Sie über eine AppSignal-Integration wie das
PHP-Paket tun oder über ein [individuelles
OpenTelemetry-SDK-Setup](/opentelemetry/installation).

<h2 id="how-does-it-work-in-appsignal">
  Wie funktioniert es in AppSignal?
</h2>

AppSignal baut verteilte Traces auf OpenTelemetry auf, das den Teil übernimmt,
der verteiltes Tracing überhaupt erst möglich macht: die
**Kontextweitergabe**. Wenn ein instrumentierter Service einen anderen Service
aufruft, hängt OpenTelemetry die Trace-ID und den aufrufenden Span an den
ausgehenden Aufruf an. Sie reist als Header auf einer HTTP-Anfrage oder als
Metadaten auf einem eingereihten Job mit, und der empfangende Service liest
sie aus und setzt denselben Trace fort.

Jeder Service berichtet den Teil des Trace, für den er verantwortlich ist,
seinen sogenannten **Subtrace**. AppSignal empfängt diese Subtraces
unabhängig voneinander, oft von unterschiedlichen Prozessen oder Hosts, und
setzt sie anhand der gemeinsamen Trace-ID sowie der Parent- und
Child-Beziehungen zwischen den Spans zu einem Trace zusammen. Sie
konfigurieren die Verbindung zwischen Services nie von Hand. Ist eine
Bibliothek instrumentiert, treten ihre Aufrufe dem Trace automatisch bei.

<Frame caption="Ein Trace erstreckt sich über mehrere Services. Jeder Service berichtet einen Subtrace, und AppSignal fügt die Subtraces zu einem einzigen Trace zusammen.">
  <img src="https://mintcdn.com/appsignal-715f5a51/ydExjxcWacNDpILG/assets/images/diagrams/distributed-tracing/trace-across-services.png?fit=max&auto=format&n=ydExjxcWacNDpILG&q=85&s=c2b8f1d2a9e12f272fdc4583604a4103" alt="Ein Trace über drei Services hinweg, jeder mit seinem eigenen Subtrace und den darin enthaltenen Spans" width="1672" height="941" data-path="assets/images/diagrams/distributed-tracing/trace-across-services.png" />
</Frame>

AppSignal samplet Traces, statt jeden einzelnen zu behalten, und trifft diese
Entscheidung serviceübergreifend: Wird ein Trace behalten, wird auch die
Arbeit aller darin enthaltenen Services behalten, sodass der Trace vollständig
ankommt statt als verstreute Fragmente. Das Sampling bevorzugt die Traces, die
Sie am ehesten sehen möchten: die mit Fehlern und die langsamsten Anfragen. An
den Rändern können weiterhin Lücken entstehen, wenn ein Service nicht
berichtet oder seine Daten zu spät eintreffen.

Das Ergebnis erkunden Sie auf der [Trace-Seite](/trace-page) auf zwei Arten:
der **Service Map**, die die Services im Trace und die Aufrufe zwischen ihnen
zeigt, und der **Trace-Zeitleiste**, die jeden Span zeitlich anordnet. Die
Trace-Seite erklärt, wie Sie beide lesen.

<h3 id="cross-application-support">
  Anwendungsübergreifende Unterstützung
</h3>

Ein Service in AppSignal ist nicht dasselbe wie eine Anwendung. Mehrere
Services können an eine AppSignal-Anwendung berichten, und ein einzelner Trace
kann auch Services überspannen, die zu vollständig getrennten Anwendungen
gehören.

Zum Beispiel könnten eine Web-App, ein Inventory-Service und ein Audit-Service
alle an eine AppSignal-Anwendung berichten, jeweils unter ihrem eigenen
Servicenamen, während ein weiterer Service als eigene Anwendung berichtet.
Eine einzelne Nutzeraktion, etwa ein Checkout, kann einen Trace erzeugen, der
Services aus beiden Anwendungen umfasst.

Die Service Map von AppSignal behandelt dies als einen einzigen Trace,
unabhängig davon, wo jeder Subtrace gemeldet wurde. Sie ermittelt die
Anwendung, zu der jeder Service gehört, und verknüpft jede Karte mit der
Ansicht dieser Anwendung auf denselben Trace. Um eine Anfrage über eine
Anwendungsgrenze hinweg zu verfolgen, wählen Sie die Karte des nächsten
Service aus. Sie wechseln entlang desselben Trace von einer Anwendung zur
nächsten, ohne den Faden zu verlieren.

Das funktioniert, weil sich der Kontext über Prozess- und Anwendungsgrenzen
hinweg genauso weitergibt wie zwischen Services, und AppSignal Subtraces
anhand ihrer gemeinsamen Trace-ID zuordnet, nicht danach, aus welcher
Anwendung oder welchem Host sie stammen.

<h2 id="related">
  Verwandt
</h2>

<CardGroup cols={2}>
  <Card title="Trace-Seite" href="/trace-page">
    Lesen Sie einen Trace: seine Zeitleiste, Span-Details, Tags, verknüpfte
    Logs und Trigger.
  </Card>

  <Card title="Performance / tracing" href="/performance-tracing">
    Untersuchen Sie die Spans und Events innerhalb eines einzelnen Trace.
  </Card>

  <Card title="Custom Instrumentation" href="/custom-instrumentation">
    Fügen Sie dem Trace eigene Spans hinzu, wenn die Standardinstrumentation
    nicht ausreicht.
  </Card>

  <Card title="Namespaces" href="/application/namespaces">
    Wie AppSignal Traces nach Endpoint, Job und Task gruppiert.
  </Card>

  <Card title="Labs" href="/labs">
    Probieren Sie verteiltes Tracing und weitere experimentelle Funktionen
    aus.
  </Card>
</CardGroup>
