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

# Regrouper avec des espaces de noms

Les espaces de noms sont un moyen de regrouper les incidents d'erreur, les incidents de performance et les métriques des actions. AppSignal utilise trois [espaces de noms][namespaces] par défaut :

* `web` pour les requêtes web
* `frontend` pour le JavaScript front-end
* `background` pour les jobs en arrière-plan

Les applications peuvent avoir un nombre quelconque d'espaces de noms, par exemple, vous pouvez avoir un espace de noms distinct pour le panneau d'administration, l'API ou les tâches planifiées de votre application. Ce guide vous décrira les étapes nécessaires pour rapporter des actions dans des espaces de noms personnalisés.

<Tip>
  Vous voulez en savoir plus sur l'utilisation des espaces de noms ? Consultez
  cette liste : [Que pouvez-vous faire avec les espaces de
  noms ?](/application/namespaces#what-can-you-do-with-namespaces)
</Tip>

<Frame caption="L'image ci-dessus montre des exemples de graphiques avec plusieurs espaces de noms, en séparant une API GraphQL et l'espace de noms Web.">
  <img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/namespaces/graphs.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=044f86ecbea3baac50432a8337ae69b2" alt="App Graphs Namespaces" width="1025" height="647" data-path="assets/images/screenshots/namespaces/graphs.png" />
</Frame>

## Configurer les espaces de noms

Les espaces de noms sont définis par le code de votre application. Avec de petits assistants, vous pouvez personnaliser l'espace de noms d'une action. Ce guide vous apprendra à diviser les requêtes en différents espaces de noms. Pour ce guide, nous créerons un espace de noms « admin » et un espace de noms « critical » pour les jobs en arrière-plan.

<Tip>
  Les noms d'espaces de noms ne peuvent contenir que des lettres (a-z) et des
  underscores
  <br /> Nous ne recommandons pas d'avoir plus de **15** espaces de noms par application.
</Tip>

#### Configurations par langage

* [Ruby](#ruby)
* [Elixir](#elixir)
* [Node.js](#nodejs)
* [Python](#python)
* [JavaScript front-end](#front-end-javascript)
* [Go](#go)
* [Java](#java)
* [PHP](#php)

### Ruby

Dans Rails, nous pouvons utiliser le callback `before_action` pour appeler une méthode avant qu'une requête ne soit traitée. Dans l'exemple de code ci-dessous, nous avons créé un `before_action` qui appelle la méthode `set_appsignal_namespace`. Dans cette méthode, nous appelons la [méthode d'assistance `Appsignal.set_namespace`][ruby helper] pour configurer « admin » comme espace de noms pour cette requête. Cela fonctionne également si d'autres contrôleurs sont des sous-classes du `AdminController`.

<CodeGroup>
  ```ruby Ruby theme={null}
  # In a Rails controller
  # app/controllers/admin_controller.rb
  class AdminController < ApplicationController
    before_action :set_appsignal_namespace

    def set_appsignal_namespace
      # Configures all actions in this controller to report
      # in the "admin" namespace
      Appsignal.set_namespace("admin")
    end

    # Any other controller actions
  end
  ```
</CodeGroup>

Ensuite, nous définirons l'espace de noms du code exécuté par les workers d'arrière-plan Sidekiq de notre application. Pour correctement attribuer un espace de noms aux erreurs déclenchées dans notre worker d'arrière-plan, nous devons définir l'espace de noms avant l'exécution de tout autre code. Dans l'exemple de code Sidekiq worker ci-dessous, nous le faisons immédiatement dans la méthode perform à la ligne 7.

<CodeGroup>
  ```ruby Ruby theme={null}
  # In a Sidekiq worker
  # app/workers/critical_worker.rb
  class CriticalWorker
    include Sidekiq::Worker

    def perform
      # Configures this worker's jobs to report in the "critical" namespace
      Appsignal.set_namespace("critical")

      # The actual worker code
    end
  end
  ```
</CodeGroup>

Il est également possible de configurer l'espace de noms lors de la création d'une transaction à l'aide de l'assistant [`Appsignal.monitor`](https://rubydoc.info/gems/appsignal/Appsignal/Helpers/Instrumentation#monitor-instance_method). Il accepte l'espace de noms comme argument nommé.

<CodeGroup>
  ```ruby Ruby theme={null}
  # When creating a new transaction
  Appsignal.monitor(namespace: "admin") do
    # Your code to instrument
  end
  ```
</CodeGroup>

Pour les transactions déjà créées, vous pouvez utiliser la méthode `set_namespace` pour configurer l'espace de noms de la transaction, comme dans l'exemple ci-dessous :

<CodeGroup>
  ```ruby Ruby theme={null}
  # When changing the namespace later on for a transaction
  transaction.set_namespace("slow_admin")
  ```
</CodeGroup>

##### Remarque sur l'emplacement des assistants

Les assistants `set_namespace` utilisés dans ce guide peuvent être appelés dans n'importe quelle action faisant partie d'un échantillon AppSignal. Nous recommandons de l'appeler aussi tôt que possible dans la requête ou le job en arrière-plan, afin que la transaction soit configurée avec l'espace de noms donné avant qu'une erreur ne se produise. Sinon, si une erreur se produit, ou tout autre événement qui arrête le processus, la transaction est envoyée à AppSignal avant que l'assistant `set_namespace` ne soit appelé, et l'échantillon est rapporté sous l'espace de noms par défaut à la place.

#### En savoir plus

* [Documentation de la méthode d'assistance `Appsignal.set_namespace`][ruby helper]

### Elixir

Dans les contrôleurs Phoenix, nous utilisons un `plug` pour appeler une fonction avant que la requête ne soit traitée par Phoenix. Dans l'exemple de code ci-dessous, nous utilisons `plug` pour appeler la fonction `set_appsignal_namespace` (ligne 5). Dans cette fonction, nous appelons l'[assistant `Appsignal.Span.set_namespace`][elixir helper] pour configurer l'espace de noms pour cette requête (ligne 10).

<CodeGroup>
  ```elixir Elixir theme={null}
  # In a Phoenix controller
  defmodule AppsignalPhoenixExampleWeb.AdminController do
    use AppsignalPhoenixExampleWeb, :controller

    plug :set_appsignal_namespace

    defp set_appsignal_namespace(conn, _params) do
      # Configures all actions in this controller to report
      # in the "admin" namespace
      Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "admin")
      conn
    end

    # ...
  end
  ```
</CodeGroup>

Ensuite, nous configurerons l'espace de noms pour un job en arrière-plan. Pour capturer toutes les erreurs du job dans l'espace de noms souhaité, `Appsignal.Span.set_namespace` doit être appelé au début de la fonction avant tout autre code, comme à la ligne 4 de l'exemple de code ci-dessous :

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyApp.CriticalJob do
    def run do
      # Configures this worker's jobs to report in the "critical" namespace
      Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "critical")

      # The actual worker code
    end
  end
  ```
</CodeGroup>

Il est également possible de configurer l'espace de noms lors de la création d'une transaction. Veuillez consulter la documentation des [décorateurs][elixir namespace_decorator] ou des [assistants d'instrumentation][elixir namespace_helper] pour plus d'informations sur la configuration des espaces de noms.

#### Remarque sur l'emplacement des assistants

Les assistants `set_namespace` utilisés dans ce guide peuvent être appelés dans n'importe quelle action qui démarre une transaction AppSignal. Nous recommandons de l'appeler aussi tôt que possible dans la requête ou le job en arrière-plan, afin que la transaction soit configurée avec l'espace de noms donné avant qu'une erreur ne se produise. Sinon, si une erreur se produit — ou tout autre événement qui arrête le processus — la transaction est envoyée à AppSignal avant que le code `set_namespace` ne soit appelé et elle est rapportée sous l'espace de noms par défaut à la place.

#### En savoir plus

* [Documentation de la méthode d'assistance `Appsignal.Span.set_namespace`][elixir helper]
* [Décorateur d'espace de noms Elixir][elixir namespace_decorator]
* [Assistant d'instrumentation d'espace de noms Elixir][elixir namespace_helper]

### Node.js

Dans les applications Node.js, AppSignal fonctionne avec OpenTelemetry, qui utilise des spans pour suivre les métadonnées, telles que l'espace de noms auquel un span appartient. Utilisez la fonction d'assistance `setNamespace` comme illustré ci-dessous pour définir l'espace de noms pour la trace du span actif.

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

  setNamespace("custom-namespace");
  ```
</CodeGroup>

[En savoir plus sur le fonctionnement des spans en Node.js](/nodejs/3.x/instrumentation/instrumentation).

### PHP

Dans les applications PHP, AppSignal fonctionne avec OpenTelemetry, qui utilise des spans pour suivre les métadonnées, telles que l'espace de noms auquel un span appartient. Utilisez la méthode d'assistance `Appsignal::setNamespace` pour définir l'espace de noms pour la trace du span actif.

<CodeGroup>
  ```php PHP theme={null}
  Appsignal::setNamespace("admin");
  ```
</CodeGroup>

Si vous appelez cet assistant plusieurs fois dans une seule trace, AppSignal utilise l'appel dont le span a l'horodatage le plus récent.

[En savoir plus sur le fonctionnement de l'instrumentation personnalisée en PHP][php custom instrumentation].

[php custom instrumentation]: /php/instrumentation.html

### Python

Dans les applications Python, AppSignal fonctionne avec OpenTelemetry, qui utilise des spans pour suivre les métadonnées, telles que l'espace de noms auquel un span appartient. Utilisez la fonction d'assistance `set_namespace` comme illustré ci-dessous pour définir l'espace de noms pour la trace du span actif.

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

  set_namespace("custom-namespace")
  ```
</CodeGroup>

[En savoir plus sur le fonctionnement des spans en Python](/python/instrumentation/instrumentation).

### JavaScript front-end

Dans les applications JavaScript front-end, AppSignal fonctionne avec des spans pour suivre les métadonnées telles que l'espace de noms d'un span.

<Tip>
  Contrairement à Ruby, Node.js, PHP et Python, l'API JavaScript front-end ne
  dispose pas d'un assistant global `setNamespace` / `set_namespace`. À la
  place, comme pour Elixir, Go et Java, vous définissez l'espace de noms
  directement sur un span.
</Tip>

Lors de la création de ce span, appelez `setNamespace` avec une valeur de type `String` du nom d'espace de noms souhaité, comme illustré dans l'exemple ci-dessous :

<CodeGroup>
  ```javascript JavaScript theme={null}
  const span = appsignal.createSpan();
  span.setNamespace("admin"); // a custom namespace for this span (defaults to `frontend`)
  ```
</CodeGroup>

[En savoir plus sur le fonctionnement des spans en JavaScript front-end](/front-end/span).

### Go

Dans les applications Go, AppSignal fonctionne avec OpenTelemetry, qui utilise des spans pour suivre les métadonnées, telles que l'espace de noms auquel un span appartient. Sur n'importe quel span de la trace, définissez un attribut `appsignal.namespace` avec une valeur de type String du nouvel espace de noms.

<CodeGroup>
  ```go Go theme={null}
  span.SetAttributes(attribute.String("appsignal.namespace", "admin"))
  ```
</CodeGroup>

Veuillez consulter la [documentation sur l'instrumentation personnalisée Go][go custom instrumentation] pour savoir comment récupérer un span ou en créer un nouveau.

Si plusieurs attributs avec l'attribut `appsignal.namespace` sont trouvés, le span avec l'horodatage le plus récent prévaut.

[En savoir plus sur le fonctionnement de l'instrumentation personnalisée en Go][go custom instrumentation].

[go custom instrumentation]: /go/custom-instrumentation.html

### Java

Dans les applications Java, AppSignal fonctionne avec OpenTelemetry, qui utilise des spans pour suivre les métadonnées, telles que l'espace de noms auquel un span appartient. Sur n'importe quel span de la trace, définissez un attribut `appsignal.namespace` avec une valeur de type String du nouvel espace de noms.

<CodeGroup>
  ```java Java theme={null}
  span.setAttribute("appsignal.namespace", "admin");
  ```
</CodeGroup>

Veuillez consulter la [documentation sur l'instrumentation personnalisée Java][java custom instrumentation] pour savoir comment récupérer un span ou en créer un nouveau.

Si plusieurs attributs avec l'attribut `appsignal.namespace` sont trouvés, le span avec l'horodatage le plus récent prévaut.

[En savoir plus sur le fonctionnement de l'instrumentation personnalisée en Java][java custom instrumentation].

[java custom instrumentation]: /java/custom-instrumentation.html

## Déployer

Lorsque votre application est configurée avec ses nouveaux assistants d'espace de noms, validez vos modifications et déployez l'application. Au démarrage/redémarrage de l'application, AppSignal rapportera les actions sous leur nouvel espace de noms 🥳 !

<Tip>
  Les données des anciens déploiements resteront regroupées par leur espace de
  noms d'origine. Seules les actions nouvellement rapportées seront
  regroupées par leurs nouveaux espaces de noms.
</Tip>

Les espaces de noms ne sont pas rapportés correctement ? Pas de panique, [contactez-nous][contact] et nous vous aiderons !

## Pour aller plus loin

* [Filtrer les données de l'application][filtering]
* [Espaces de noms][namespaces]
* [Ignorer les espaces de noms][ignoring namespaces]

[contact]: mailto:support@appsignal.com

[elixir helper]: https://hexdocs.pm/appsignal/Appsignal.Span.html?#set_namespace/2

[elixir namespace_decorator]: /elixir/instrumentation/instrumentation.html#decorator-namespaces

[elixir namespace_helper]: /elixir/instrumentation/instrumentation.html#helper-namespaces

[filtering]: /guides/filter-data/

[ignoring namespaces]: /guides/filter-data/ignore-namespaces.html

[namespaces]: /application/namespaces.html

[ruby helper]: https://gemdocs.org/gems/appsignal/3.4.0/Appsignal/Transaction.html#initialize-instance_method

[tagging]: /guides/tagging.html
