> ## 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.

# Benutzerdefinierte Go-Instrumentierung

AppSignal ist kompatibel mit OpenTelemetry-Instrumentierungspaketen.
Einige dieser [Instrumentierungspakete](/go/instrumentations) erfordern möglicherweise eine zusätzliche Einrichtung.

Diese enthalten nicht immer die Informationen, die Sie zum Debuggen von Problemen benötigen.
Für ein feingranulareres Reporting können Sie benutzerdefinierte Instrumentierung hinzufügen.

Wir unterstützen [OpenTelemetry-Tracing][manual] wie in der OpenTelemetry-Dokumentation beschrieben.
Es ist möglich, einem Span mithilfe von OpenTelemetry-Span-Attributen weitere Daten hinzuzufügen.

Es gibt außerdem AppSignal-Span-Attribute, die ändern können, wie Traces gruppiert werden, sowie einige Attribute, die das Herausfiltern sensibler Daten ermöglichen.

## Einrichtung

Wenn Sie benutzerdefinierte Instrumentierung hinzufügen, importieren Sie zunächst das OpenTelemetry-Trace-Paket in der Datei, der Sie die Instrumentierung hinzufügen möchten.

<CodeGroup>
  ```go Go theme={null}
  import (
  	"go.opentelemetry.io/otel"
  	"go.opentelemetry.io/otel/attribute"
  	"go.opentelemetry.io/otel/trace"
  )
  ```
</CodeGroup>

## Einen neuen Span erstellen

Erstellen Sie mit dem während der [Installation](/go/installation) initialisierten Tracer einen neuen Span.

<CodeGroup>
  ```go Go theme={null}
  var tracer = otel.Tracer("my-tracer-name")

  func httpHandler(w http.ResponseWriter, r *http.Request) {
  	// Create a new span from the parent context
  	ctx, span := tracer.Start(r.Context(), "hello-span")
  	// Defer closing the span to the end of this function
  	defer span.End()

  	// Set attributes
  }
  ```
</CodeGroup>

*Hinweis: In diesen Beispielen verlassen wir uns auf den Kontext aus dem HTTP-Request, der durch `r.Context()` bereitgestellt wird.*
*Das Empfangen des Kontexts kann in Ihrer Anwendung anders sein.*

## Den aktuellen Span abrufen

Sie können den aktuellen Span auch mit dem während der [Installation](/go/installation) initialisierten Tracer abrufen:

<CodeGroup>
  ```go Go theme={null}
  func httpHandler(w http.ResponseWriter, r *http.Request) {
  	ctx := r.Context()
      span := trace.SpanFromContext(ctx)

  	// Set attributes
  }
  ```
</CodeGroup>

*Hinweis: Dies gibt nur dann einen Span zurück, wenn bereits einer aktiv ist.*

Weitere Möglichkeiten zum Erstellen und Abrufen von Spans sind auf der [OpenTelemetry-Go-Instrumentierungsseite][manual] dokumentiert.

## AppSignal-Attribute

Sobald Sie einen Span erstellt oder abgerufen haben, können Sie bestimmte AppSignal-spezifische Attribute setzen, um anzupassen, wie die Daten in AppSignal eintreffen.

<CodeGroup>
  ```go Go theme={null}
  span = // Create a new span or fetch the current span
  span.SetAttributes(attribute.String("attribute_name", "attribute value"))
  ```
</CodeGroup>

Weitere Informationen dazu, welche benutzerdefinierten AppSignal-Attribute unterstützt werden, finden Sie in unseren Leitfäden:

* [Tagging-Leitfaden](/guides/tagging)
* [Leitfaden zur Datenanpassung](/guides/custom-data)

[manual]: https://opentelemetry.io/docs/languages/go/instrumentation/
