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

# AppSignal in Plug integrieren

<Tip>
  **Hinweis**: Unterstützung für benutzerdefinierte Namespaces wurde in Version 1.3.0 des
  AppSignal-für-Elixir-Pakets hinzugefügt.
</Tip>

Das AppSignal-für-Elixir-Paket integriert sich mit Plug. Um die
Integration einzurichten, folgen Sie bitte unserem [Installationsleitfaden](/elixir/installation).

Diese Seite beschreibt, wie Sie AppSignal in einer Plug-Anwendung einrichten und wie Sie
Instrumentierung für Events innerhalb von Anfragen hinzufügen. Weitere Informationen zur
benutzerdefinierten Instrumentierung finden Sie in der [Elixir-
Instrumentierungs-Dokumentation](/elixir/instrumentation).

Weitere Informationen finden Sie in der [AppSignal-Hex-Paket-
Dokumentation][hex-appsignal].

## Installation

Die AppSignal-Instrumentierung für Plug ist Teil eines separaten Pakets, das vom primären `appsignal`-Paket abhängt. Fügen Sie das Paket `appsignal_plug` zu Ihrer `mix.exs`-Datei hinzu.

<CodeGroup>
  ```elixir Elixir theme={null}
  # mix.exs
  defmodule AppsignalPlugExample.MixProject do
    # ...

    defp deps do
      [
        {:plug, "~> 1.0"}, # Or plug_cowboy ~> 2.0
        {:appsignal_plug, "~> 2.0"}
        # ...
      ]
    end
  end
  ```
</CodeGroup>

Wenn Sie bereits unser `appsignal_phoenix`-Paket verwenden, ist es nicht notwendig, das `appsignal_plug`-Paket hinzuzufügen, da es bereits eine Abhängigkeit des `appsignal_phoenix`-Pakets ist. Siehe auch unsere [Phoenix-Integrationsanleitung](/elixir/installation/umbrella#phoenix).

## Eingehende HTTP-Anfragen

Wir beginnen mit einer kleinen Plug-App, die `GET`-Anfragen an `/` annimmt und
eine Willkommensnachricht zurückgibt. Um in dieser App mit dem Protokollieren von HTTP-Anfragen zu beginnen, verwenden wir
das Modul `Appsignal.Plug`.

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule AppsignalPlugExample do
    use Plug.Router
    use Appsignal.Plug # <- Add this

    plug :match
    plug :dispatch

    get "/" do
      send_resp(conn, 200, "Welcome")
    end
  end
  ```
</CodeGroup>

Dies erstellt für jede HTTP-Anfrage, die auf dem Endpunkt ausgeführt wird, eine Transaktion.

## Benutzerdefinierte Instrumentierung

Obwohl `Appsignal.Plug` Transaktionen für Sie startet, instrumentiert es noch keine
Events in Ihrer App. Dafür müssen wir etwas benutzerdefinierte
Instrumentierung hinzufügen.

Diese Beispiel-App sieht aus wie die, die wir zuvor verwendet haben, aber sie hat eine langsame Funktion
(passenderweise `slow/0` genannt), für die wir Instrumentierung hinzufügen möchten. Dazu müssen wir
den Helfer `Appsignal.instrument/2-3` in unserer aufgerufenen Funktion verwenden:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule AppsignalPlugExample do
    use Plug.Router

    plug :match
    plug :dispatch

    get "/" do
      slow()
      send_resp(conn, 200, "Welcome")
    end

    defp slow do
      Appsignal.instrument("slow", fn ->
        :timer.sleep(1000)
      end)
    end

    use Appsignal.Plug
  end
  ```
</CodeGroup>

Dies fügt der aktuellen Transaktion ein Event für die Funktion `slow/0` hinzu,
wann immer sie aufgerufen wird. Weitere Informationen zur benutzerdefinierten Instrumentierung finden Sie in
der [Elixir-Instrumentierungs-Dokumentation](/elixir/instrumentation).

## Instrumentierung für eingebundene Plugs

Ausnahmen in eingebundenen Plugs werden automatisch von AppSignal abgefangen, aber
Performance-Samples müssen manuell mit den benutzerdefinierten Instrumentierungs-
Helfern oder Decoratoren eingerichtet werden.

### Plug-Instrumentierung mit Decoratoren

Um Plugs Instrumentierung hinzuzufügen, verwenden Sie die Funktion `Appsignal.instrument/2`:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule SlowPlugWithDecorators do
    import Plug.Conn

    def init(opts), do: opts

    def call(conn, _) do
      Appsignal.instrument("SlowPlugWithDecorators", fn ->
        :timer.sleep(1000)
        conn
      end)
    end
  end
  ```
</CodeGroup>

[hex-appsignal]: https://hexdocs.pm/appsignal/
