O AppSignal suporta várias integrações de linguagem do OpenTelemetry. No entanto, o modelo de dados nem sempre se alinha perfeitamente, o que pode afetar como os dados do OpenTelemetry são exibidos na interface do AppSignal. Usando os atributos listados nesta página, você pode personalizar a aparência dos dados de trace e span.
🔐 Não envie Informações Pessoais Identificáveis (PII) para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) e use um ID, hash ou identificador pseudonimizado no lugar.
Para entidades cobertas pela HIPAA, mais informações sobre como assinar um Business Associate Agreement (BAA) estão disponíveis em nossa documentação de Business Add-Ons.
Acessando um span
Ao personalizar o trace ou span, primeiro importe o módulo trace do OpenTelemetry no arquivo em que você quer personalizar os dados de trace reportados.from opentelemetry import trace
Usando esse módulo trace, crie um novo span:tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("Span name") as span:
# Define valores de atributo
span.set_attribute("attribute name", "attribute value")
Ou obtenha o ativo atual:span = trace.get_current_span()
# Define valores de atributo
span.set_attribute("attribute name", "attribute value")
Ao personalizar o trace ou span, primeiro importe o módulo trace do OpenTelemetry no arquivo em que você quer personalizar os dados de trace reportados.import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
)
Usando esse módulo trace, crie um novo span:var tracer = otel.Tracer("my-tracer-name")
func httpHandler(w http.ResponseWriter, r *http.Request) {
ctx, span := tracer.Start(r.Context(), "hello-span")
defer span.End()
// Define atributos
}
Nota: Nestes exemplos estamos confiando no contexto da requisição HTTP, fornecido por r.Context().
Receber o contexto pode ser diferente na sua aplicação.Ou obtenha o ativo atual:func httpHandler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
span := trace.SpanFromContext(ctx)
// Define atributos
}
Atributos do AppSignal
Namespace
Este atributo se aplica a todo o trace. Ele pode ser definido em um span filho e não precisa ser definido no span pai mais externo. Este atributo só pode ser definido uma vez por trace. Se for definido várias vezes, apenas o atributo de um span no trace será aplicado.
- Nome do atributo:
appsignal.namespace
- Tipo do valor:
String
Agrupe traces por namespace para melhor organização na interface do AppSignal.
Os namespaces são agrupados por nome de serviço do OpenTelemetry com o formato <Service name>/<Namespace>, por exemplo, “Web server/admin” ou “Background worker/billing”. Este atributo permite configurar apenas a parte do namespace. O namespace padrão para todos os traces é <Service name>/default.
span.set_attribute("appsignal.namespace", "admin")
Nome da ação raiz
Este atributo se aplica a todo o trace. Ele pode ser definido em um span filho e não precisa ser definido no span pai mais externo. Este atributo só pode ser definido uma vez por trace. Se for definido várias vezes, apenas o atributo de um span no trace será aplicado.
- Nome do atributo:
appsignal.action_name
- Tipo do valor:
String
Defina o nome da ação do trace que será usado para criar incidentes e agrupar o tracing no AppSignal.com. Isso sobrescreverá qualquer mapeamento automatizado feito pelo suporte do AppSignal para uma instrumentação específica. É útil para traces que não são criados por bibliotecas suportadas. Se o seu trace está agrupado com outros traces sem nome ou mal agrupados, pode ser que esteja faltando este atributo.
Pretendemos melhorar nosso agrupamento automático ao longo do tempo, então avise-nos quando achar que este atributo é necessário.
span.set_attribute("appsignal.action_name", "ControllerName#action")
- Nome do atributo:
appsignal.tag.<tag_name>
- Tipo do valor:
String
Tagueie traces para destacá-los nas páginas de detalhes do trace e filtrar traces na interface do AppSignal. Várias tags podem ser definidas em spans de um trace. Tags podem ser adicionadas a qualquer span de um trace em qualquer nível do trace.
Você pode usar templates de link para vincular tags a uma URL específica, como um perfil de usuário ou página de admin.
A chave do atributo de tag é composta por duas partes: o prefixo appsignal.tag e a chave da tag. Para a tag user_id, isso se torna appsignal.tag.user_id como chave de atributo.
span.set_attribute("appsignal.tag.<tag_name>", "string") # Formato de exemplo
span.set_attribute("appsignal.tag.user_id", user.id)
Parâmetros de função
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
appsignal.function.parameters
- Tipo do valor: Objeto serializado em JSON
Reporte os parâmetros para uma chamada de função usando este atributo.
Use isso para definir parâmetros passados a um job em background, uma tarefa ou chamada de função que você gostaria de rastrear.
Os valores definidos neste atributo de span podem ser filtrados usando a opção de configuração appsignal.config.filter_function_parameters.
span.set_attribute("appsignal.function.parameters", json.dumps({
"param1": "value1",
"param2": "value2"
}))
Cabeçalhos de resposta
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
http.response.header.<key>
- Tipo do valor: Array de Strings
Reporte os cabeçalhos da resposta usando um atributo de span do OpenTelemetry.
Este atributo de span também está documentado na especificação de span HTTP do OpenTelemetry.
span.set_attribute("http.response.header.content-type", ["application/json"])
span.set_attribute("http.response.header.custom-header", ["abc", "def"])
Cabeçalhos de requisição
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
http.request.header.<key>
- Tipo do valor: Array de Strings
Reporte os cabeçalhos da requisição usando um atributo de span do OpenTelemetry.
Este atributo de span também está documentado na especificação de span HTTP do OpenTelemetry.
span.set_attribute("http.request.header.content-type", ["application/json"])
span.set_attribute("http.request.header.custom-header", ["abc", "def"])
Query parameters de requisição
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
appsignal.request.query_parameters
- Tipo do valor: Objeto serializado em JSON
Reporte os query parameters de uma requisição HTTP de entrada usando este atributo.
Os valores definidos neste atributo de span podem ser filtrados usando a opção de configuração appsignal.config.filter_request_query_parameters.
span.set_attribute("appsignal.request.query_parameters", json.dumps({
"category": "shoes",
"filter": "color:blue"
}))
Payload da requisição
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
appsignal.request.payload
- Tipo do valor: Objeto serializado em JSON
Reporte o payload de uma requisição HTTP de entrada usando este atributo.
Os valores definidos neste atributo de span podem ser filtrados usando a opção de configuração appsignal.config.filter_request_payload.
span.set_attribute("appsignal.request.payload", json.dumps({
"title": "My new blog post"
"body": "Lorem ipsum"
}))
Dados de sessão da requisição
O valor deste atributo precisa ser serializado como uma string JSON. Ele não aceita um Hash ou objeto da linguagem de integração diretamente e será silenciosamente ignorado.
- Nome do atributo:
appsignal.request.session_data
- Tipo do valor: Objeto serializado em JSON
Reporte os dados de sessão de uma requisição HTTP de entrada usando este atributo.
Os valores definidos neste atributo de span podem ser filtrados usando a opção de configuração appsignal.config.filter_request_session_data.
span.set_attribute("appsignal.request.session_data", json.dumps({
"user_id": 123
"theme": "dark"
}))