Zum Hauptinhalt springen
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