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 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.
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.
Les noms d’espaces de noms ne peuvent contenir que des lettres (a-z) et des
underscores
Nous ne recommandons pas d’avoir plus de 15 espaces de noms par application.
Configurations par langage
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 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.
# 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
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.
# 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
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. Il accepte l’espace de noms comme argument nommé.
# When creating a new transaction
Appsignal.monitor(namespace: "admin") do
# Your code to instrument
end
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 :
# When changing the namespace later on for a transaction
transaction.set_namespace("slow_admin")
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
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 pour configurer l’espace de noms pour cette requête (ligne 10).
# 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
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 :
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
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 ou des assistants d’instrumentation 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
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.
import { setNamespace } from "@appsignal/nodejs";
setNamespace("custom-namespace");
En savoir plus sur le fonctionnement des spans en Node.js.
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.
Appsignal::setNamespace("admin");
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.
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.
from appsignal import set_namespace
set_namespace("custom-namespace")
En savoir plus sur le fonctionnement des spans en Python.
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.
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.
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 :
const span = appsignal.createSpan();
span.setNamespace("admin"); // a custom namespace for this span (defaults to `frontend`)
En savoir plus sur le fonctionnement des spans en JavaScript front-end.
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.
span.SetAttributes(attribute.String("appsignal.namespace", "admin"))
Veuillez consulter la documentation sur l’instrumentation personnalisée Go 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.
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.
span.setAttribute("appsignal.namespace", "admin");
Veuillez consulter la documentation sur l’instrumentation personnalisée Java 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.
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 🥳 !
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.
Les espaces de noms ne sont pas rapportés correctement ? Pas de panique, contactez-nous et nous vous aiderons !
Pour aller plus loin