Namespaces zijn een manier om foutincidenten, prestatie-incidenten en metrics van acties te groeperen. AppSignal gebruikt standaard drie namespaces:
web voor webrequests
frontend voor front-end JavaScript
background voor background jobs
Applicaties kunnen een willekeurig aantal namespaces hebben, u kunt bijvoorbeeld een aparte namespace hebben voor het beheerderspaneel, de API of geplande taken van uw applicatie. Deze gids doorloopt de stappen die nodig zijn om acties in aangepaste namespaces te rapporteren.
Namespaces worden gedefinieerd door de code van uw applicatie. Met kleine helpers kunt u de namespace van een actie aanpassen. Deze gids leert u hoe u requests in verschillende namespaces kunt opsplitsen. Voor deze gids maken we een “admin” en een “critical” namespace voor background jobs.
Namespace-namen mogen alleen letters (a-z) en underscores bevatten
We raden aan niet meer dan 15 namespaces per applicatie te hebben.
Configuraties per taal
Ruby
In Rails kunnen we de before_action callback gebruiken om een methode aan te roepen voordat een request wordt afgehandeld. In het onderstaande codevoorbeeld hebben we een before_action gemaakt die de set_appsignal_namespace methode aanroept. In deze methode roepen we de Appsignal.set_namespace helper-methode aan om “admin” te configureren als de namespace voor dit request. Dit werkt ook als andere controllers subklassen zijn van de 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
Vervolgens definiëren we de namespace van code die wordt uitgevoerd door de Sidekiq background workers van onze applicatie. Om fouten die in onze background worker worden veroorzaakt correct te namespacen, moeten we de namespace definiëren voordat andere code wordt uitgevoerd. In het onderstaande voorbeeld van Sidekiq workercode doen we dit direct in de perform-methode op regel 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
Het is ook mogelijk om de namespace te configureren bij het aanmaken van een transactie met behulp van de Appsignal.monitor helper. Deze accepteert de namespace als keyword-argument.
# When creating a new transaction
Appsignal.monitor(namespace: "admin") do
# Your code to instrument
end
Voor transacties die al zijn aangemaakt, kunt u de set_namespace methode gebruiken om de namespace van de transactie te configureren, zoals in het onderstaande voorbeeld:
# When changing the namespace later on for a transaction
transaction.set_namespace("slow_admin")
Een opmerking over de helper-locatie
De set_namespace helpers die in deze gids worden gebruikt, kunnen in elke actie die deel uitmaakt van een AppSignal-sample worden aangeroepen. We raden aan om dit zo vroeg mogelijk in het request of de background job aan te roepen, zodat de transactie wordt geconfigureerd met de gegeven namespace voordat er een fout optreedt. Anders, als er een fout optreedt of iets anders dat het proces stopt, wordt de transactie naar AppSignal verzonden voordat de set_namespace helper wordt aangeroepen, en wordt het sample in plaats daarvan onder de standaard-namespace gerapporteerd.
Meer lezen
Elixir
In Phoenix-controllers gebruiken we een plug om een functie aan te roepen voordat het request door Phoenix wordt afgehandeld. In het onderstaande codevoorbeeld gebruiken we plug om de set_appsignal_namespace functie aan te roepen (regel 5). In deze functie roepen we de Appsignal.Span.set_namespace helper aan om de namespace voor dit request te configureren (regel 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
Vervolgens configureren we de namespace voor een background job. Om alle fouten van binnen de job te vangen binnen de gewenste namespace, moet Appsignal.Span.set_namespace aan het begin van de functie worden aangeroepen voordat andere code wordt uitgevoerd, zoals op regel 4 van het onderstaande codevoorbeeld:
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
Het is ook mogelijk om de namespace te configureren bij het aanmaken van een transactie. Zie de documentatie voor decorators of instrumentatie-helpers voor meer informatie over het configureren van namespaces.
Een opmerking over de helper-locatie
De set_namespace helpers die in deze gids worden gebruikt, kunnen worden aangeroepen in elke actie die een AppSignal-transactie start. We raden aan om dit zo vroeg mogelijk in het request of de background job aan te roepen, zodat de transactie wordt geconfigureerd met de gegeven namespace voordat er een fout optreedt. Anders, als er een fout optreedt—of iets anders dat het proces stopt—wordt de transactie naar AppSignal verzonden voordat de set_namespace code wordt aangeroepen en wordt deze in plaats daarvan onder de standaard-namespace gerapporteerd.
Meer lezen
Node.js
In Node.js-applicaties werkt AppSignal met OpenTelemetry, dat spans gebruikt om metadata bij te houden, zoals tot welke namespace een span behoort. Gebruik de setNamespace helper-functie zoals hieronder weergegeven om de namespace voor de trace van de actieve span in te stellen.
import { setNamespace } from "@appsignal/nodejs";
setNamespace("custom-namespace");
Meer lezen over hoe spans werken in Node.js.
PHP
In PHP-applicaties werkt AppSignal met OpenTelemetry, dat spans gebruikt om metadata bij te houden, zoals tot welke namespace een span behoort. Gebruik de Appsignal::setNamespace helper-methode om de namespace voor de trace van de actieve span in te stellen.
Appsignal::setNamespace("admin");
Als u deze helper meerdere keren binnen één trace aanroept, gebruikt AppSignal de aanroep waarvan de span de nieuwste timestamp heeft.
Meer lezen over hoe aangepaste instrumentatie werkt in PHP.
Python
In Python-applicaties werkt AppSignal met OpenTelemetry, dat spans gebruikt om metadata bij te houden, zoals tot welke namespace een span behoort. Gebruik de set_namespace helper-functie zoals hieronder weergegeven om de namespace voor de trace van de actieve span in te stellen.
from appsignal import set_namespace
set_namespace("custom-namespace")
Meer lezen over hoe spans werken in Python.
Front-end JavaScript
In front-end JavaScript-applicaties werkt AppSignal met spans om metadata bij te houden zoals de namespace van een span.
In tegenstelling tot Ruby, Node.js, PHP en Python heeft de Front-end
JavaScript API geen globale setNamespace / set_namespace helper. In plaats
daarvan, net als Elixir, Go en Java, stelt u de namespace direct in op een span.
Bij het aanmaken van deze span roept u setNamespace aan met een String waarde van de gewenste namespace-naam, zoals weergegeven in het onderstaande voorbeeld:
const span = appsignal.createSpan();
span.setNamespace("admin"); // a custom namespace for this span (defaults to `frontend`)
Meer lezen over hoe spans werken in front-end JavaScript.
In Go-applicaties werkt AppSignal met OpenTelemetry, dat spans gebruikt om metadata bij te houden, zoals tot welke namespace een span behoort. Stel op een willekeurige span in de trace een appsignal.namespace attribuut in met een String-waarde van de nieuwe namespace.
span.SetAttributes(attribute.String("appsignal.namespace", "admin"))
Zie de Go custom instrumentation docs voor hoe u een span ophaalt of een nieuwe aanmaakt.
Als er meerdere attributen met het appsignal.namespace attribuut worden gevonden, is de span met de nieuwste timestamp leidend.
Meer lezen over hoe aangepaste instrumentatie werkt in Go.
Java
In Java-applicaties werkt AppSignal met OpenTelemetry, dat spans gebruikt om metadata bij te houden, zoals tot welke namespace een span behoort. Stel op een willekeurige span in de trace een appsignal.namespace attribuut in met een String-waarde van de nieuwe namespace.
span.setAttribute("appsignal.namespace", "admin");
Zie de Java custom instrumentation docs voor hoe u een span ophaalt of een nieuwe aanmaakt.
Als er meerdere attributen met het appsignal.namespace attribuut worden gevonden, is de span met de nieuwste timestamp leidend.
Meer lezen over hoe aangepaste instrumentatie werkt in Java.
Deploy
Wanneer uw applicatie is geconfigureerd met haar nieuwe namespace-helpers, commit u uw wijzigingen en deployt u de app. Wanneer de app start/herstart, rapporteert AppSignal acties onder hun nieuwe namespace 🥳!
Gegevens van oude deploys blijven gegroepeerd onder hun oorspronkelijke
namespace. Alleen nieuw gerapporteerde acties worden gegroepeerd onder hun
nieuwe namespaces.
Worden namespaces niet correct gerapporteerd? Geen paniek, neem contact met ons op en wij helpen u verder!
Verder lezen