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

# Groeperen met namespaces

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.

<Tip>
  Wilt u meer weten over waarvoor namespaces kunnen worden gebruikt? Bekijk deze
  lijst: [Wat kunt u doen met
  namespaces?](/application/namespaces#what-can-you-do-with-namespaces)
</Tip>

<Frame caption="De bovenstaande afbeelding toont voorbeeldgrafieken met meerdere namespaces, waarbij een GraphQL API en de Web-namespace worden opgesplitst.">
  <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>

## Namespaces configureren

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.

<Tip>
  Namespace-namen mogen alleen letters (a-z) en underscores bevatten
  <br /> We raden aan niet meer dan **15** namespaces per applicatie te hebben.
</Tip>

#### Configuraties per taal

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

### 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][ruby helper] aan om "admin" te configureren als de namespace voor dit request. Dit werkt ook als andere controllers subklassen zijn van de `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>

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.

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

Het is ook mogelijk om de namespace te configureren bij het aanmaken van een transactie met behulp van de [`Appsignal.monitor`](https://rubydoc.info/gems/appsignal/Appsignal/Helpers/Instrumentation#monitor-instance_method) helper. Deze accepteert de namespace als keyword-argument.

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

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:

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

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

* [Documentatie van de `Appsignal.set_namespace` helper-methode][ruby helper]

### 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][elixir helper] aan om de namespace voor dit request te configureren (regel 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>

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:

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

Het is ook mogelijk om de namespace te configureren bij het aanmaken van een transactie. Zie de documentatie voor [decorators][elixir namespace_decorator] of [instrumentatie-helpers][elixir namespace_helper] 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

* [Documentatie van de `Appsignal.Span.set_namespace` helper-methode][elixir helper]
* [Elixir Namespace-decorator][elixir namespace_decorator]
* [Elixir Namespace-instrumentatie-helper][elixir namespace_helper]

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

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

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

[Meer lezen over hoe spans werken in Node.js](/nodejs/3.x/instrumentation/instrumentation).

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

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

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][php custom instrumentation].

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

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

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

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

[Meer lezen over hoe spans werken in Python](/python/instrumentation/instrumentation).

### Front-end JavaScript

In front-end JavaScript-applicaties werkt AppSignal met spans om metadata bij te houden zoals de namespace van een span.

<Tip>
  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.
</Tip>

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:

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

[Meer lezen over hoe spans werken in front-end JavaScript](/front-end/span).

### Go

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.

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

Zie de [Go custom instrumentation docs][go custom instrumentation] 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][go custom instrumentation].

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

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

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

Zie de [Java custom instrumentation docs][java custom instrumentation] 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][java custom instrumentation].

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

## 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 🥳!

<Tip>
  Gegevens van oude deploys blijven gegroepeerd onder hun oorspronkelijke
  namespace. Alleen nieuw gerapporteerde acties worden gegroepeerd onder hun
  nieuwe namespaces.
</Tip>

Worden namespaces niet correct gerapporteerd? Geen paniek, [neem contact met ons op][contact] en wij helpen u verder!

## Verder lezen

* [Applicatiegegevens filteren][filtering]
* [Namespaces][namespaces]
* [Namespaces negeren][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
