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
from opentelemetry import trace

Using that trace module, create a new span:

Python
tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("Span name") as span: # Set attribute values span.set_attribute("attribute name", "attribute value")

Or fetch the current active one:

Python
span = trace.get_current_span() # Set attribute values span.set_attribute("attribute name", "attribute value")

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
span.set_attribute("appsignal.namespace", "admin")
Go
span.SetAttributes(attribute.String("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
span.set_attribute("appsignal.action_name", "ControllerName#action")
Go
span.SetAttributes(attribute.String("appsignal.action_name", "ControllerName#action"))

Tags

Do not use tagging to send Personal Identifiable Information (PII) 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.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

  • 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
span.set_attribute("appsignal.tag.<tag_name>", "string") # Example format span.set_attribute("appsignal.tag.user_id", user.id)
Go
span.SetAttributes(attribute.String("appsignal.tag.<tag_name>", "string")) // Example format span.SetAttributes(attribute.String("appsignal.tag.user_id", user.id))

Function parameters

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: appsignal.function.parameters
  • Value type: JSON serialized object

Report the parameters for a function call using this attribute. Use this to set parameters given to a background job, a task or function call you'd like to track.

The values set in this span attribute can be filtered using the appsignal.config.filter_function_parameters config option.

Python
span.set_attribute("appsignal.function.parameters", json.dumps({ "param1": "value1", "param2": "value2" }))
Go
import ( "encoding/json" ) params := map[string]interface{}{ "param1": "value1", "param2": "value2", "nested": map[string]interface{}{ "param3": "value3", "param4": "value4", }, } json, _ := json.Marshal(params) span.SetAttributes(attribute.String("appsignal.function.parameters", string(json)))

Response headers

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: http.response.header.<key>
  • Value type: Array of Strings

Report the response's headers using an OpenTelemetry span attribute. This span attribute is also documented on the OpenTelemetry HTTP span specification.

Python
span.set_attribute("http.response.header.content-type", ["application/json"]) span.set_attribute("http.response.header.custom-header", ["abc", "def"])
Go
span.SetAttributes(attribute.StringSlice("http.response.header.content-type", []string{"application/json"})) span.SetAttributes(attribute.StringSlice("http.response.header.custom-header", []string{"abc", "def"}))

Request headers

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: http.request.header.<key>
  • Value type: Array of Strings

Report the request's headers using an OpenTelemetry span attribute. This span attribute is also documented on the OpenTelemetry HTTP span specification.

Python
span.set_attribute("http.request.header.content-type", ["application/json"]) span.set_attribute("http.request.header.custom-header", ["abc", "def"])
Go
span.SetAttributes(attribute.StringSlice("http.request.header.content-type", []string{"application/json"})) span.SetAttributes(attribute.StringSlice("http.request.header.custom-header"), []string{"abc", "def"})

Request query parameters

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: appsignal.request.query_parameters
  • Value type: JSON serialized object

Report an incoming HTTP request's query parameters using this attribute.

The values set in this span attribute can be filtered using the appsignal.config.filter_request_query_parameters config option.

Python
span.set_attribute("appsignal.request.query_parameters", json.dumps({ "category": "shoes", "filter": "color:blue" }))
Go
import ( "encoding/json" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) params := map[string]interface{}{ "param1": "value1", "param2": "value2", "nested": map[string]interface{}{ "param3": "value3", "param4": "value4", }, } json, _ := json.Marshal(params) span.SetAttributes(attribute.String("appsignal.request.query_parameters", string(json)))

Request payload

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: appsignal.request.payload
  • Value type: JSON serialized object

Report an incoming HTTP request's payload using this attribute.

The values set in this span attribute can be filtered using the appsignal.config.filter_request_payload config option.

Python
span.set_attribute("appsignal.request.payload", json.dumps({ "title": "My new blog post" "body": "Lorem ipsum" }))
Go
import ( "encoding/json" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) payload := map[string]interface{}{ "param1": "value1", "param2": "value2", "nested": map[string]interface{}{ "param3": "value3", "param4": "value4", }, } json, _ := json.Marshal(payload) span.SetAttributes(attribute.String("appsignal.request.payload", string(json)))

Request session data

Do not send Personal Identifiable Information (PII) to AppSignal. You must ensure that PII (such as personal names, email addresses, passwords, etc.) is filtered before data is sent to AppSignal. If you must identify a person, consider using a user ID, hash, or pseudonymized identifier instead.

For HIPAA-covered entities, more information about signing a Business Associate Agreement (BAA) can be found in our Business Add-Ons documentation.

This attribute's value needs to be serialized to a JSON string. It does not support a Hash or object from the integration language directly and will be silently ignored.

  • Attribute name: appsignal.request.session_data
  • Value type: JSON serialized object

Report an incoming HTTP request's session data using this attribute.

The values set in this span attribute can be filtered using the appsignal.config.filter_request_session_data config option.

Python
span.set_attribute("appsignal.request.session_data", json.dumps({ "user_id": 123 "theme": "dark" }))
Go
import ( "encoding/json" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) session_data := map[string]interface{}{ "param1": "value1", "param2": "value2", "nested": map[string]interface{}{ "param3": "value3", "param4": "value4", }, } json, _ := json.Marshal(session_data) span.SetAttributes(attribute.String("appsignal.request.session_data", string(json)))