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

# Instrumentação customizada em Java

O AppSignal é compatível com pacotes de instrumentação do OpenTelemetry.
Alguns desses pacotes de instrumentação podem exigir configuração adicional.

Essas instrumentações nem sempre incluem todas as informações que você precisa para depurar problemas.
Para um relatório mais granular, você pode adicionar instrumentação customizada.

Damos suporte ao [tracing do OpenTelemetry][manual] conforme descrito na documentação do OpenTelemetry.
É possível adicionar mais dados a um span usando atributos de span do OpenTelemetry.

Também existem atributos de span do AppSignal que podem mudar como os traces são agrupados e alguns atributos que permitem filtrar dados sensíveis.

## Criando um novo span

Usando o tracer do global tracer provider, crie um novo span.

<CodeGroup>
  ```java Java theme={null}
  import io.opentelemetry.api.GlobalOpenTelemetry;
  import io.opentelemetry.api.trace.Span;
  import io.opentelemetry.api.trace.Tracer;
  import io.opentelemetry.context.Scope;

  public void someFunction() {
      // Get OpenTelemetry tracer
      Tracer tracer = GlobalOpenTelemetry.getTracer("my-app");

      // Create a new span
      Span span = tracer.spanBuilder("My span").startSpan();

      // Set attributes
      span.setAttribute("operation.name", "handle_request");

      // Your application logic here

      // Close the span
      span.end();
  }
  ```
</CodeGroup>

*Nota: Nestes exemplos, estamos usando o global tracer provider definido pelo OpenTelemetry. Você pode querer injetar o tracer nas suas classes para melhor testabilidade.*

## Obter o span atual

Você também pode obter o span ativo atual:

<CodeGroup>
  ```java Java theme={null}
  import io.opentelemetry.api.trace.Span;

  public void someFunction() {
      Span span = Span.current();

      // Set attributes on the current span
      span.setAttribute("user.id", userId);
      span.setAttribute("operation.name", "database_query");
  }
  ```
</CodeGroup>

*Nota: Isso só retornará um span se já houver um ativo.*

Mais formas de criar e obter spans estão documentadas na [página de instrumentação Java do OpenTelemetry][manual].

## Atributos do AppSignal

Depois de criar ou obter um span, você pode definir certos atributos específicos do AppSignal para personalizar como os dados chegam ao AppSignal.

<CodeGroup>
  ```java Java theme={null}
  Span span = // Create a new span or fetch the current span
  span.setAttribute("attribute_name", "attribute_value");
  ```
</CodeGroup>

Veja nossos guias para mais informações sobre quais atributos customizados do AppSignal são suportados:

* [Guia de tagging](/guides/tagging)
* [Guia de personalização de dados](/guides/custom-data)

[manual]: https://opentelemetry.io/docs/languages/java/api/
