Hinweis: Unterstützung für benutzerdefinierte Namespaces wurde in Version 1.3.0 des
AppSignal-für-Elixir-Pakets hinzugefügt.
Das AppSignal-für-Elixir-Paket integriert sich mit Plug. Um die
Integration einzurichten, folgen Sie bitte unserem Installationsleitfaden.
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.
Weitere Informationen finden Sie in der AppSignal-Hex-Paket-
Dokumentation.
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.
# mix.exs
defmodule AppsignalPlugExample.MixProject do
# ...
defp deps do
[
{:plug, "~> 1.0"}, # Or plug_cowboy ~> 2.0
{:appsignal_plug, "~> 2.0"}
# ...
]
end
end
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.
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.
defmodule AppsignalPlugExample do
use Plug.Router
use Appsignal.Plug # <- Add this
plug :match
plug :dispatch
get "/" do
send_resp(conn, 200, "Welcome")
end
end
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:
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
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.
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:
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