OpenTelemetry Instrumentation Attributes

AppSignal supports multiple OpenTelemetry language integrations. However, the data model may not always align perfectly, which can affect how OpenTelemetry data is displayed in the AppSignal interface. By using the attributes listed on this page, you can customize the appearance of trace and span data.

Accessing a span

When customizing the trace or span, first import the OpenTelemetry trace module in the file you want to customize the reported trace data:

Python
# Python from opentelemetry import trace

Using that trace module, create a new span or fetch the current active one:

Python
# Python # Create a new span tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("Span name") as span: # Do stuff # Fetch current span span = trace.get_current_span()

AppSignal attributes

Namespace

This attribute applies to the entire trace. It can be set on a child span, and does not need to be set on the uppermost parent span. This attribute can only be set once per trace. If it is set multiple times, only the attribute from one span in the trace is applied.

  • Attribute name: appsignal.namespace
  • Value type: String

Group traces by namespace for better organization in the AppSignal interface.

Namespaces are grouped per OpenTelemetry service name with the format <Service name>/<Namespace>, e.g. "Web server/admin" or "Background worker/billing". This attribute allows you to configure the namespace part only. The default namespace for all traces is <Service name>/default.

Python
# Python span.set_attribute("appsignal.namespace", "admin")

Root action name

This attribute applies to the entire trace. It can be set on a child span, and does not need to be set on the uppermost parent span. This attribute can only be set once per trace. If it is set multiple times, only the attribute from one span in the trace is applied.

  • Attribute name: appsignal.action_name
  • Value type: String

Set the action name of the trace that will be used to create incidents and group tracing on AppSignal.com. This will overwrite any automated mapping done by the AppSignal support for specific instrumentation. It is useful for traces that are not created by supported libraries. If your trace is grouped with other not named or poorly grouped traces, it may be missing this attribute.

We aim to improve our automatic grouping over time, so please let us know when you find that this attribute is needed.

Python
# Python span.set_attribute("appsignal.action_name", "ControllerName#action")

Tag

Do not use tagging to send personal data such as names or email addresses to AppSignal. If you want to identify a person, consider using a user ID, hash, or pseudonymized identifier instead. You could also use Link Templates to link them back to them in your application.

  • Attribute name: appsignal.tag.<tag_name>
  • Value type: String

Tag traces to bring them to the front on the trace detail pages and filter traces in the AppSignal interface. Multiple tags can be set on spans in a trace. Tags can be added to any span in a trace on any level on the trace.

The tag attribute key is built up out of two parts, the appsignal.tag prefix, and the tag key. For the tag user_id, this becomes appsignal.tag.user_id as an attribute key.

Python
# Python span.set_attribute("appsignal.tag.<tag_name>", "string") # Example format span.set_attribute("appsignal.tag.user_id", user.id)