Skip to main content
Namespaces sind eine Möglichkeit, Fehlervorfälle, Performance-Vorfälle und Metriken aus Aktionen zu gruppieren. AppSignal verwendet standardmäßig drei Namespaces:
  • web für Web-Anfragen
  • frontend für Front-end-JavaScript
  • background für Background-Jobs
Anwendungen können eine beliebige Anzahl von Namespaces haben. Sie könnten beispielsweise einen separaten Namespace für das Administrationspanel, die API oder geplante Aufgaben Ihrer Anwendung haben. Dieser Leitfaden geht durch die Schritte, die erforderlich sind, um Aktionen in benutzerdefinierten Namespaces zu melden.
Möchten Sie mehr darüber erfahren, wofür Namespaces verwendet werden können? Schauen Sie sich diese Liste an: Was können Sie mit Namespaces tun?
App Graphs Namespaces

Namespaces konfigurieren

Namespaces werden durch den Code Ihrer Anwendung definiert. Mit kleinen Helfern können Sie den Namespace einer Aktion anpassen. Dieser Leitfaden zeigt Ihnen, wie Sie Anfragen in verschiedene Namespaces aufteilen. Für diesen Leitfaden erstellen wir einen “admin”- und einen “critical”-Namespace für Background-Jobs.
Namespace-Namen dürfen nur Buchstaben (a-z) und Unterstriche enthalten
Wir empfehlen, nicht mehr als 15 Namespaces pro Anwendung zu haben.

Konfigurationen pro Sprache

Ruby

In Rails können wir den before_action-Callback verwenden, um eine Methode aufzurufen, bevor eine Anfrage verarbeitet wird. Im untenstehenden Codebeispiel haben wir einen before_action erstellt, der die Methode set_appsignal_namespace aufruft. In dieser Methode rufen wir die Appsignal.set_namespace-Hilfsmethode auf, um “admin” als Namespace für diese Anfrage zu konfigurieren. Dies funktioniert auch, wenn andere Controller Unterklassen des AdminController sind.
# In einem Rails-Controller
# app/controllers/admin_controller.rb
class AdminController < ApplicationController
  before_action :set_appsignal_namespace

  def set_appsignal_namespace
    # Konfiguriert alle Aktionen in diesem Controller, um
    # im "admin"-Namespace zu melden
    Appsignal.set_namespace("admin")
  end

  # Andere Controller-Aktionen
end
Als Nächstes definieren wir den Namespace des Codes, der von den Sidekiq-Background-Workern unserer Anwendung ausgeführt wird. Um in unserem Background-Worker ausgelöste Fehler korrekt mit einem Namespace zu versehen, müssen wir den Namespace definieren, bevor anderer Code ausgeführt wird. Im untenstehenden Sidekiq-Worker-Codebeispiel tun wir dies sofort in der perform-Methode in Zeile 7.
# In einem Sidekiq-Worker
# app/workers/critical_worker.rb
class CriticalWorker
  include Sidekiq::Worker

  def perform
    # Konfiguriert die Jobs dieses Workers, um im "critical"-Namespace zu melden
    Appsignal.set_namespace("critical")

    # Der eigentliche Worker-Code
  end
end
Es ist auch möglich, den Namespace beim Erstellen einer Transaktion mit dem Appsignal.monitor-Helfer zu konfigurieren. Er akzeptiert den Namespace als Schlüsselwortargument.
# Beim Erstellen einer neuen Transaktion
Appsignal.monitor(namespace: "admin") do
  # Ihr zu instrumentierender Code
end
Für Transaktionen, die bereits erstellt wurden, können Sie die set_namespace-Methode verwenden, um den Namespace der Transaktion zu konfigurieren, wie im untenstehenden Beispiel:
# Beim späteren Ändern des Namespace für eine Transaktion
transaction.set_namespace("slow_admin")
Ein Hinweis zur Helfer-Position
Die in diesem Leitfaden verwendeten set_namespace-Helfer können in jeder Aktion aufgerufen werden, die Teil eines AppSignal-Samples ist. Wir empfehlen, dies so früh wie möglich in der Anfrage oder im Background-Job aufzurufen, sodass die Transaktion mit dem angegebenen Namespace konfiguriert wird, bevor ein Fehler auftritt. Andernfalls, wenn ein Fehler auftritt oder etwas anderes den Prozess stoppt, wird die Transaktion an AppSignal gesendet, bevor der set_namespace-Helfer aufgerufen wird, und das Sample wird stattdessen unter dem Standard-Namespace gemeldet.

Mehr lesen

Elixir

In Phoenix-Controllern verwenden wir ein plug, um eine Funktion aufzurufen, bevor die Anfrage von Phoenix verarbeitet wird. Im untenstehenden Codebeispiel verwenden wir plug, um die Funktion set_appsignal_namespace aufzurufen (Zeile 5). In dieser Funktion rufen wir den Appsignal.Span.set_namespace-Helfer auf, um den Namespace für diese Anfrage zu konfigurieren (Zeile 10).
# In einem Phoenix-Controller
defmodule AppsignalPhoenixExampleWeb.AdminController do
  use AppsignalPhoenixExampleWeb, :controller

  plug :set_appsignal_namespace

  defp set_appsignal_namespace(conn, _params) do
    # Konfiguriert alle Aktionen in diesem Controller, um
    # im "admin"-Namespace zu melden
    Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "admin")
    conn
  end

  # ...
end
Als Nächstes konfigurieren wir den Namespace für einen Background-Job. Um alle Fehler von innerhalb des Jobs innerhalb des gewünschten Namespaces abzufangen, muss Appsignal.Span.set_namespace am Anfang der Funktion vor anderem Code aufgerufen werden, wie in Zeile 4 des untenstehenden Codebeispiels:
defmodule MyApp.CriticalJob do
  def run do
    # Konfiguriert die Jobs dieses Workers, um im "critical"-Namespace zu melden
    Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "critical")

    # Der eigentliche Worker-Code
  end
end
Es ist auch möglich, den Namespace beim Erstellen einer Transaktion zu konfigurieren. Bitte konsultieren Sie die Dokumentation für Decorators oder Instrumentation Helpers für weitere Informationen zur Konfiguration von Namespaces.

Ein Hinweis zur Helfer-Position

Die in diesem Leitfaden verwendeten set_namespace-Helfer können in jeder Aktion aufgerufen werden, die eine AppSignal-Transaktion startet. Wir empfehlen, dies so früh wie möglich in der Anfrage oder im Background-Job aufzurufen, sodass die Transaktion mit dem angegebenen Namespace konfiguriert wird, bevor ein Fehler auftritt. Andernfalls, wenn ein Fehler auftritt – oder etwas anderes den Prozess stoppt – wird die Transaktion an AppSignal gesendet, bevor der set_namespace-Code aufgerufen wird, und sie wird stattdessen unter dem Standard-Namespace gemeldet.

Mehr lesen

Node.js

In Node.js-Anwendungen arbeitet AppSignal mit OpenTelemetry, das Spans zur Nachverfolgung von Metadaten verwendet, z. B. zu welchem Namespace ein Span gehört. Verwenden Sie die Hilfsfunktion setNamespace wie unten gezeigt, um den Namespace für den Trace des aktiven Spans festzulegen.
import { setNamespace } from "@appsignal/nodejs";

setNamespace("custom-namespace");
Mehr darüber lesen, wie Spans in Node.js funktionieren.

PHP

In PHP-Anwendungen arbeitet AppSignal mit OpenTelemetry, das Spans zur Nachverfolgung von Metadaten verwendet, z. B. zu welchem Namespace ein Span gehört. Verwenden Sie die Hilfsmethode Appsignal::setNamespace, um den Namespace für den Trace des aktiven Spans festzulegen.
Appsignal::setNamespace("admin");
Wenn Sie diese Hilfsmethode mehrmals innerhalb eines einzelnen Traces aufrufen, verwendet AppSignal den Aufruf, dessen Span den neuesten Zeitstempel hat. Mehr darüber lesen, wie benutzerdefinierte Instrumentierung in PHP funktioniert.

Python

In Python-Anwendungen arbeitet AppSignal mit OpenTelemetry, das Spans zur Nachverfolgung von Metadaten verwendet, z. B. zu welchem Namespace ein Span gehört. Verwenden Sie die Hilfsfunktion set_namespace wie unten gezeigt, um den Namespace für den Trace des aktiven Spans festzulegen.
from appsignal import set_namespace

set_namespace("custom-namespace")
Mehr darüber lesen, wie Spans in Python funktionieren.

Front-end JavaScript

In Front-end-JavaScript-Anwendungen arbeitet AppSignal mit Spans, um Metadaten wie den Namespace eines Spans zu verfolgen.
Anders als Ruby, Node.js, PHP und Python verfügt die Front-end-JavaScript-API nicht über einen globalen setNamespace / set_namespace-Helfer. Stattdessen setzen Sie, wie bei Elixir, Go und Java, den Namespace direkt am Span.
Beim Erstellen dieses Spans rufen Sie setNamespace mit einem String-Wert des gewünschten Namespace-Namens auf, wie im untenstehenden Beispiel gezeigt:
const span = appsignal.createSpan();
span.setNamespace("admin"); // ein benutzerdefinierter Namespace für diesen Span (Standard ist `frontend`)
Mehr darüber lesen, wie Spans in Front-End-JavaScript funktionieren.

Go

In Go-Anwendungen arbeitet AppSignal mit OpenTelemetry, das Spans zur Nachverfolgung von Metadaten verwendet, z. B. zu welchem Namespace ein Span gehört. Setzen Sie an einem beliebigen Span im Trace ein Attribut appsignal.namespace mit einem String-Wert des neuen Namespaces.
span.SetAttributes(attribute.String("appsignal.namespace", "admin"))
Bitte konsultieren Sie die Go-Dokumentation zur benutzerdefinierten Instrumentierung, wie Sie einen Span abrufen oder einen neuen erstellen. Wenn mehrere Attribute mit dem appsignal.namespace-Attribut gefunden werden, ist der Span mit dem neuesten Zeitstempel maßgebend. Mehr darüber lesen, wie benutzerdefinierte Instrumentierung in Go funktioniert.

Java

In Java-Anwendungen arbeitet AppSignal mit OpenTelemetry, das Spans zur Nachverfolgung von Metadaten verwendet, z. B. zu welchem Namespace ein Span gehört. Setzen Sie an einem beliebigen Span im Trace ein Attribut appsignal.namespace mit einem String-Wert des neuen Namespaces.
span.setAttribute("appsignal.namespace", "admin");
Bitte konsultieren Sie die Java-Dokumentation zur benutzerdefinierten Instrumentierung, wie Sie einen Span abrufen oder einen neuen erstellen. Wenn mehrere Attribute mit dem appsignal.namespace-Attribut gefunden werden, ist der Span mit dem neuesten Zeitstempel maßgebend. Mehr darüber lesen, wie benutzerdefinierte Instrumentierung in Java funktioniert.

Deployment

Wenn Ihre Anwendung mit ihren neuen Namespace-Helfern konfiguriert ist, committen Sie Ihre Änderungen und deployen Sie die App. Wenn die App startet/neu startet, meldet AppSignal Aktionen unter ihrem neuen Namespace 🥳!
Daten aus alten Deployments bleiben nach ihrem ursprünglichen Namespace gruppiert. Nur neu gemeldete Aktionen werden nach ihren neuen Namespaces gruppiert.
Werden Namespaces nicht korrekt gemeldet? Keine Panik, melden Sie sich bei uns und wir helfen Ihnen weiter!

Weiterführende Literatur