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

# Adicionar tags a uma requisição

export const Compatibility = ({versions = [], label = "Available in"}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const defaultPillStyle = {
    borderColor: "#d4d4d8",
    background: "#f4f4f5",
    color: "#3f3f46"
  };
  const pillStyles = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#d8b4fe",
      color: "#6b21a8"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#5eead4",
      color: "#115e59"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#86efac",
      color: "#166534"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#93c5fd",
      color: "#1e40af"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fca5a5",
      color: "#991b1b"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fdba74",
      color: "#9a3412"
    }
  };
  const getPillStyle = name => ({
    ...defaultPillStyle,
    ...pillStyles[name] || ({})
  });
  return <div className="not-prose my-4 rounded-lg border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm dark:border-white/10 dark:bg-white/5">
      <div className="flex flex-wrap items-center gap-x-2 gap-y-1">
        <span className="font-semibold text-zinc-700 dark:text-zinc-200">
          {label}:
        </span>
        {versions.map((v, i) => <span key={`${v.name}-${v.version}-${i}`} className="inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium" style={getPillStyle(v.name)}>
            <span>{v.name}</span>
            <span className="opacity-70">
              {v.version}
              {v.exact ? "" : "+"}
            </span>
          </span>)}
      </div>
    </div>;
};

Você pode usar tags para fornecer contexto extra sobre erros e incidentes de desempenho. As tags podem ajudar a adicionar informações que já não fazem parte de uma requisição, como dados de sessão, cabeçalhos, dados de ambiente ou parâmetros. As tags também podem ser usadas para filtrar amostras dentro de um incidente, para encontrar todos os erros de um usuário específico ou páginas lentas de um locale específico.

Você pode definir tags onde a transação ou span atual estiver acessível. Recomendamos chamá-la antes que o código do seu aplicativo seja executado em uma requisição, como em um callback. Você pode ver quais tags se aplicam a uma amostra na página de incidente [Error and Performance](https://appsignal.com/redirect-to/app?to=performance).

Usando [Link Templates](/application/link-templates), é possível adicionar links ao seu aplicativo com dados de tag, como o painel de administração para o usuário logado. Você pode ver isso na prática no screenshot abaixo, com as tags `Link 1` e `Link 2`.

<img src="https://mintcdn.com/appsignal-715f5a51/MS9b5WO71lSfD5jG/assets/images/screenshots/tags/tags.png?fit=max&auto=format&n=MS9b5WO71lSfD5jG&q=85&s=01142180faf7fb0a63eb54549eb76f50" alt="Tag a request" width="718" height="379" data-path="assets/images/screenshots/tags/tags.png" />

<Warning>
  🔐 Não envie <strong>Informações Pessoais Identificáveis (PII)</strong> para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) e use um ID, hash ou identificador pseudonimizado no lugar. <br /> <br /> Use [Link Templates](https://docs.appsignal.com/application/link-templates) para vinculá-los de volta em sua aplicação.
</Warning>

## Ruby

Com a gem [AppSignal for Ruby](/ruby), use o método helper `Appsignal.add_tags` para adicionar tags a amostras de erro e desempenho. Na versão 3 e anteriores da gem Ruby, use o helper `Appsignal.set_tags`.

Você pode usar `Appsignal.add_tags` onde uma transação ativa estiver acessível. Recomendamos chamá-lo antes que o código do seu aplicativo seja executado na requisição, como em um `before_action` usando Rails.

<CodeGroup>
  ```ruby Ruby theme={null}
  before_action do
    Appsignal.add_tags(
      :user_id => current_user.id,
      :stripe_customer_id => stripe_customer_id,
      :locale => I18n.locale,
      :default_locale => I18n.default_locale
    )
  end
  ```
</CodeGroup>

### Tags padrão

<Compatibility versions={[{ name: "AppSignal for Ruby", version: "4.8.3" }]} />

Você pode configurar tags que serão adicionadas a todas as transações usando a [opção de configuração `default_tags`](/ruby/configuration/options#option-default_tags). Essas tags são aplicadas automaticamente a cada transação. Tags específicas de transação definidas com `Appsignal.add_tags` substituirão as tags padrão com a mesma chave.

<CodeGroup>
  ```ruby Ruby theme={null}
  Appsignal.configure do |config|
    config.default_tags = {
      "region" => "europe",
      "shard" => "shard-1"
    }
  end
  ```

  ```yaml YAML theme={null}
  default: &defaults
    default_tags:
      region: europe
      shard: shard-1
  ```

  ```bash Shell theme={null}
  export APPSIGNAL_DEFAULT_TAGS="region=europe,shard=shard-1"
  ```
</CodeGroup>

### Limitações {/* id: ruby-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma String ou um Symbol.
* O valor da tag deve ser uma String, Symbol, Integer ou Boolean (true/false).
  * Valores boolean são suportados na gem Ruby 3.11 e mais recentes.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Valores de hash aninhados não são suportados para tags. Use [dados personalizados](/guides/custom-data/custom-data) em vez disso.

<CodeGroup>
  ```ruby Ruby theme={null}
  # Não suportado: o tipo de valor hash não é suportado
  Appsignal.add_tags(
    :i18n => {
      :locale => I18n.locale,
      :default_locale => I18n.default_locale
    }
  )
  ```
</CodeGroup>

## Elixir

Use a função [`Appsignal.Span.set_sample_data`](https://hexdocs.pm/appsignal/Appsignal.Span.html#set_sample_data/2) para fornecer contexto extra sobre erros e amostras de desempenho. Use a chave de amostra `"tags"` para a função adicionar tags ao span.

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Span.set_sample_data(
    Appsignal.Tracer.root_span,
    "tags",
    %{
      locale: "en",
      user_id: user_id,
      stripe_customer_id: stripe_customer_id,
      locale: locale,
      default_locale: default_locale
    }
  )
  ```
</CodeGroup>

### A última chamada prevalece

O helper `set_sample_data` pode ser chamado várias vezes, mas apenas o último valor será retido. Quando o código abaixo é executado:

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Span.set_sample_data(Appsignal.Tracer.root_span, "tags", %{locale: "en"})
  Appsignal.Span.set_sample_data(Appsignal.Tracer.root_span, "tags", %{user: "bob"})
  Appsignal.Span.set_sample_data(Appsignal.Tracer.root_span, "tags", %{locale: "de"})
  ```
</CodeGroup>

resultará nas seguintes tags sendo armazenadas:

<CodeGroup>
  ```elixir Elixir theme={null}
  %{
    locale: "de"
  }
  ```
</CodeGroup>

### Definindo dados de amostra em um span

Para adicionar dados de amostra a um span assim que ele for criado, adicione um `custom_on_create_fun`:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyApp.Appsignal do
    def custom_on_create_fun(_span) do
      Appsignal.Span.set_sample_data(Appsignal.Tracer.root_span, "tags", %{"locale": "en"})
    end
  end
  ```
</CodeGroup>

Em seguida, adicione-o à configuração do seu app:

<CodeGroup>
  ```elixir Elixir theme={null}
  # config/config.exs
  config :appsignal, custom_on_create_fun: &MyApp.Appsignal.custom_on_create_fun/1
  ```
</CodeGroup>

O `custom_on_create_fun` requer AppSignal for Elixir versão 2.8.3 ou superior.

### Limitações {/* id: elixir-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma `String` ou `Atom`.
* O valor da tag deve ser uma `String`, `Atom` ou `Integer`.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Valores de map aninhados não são suportados para tags. Use [dados personalizados](/guides/custom-data/custom-data) em vez disso.

<CodeGroup>
  ```elixir Elixir theme={null}
  # Não suportado: o tipo de valor map não é suportado
  Appsignal.Span.set_sample_data(
    Appsignal.Tracer.root_span,
    "tags",
    %{
      i18n: %{
        locale: "en_GB",
        default_locale: "en_US"
      }
    }
  )
  ```
</CodeGroup>

## Node.js

Importe a função helper `setTag` para adicionar tags aos spans para amostras de erro e desempenho.

<CodeGroup>
  ```javascript Node.js theme={null}
  import { setTag } from "@appsignal/nodejs";

  setTag("user_id", user_id);
  setTag("stripe_customer_id", stripe_customer_id);
  setTag("locale", locale);
  setTag("default_locale", default_locale);
  ```
</CodeGroup>

### Limitações {/* id: nodejs-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma `String`.
* O valor da tag deve ser uma `String`, `Number` ou `Boolean`.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Valores de objeto aninhados não são suportados para tags. Use a função helper [`setCustomData`](/guides/custom-data/custom-data) em vez disso.

<CodeGroup>
  ```javascript Node.js theme={null}
  const tracer = appsignal.tracer();
  const span = tracer.currentSpan();

  # Não suportado: o tipo de valor objeto não é suportado
  span.set("i18n", { locale: "en_GB", default_locale: "en_US" });
  ```
</CodeGroup>

## Python

Importe o método helper `set_tag` para adicionar tags aos spans para amostras de erro e desempenho.

<CodeGroup>
  ```python Python theme={null}
  from appsignal import set_tag

  set_tag("user_id", user_id)
  set_tag("stripe_customer_id", stripe_customer_id)
  set_tag("locale", locale)
  set_tag("default_locale", default_locale)
  ```
</CodeGroup>

### Limitações {/* id: python-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma String.
* O valor da tag deve ser uma String, Integer, Float ou Boolean.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Valores de objeto aninhados não são suportados para tags. Use a função helper [`set_custom_data`](/guides/custom-data/custom-data) em vez disso.

## Go

Em um app Go, para adicionar uma tag do AppSignal a um span em um trace, primeiro busque o span ativo ou crie um novo span conforme descrito em [nossa página de instrumentação personalizada Go](/go/custom-instrumentation).

Em seguida, defina um atributo no span usando o helper de atributo que corresponda ao tipo do valor da tag, veja também [as limitações da tag abaixo](#go-limitations).

O nome do atributo do span tem o seguinte formato: `appsignal.tag.<tag name>`. Substitua `<tag name>` pelo nome da tag.

<CodeGroup>
  ```go Go theme={null}
  // Formato de exemplo
  span.SetAttributes(attribute.String("appsignal.tag.<tag_name>", "string"))

  // Tipos suportados
  span.SetAttributes(attribute.String("appsignal.tag.my_tag_string", "tag value"))
  span.SetAttributes(attribute.StringSlice("appsignal.tag.my_tag_int64", []string{"abc", "def"}))
  span.SetAttributes(attribute.Bool("appsignal.tag.my_tag_bool_true", true))
  span.SetAttributes(attribute.Bool("appsignal.tag.my_tag_bool_false", false))
  span.SetAttributes(attribute.BoolSlice("appsignal.tag.my_tag_bool_slice", []bool{true, false}))
  span.SetAttributes(attribute.Float64("appsignal.tag.my_tag_float64", 12.34))
  span.SetAttributes(attribute.Float64Slice("appsignal.tag.my_tag_float64_slice", []float64{12.34, 56.78}))
  span.SetAttributes(attribute.Int("appsignal.tag.my_tag_int", 1234))
  span.SetAttributes(attribute.IntSlice("appsignal.tag.my_tag_int", []int{1234, 5678}))
  span.SetAttributes(attribute.Int64("appsignal.tag.my_tag_int64", 1234))
  span.SetAttributes(attribute.Int64Slice("appsignal.tag.my_tag_int64_slice", []int64{1234, 5678}))
  ```
</CodeGroup>

### Limitações {/* id: go-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma String.
* O valor da tag deve ser uma String, Integer, Float, Boolean, ou um slice desses tipos.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Os valores de array são achatados em valores separados por vírgula.
* Valores de objeto aninhados (maps) não são suportados para tags.

## Java

Em um app Java, para adicionar uma tag do AppSignal a um span em um trace, primeiro busque o span ativo ou crie um novo span conforme descrito em [nossa página de instrumentação personalizada Java](/java/custom-instrumentation).

Em seguida, defina um atributo no span usando o método `setAttribute`. O nome do atributo do span tem o seguinte formato: `appsignal.tag.<tag name>`. Substitua `<tag name>` pelo nome da tag.

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

  // Obtém o span atual
  Span span = Span.current();

  // Formato de exemplo
  span.setAttribute("appsignal.tag.<tag_name>", "string");

  // Define tags como atributos de span
  span.setAttribute("appsignal.tag.my_tag_string", "tag value");
  span.setAttribute(AttributeKey.stringArrayKey("appsignal.tag.my_tag_string_array"), Arrays.asList("abc", "def"));
  span.setAttribute("appsignal.tag.my_tag_bool_true", true);
  span.setAttribute("appsignal.tag.my_tag_bool_false", false);
  span.setAttribute(AttributeKey.booleanArrayKey("appsignal.tag.my_tag_bool_array"), Arrays.asList(true, false));
  span.setAttribute("appsignal.tag.my_tag_float64", 12.34);
  span.setAttribute(AttributeKey.doubleArrayKey("appsignal.tag.my_tag_float64_array"), Arrays.asList(12.34, 56.78));
  span.setAttribute("appsignal.tag.my_tag_int", 1234);
  span.setAttribute(AttributeKey.longArrayKey("appsignal.tag.my_tag_int_array"), Arrays.asList(1234L, 5678L));
  span.setAttribute("appsignal.tag.my_tag_int64", 1234);
  span.setAttribute(AttributeKey.longArrayKey("appsignal.tag.my_tag_int64_array"), Arrays.asList(1234L, 5678L));
  ```
</CodeGroup>

### Limitações {/* id: java-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma String.
* O valor da tag deve ser uma String, Integer, Long, Double ou Boolean, ou uma lista desses valores.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Os valores de array são achatados em valores separados por vírgula.
* Valores de objeto aninhados (maps) não são suportados para tags.

## PHP

Em aplicativos PHP, para adicionar uma tag do AppSignal a um span em um trace, use o método helper `Appsignal::addTags()`.

<CodeGroup>
  ```php PHP theme={null}
  <?php

  // Adiciona tags ao span atual
  Appsignal::addTags([
      'my_tag_string' => 'tag value',
      'my_tag_string_slice' => ['abc', 'def'],
      'my_tag_bool_true' => true,
      'my_tag_bool_false' => false,
      'my_tag_bool_slice' => [true, false],
      'my_tag_float64' => 12.34,
      'my_tag_float64_slice' => [12.34, 56.78],
      'my_tag_int' => 1234,
      'my_tag_int_slice' => [1234, 5678],
      'my_tag_int64' => 1234,
      'my_tag_int64_slice' => [1234, 5678],
  ]);
  ```
</CodeGroup>

### Limitações {/* id: php-limitations */}

Tags que não atendem a essas limitações são descartadas sem aviso.

* A chave da tag deve ser uma String.
* O valor da tag deve ser uma String, Integer, Float ou Boolean, ou um slice desses valores.
* O comprimento do valor da tag deve ser menor que 256 caracteres.
* Os valores de array são achatados em valores separados por vírgula.
* Valores de objeto aninhados (maps) não são suportados para tags.
