Das AppSignal-für-Elixir-Paket integriert sich mit Phoenix. Um die
Integration einzurichten, folgen Sie bitte unserem Installationsleitfaden.
Diese Seite beschreibt weitere Möglichkeiten zur Konfiguration von AppSignal für das Phoenix-
Framework. Um Ihrer Phoenix-Anwendung weitere benutzerdefinierte Instrumentierung
hinzuzufügen, lesen Sie die Elixir-
Instrumentierungs-Dokumentation.
Weitere Informationen finden Sie in der AppSignal-Hex-Paket-
Dokumentation.
Installation
- Die AppSignal-Instrumentierung für Phoenix ist Teil eines
separaten Pakets, das vom primären
appsignal-Paket abhängt. Fügen Sie das Paket appsignal_phoenix zu Ihrer mix.exs-Datei hinzu.
# mix.exs
defmodule AppsignalPhoenixExample.MixProject do
# ...
defp deps do
[
{:phoenix, "~> 1.5.3"},
{:appsignal_phoenix, "~> 2.0"}
# ...
]
end
end
- Führen Sie dann
mix deps.get aus.
- Führen Sie dann
mix appsignal.install YOUR_PUSH_API_KEY aus.
Nach der Installation und Konfiguration startet das AppSignal-für-Phoenix-Paket automatisch mit der Instrumentierung von HTTP-Anfragen, was bedeutet, dass keine weitere Einrichtung erforderlich ist.
Um tiefere Einblicke zu erhalten, kann AppSignal so eingerichtet werden, dass es Channels und Live-Views instrumentiert.
Channels
Channel-Instrumentierung mit dem Handle eines Channels
Eingehende Channel-Anfragen können instrumentiert werden, indem der Code in Ihren
handle_in/3-Funktionen mit Appsignal.Phoenix.Channel.instrument/5 umschlossen wird:
defmodule AppsignalPhoenixExampleWeb.RoomChannel do
use Phoenix.Channel
# ...
def handle_in("new_msg", %{"body" => body} = params, socket) do
Appsignal.Phoenix.Channel.instrument(__MODULE__, "new_msg", params, socket, fn ->
broadcast!(socket, "new_msg", %{body: body})
{:noreply, socket}
end)
end
end
Alternativ können Sie Funktions-Decoratoren verwenden, um Channels zu instrumentieren. Obwohl
weniger flexibel als die Instrumentierungsfunktion, minimieren Decoratoren die Menge an
Code, die Sie zu den Channels Ihrer Anwendung hinzufügen müssen.
defmodule SomeApp.MyChannel do
use Appsignal.Instrumentation.Decorators
@decorate channel_action()
def handle_in("ping", _payload, socket) do
# your code here..
end
end
Channel-Events werden unter dem Tab „Background jobs“ angezeigt und zeigen das
Channel-Modul und das Action-Argument, das Sie eingegeben haben.
LiveView
Es gibt zwei verschiedene Möglichkeiten, Live-Views zu instrumentieren. Sie können entweder unsere
automatischen Telemetry-Handler verwenden oder Sie können Ihre Live-View-Handler manuell mit unseren Helferfunktionen instrumentieren.
Automatische Telemetry-Handler
Hinweis: Die LiveView-Telemetry-Integration ist ab AppSignal-für-
Phoenix-Version 2.1.0 verfügbar.
Die LiveView-Telemetry-Integration von AppSignal instrumentiert automatisch LiveView-Events.
Um sie einzurichten, rufen Sie Appsignal.Phoenix.LiveView.attach/0 auf, um die LiveView-Telemetry-Handler anzuhängen.
Wir empfehlen, diese Funktion in der application.ex Ihrer App aufzurufen:
defmodule AppsignalPhoenixExample.Application do
# ...
def start(_type, _args) do
Appsignal.Phoenix.LiveView.attach() # <--- attach the LiveView Telemetry handlers
children = [
# Start the Ecto repository
AppsignalPhoenixExample.Repo,
# Start the Telemetry supervisor
AppsignalPhoenixExampleWeb.Telemetry,
# Start the PubSub system
{Phoenix.PubSub, name: AppsignalPhoenixExample.PubSub},
# Start the Endpoint (http/https)
AppsignalPhoenixExampleWeb.Endpoint
# Start a worker by calling: AppsignalPhoenixExample.Worker.start_link(arg)
# {AppsignalPhoenixExample.Worker, arg}
]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: AppsignalPhoenixExample.Supervisor]
Supervisor.start_link(children, opts)
end
end
AppSignal instrumentiert nun automatisch alle mount-, handle_event- und handle_param-Events unter dem live_view-Namespace, was bedeutet, dass Sie sowohl Performance- als auch Fehlereinblicke in Ihre Live-Views erhalten.
Manuelle Helferfunktionen
Wenn Sie die automatische Telemetry-Instrumentierung oben bereits konfiguriert haben,
müssen Sie Ihre Live-View-Handler nicht manuell instrumentieren.
Hinweis: Die LiveView-Helferfunktionen sind ab AppSignal-für-
Elixir-Version 1.13.0 verfügbar.
Eine LiveView-Action kann auch manuell instrumentiert werden, indem ihr Inhalt in einen
Appsignal.Phoenix.LiveView.instrument/4-Block eingewickelt wird.
Bei einer Live-View, die ihren eigenen Zustand jede Sekunde aktualisiert, können wir
AppSignal-Instrumentierung hinzufügen, indem wir sowohl die Funktionen mount/2 als auch handle_info/2
mit einem Appsignal.Phoenix.LiveView.instrument/4-Aufruf umschließen:
defmodule AppsignalPhoenixExampleWeb.ClockLive do
use Phoenix.LiveView
import Appsignal.Phoenix.LiveView, only: [instrument: 4]
def render(assigns) do
AppsignalPhoenixExampleWeb.ClockView.render("index.html", assigns)
end
def mount(_session, socket) do
# Wrap the contents of the mount/2 function with a call to
# Appsignal.Phoenix.LiveView.instrument/4
instrument(__MODULE__, "mount", socket, fn ->
:timer.send_interval(1000, self(), :tick)
{:ok, assign(socket, state: Time.utc_now())}
end)
end
def handle_info(:tick, socket) do
# Wrap the contents of the handle_info/2 function with a call to
# Appsignal.Phoenix.LiveView.instrument/4:
instrument(__MODULE__, "tick", socket, fn ->
{:ok, assign(socket, state: Time.utc_now())}
end)
end
end
Der Aufruf einer dieser Funktionen in Ihrer App erstellt jetzt automatisch ein
Sample, das an AppSignal gesendet wird. Diese werden unter dem :live_view-Namespace angezeigt.
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. Weitere Informationen finden Sie in der
Plug-
Dokumentation.
Benutzerdefinierte Instrumentierung
Fügen Sie benutzerdefinierte Instrumentierung hinzu, um
komplexeren Code zu verfolgen und vollständigere Aufschlüsselungen langsamer
Anfragen zu erhalten.