Le paquet AppSignal pour Elixir s’intègre à Phoenix. Pour mettre en place
l’intégration, veuillez suivre notre guide d’installation.
Cette page décrira les autres façons de configurer AppSignal pour le framework
Phoenix. Pour ajouter plus d’instrumentation personnalisée à votre application
Phoenix, lisez la documentation sur l’instrumentation
Elixir.
Vous trouverez plus d’informations dans la documentation du paquet Hex
AppSignal.
Installation
- L’instrumentation AppSignal pour Phoenix fait partie d’un
paquet séparé, qui dépend du paquet principal
appsignal. Ajoutez le paquet appsignal_phoenix à votre fichier mix.exs.
# mix.exs
defmodule AppsignalPhoenixExample.MixProject do
# ...
defp deps do
[
{:phoenix, "~> 1.5.3"},
{:appsignal_phoenix, "~> 2.0"}
# ...
]
end
end
- Puis exécutez
mix deps.get.
- Puis exécutez
mix appsignal.install YOUR_PUSH_API_KEY.
Après installation et configuration, le paquet AppSignal pour Phoenix commence automatiquement à instrumenter les requêtes HTTP, ce qui signifie qu’aucune configuration supplémentaire n’est nécessaire.
Pour obtenir des informations plus approfondies, AppSignal peut être configuré pour instrumenter les canaux et les live views.
Canaux
Instrumentation de canal avec un handle de canal
Les requêtes de canal entrantes peuvent être instrumentées en enveloppant le code dans vos
fonctions handle_in/3 avec Appsignal.Phoenix.Channel.instrument/5 :
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
Vous pouvez également utiliser les décorateurs de fonction pour instrumenter les canaux. Bien que
moins flexibles que la fonction d’instrumentation, les décorateurs minimisent la quantité
de code que vous devez ajouter aux canaux de votre application.
defmodule SomeApp.MyChannel do
use Appsignal.Instrumentation.Decorators
@decorate channel_action()
def handle_in("ping", _payload, socket) do
# your code here..
end
end
Les événements de canal seront affichés dans l’onglet « Background jobs », montrant le
module du canal et l’argument d’action que vous avez saisi.
LiveView
Il existe deux façons différentes d’instrumenter les live views. Vous pouvez soit utiliser nos
handlers de télémétrie automatiques, soit instrumenter manuellement vos handlers de live view
à l’aide de nos fonctions d’aide.
Handlers de télémétrie automatiques
Remarque : L’intégration LiveView Telemetry est disponible à partir d’AppSignal pour
Phoenix version 2.1.0.
L’intégration LiveView Telemetry d’AppSignal instrumente automatiquement les événements de live view.
Pour la mettre en place, appelez Appsignal.Phoenix.LiveView.attach/0 pour attacher les handlers LiveView Telemetry.
Nous recommandons d’appeler cette fonction depuis le fichier application.ex de votre application :
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 instrumentera désormais automatiquement tous les événements mount, handle_event et handle_param sous le namespace live_view, ce qui signifie que vous obtiendrez à la fois des informations de performance et d’erreur sur vos live views.
Fonctions d’aide manuelles
Si vous avez déjà configuré l’instrumentation télémétrique automatique ci-dessus,
vous n’avez pas besoin d’instrumenter manuellement vos handlers de live view.
Remarque : Les fonctions d’aide LiveView sont disponibles à partir d’AppSignal pour
Elixir version 1.13.0.
Une action LiveView peut également être instrumentée manuellement en enveloppant son contenu dans un
bloc Appsignal.Phoenix.LiveView.instrument/4.
Étant donné une live view qui met à jour son propre état chaque seconde, nous pouvons ajouter
l’instrumentation AppSignal en enveloppant à la fois les fonctions mount/2 et handle_info/2
avec un appel Appsignal.Phoenix.LiveView.instrument/4 :
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
Appeler l’une de ces fonctions dans votre application créera maintenant automatiquement un
échantillon envoyé à AppSignal. Ceux-ci sont affichés sous le namespace
:live_view.
Instrumentation pour les Plugs inclus
Les exceptions dans les Plugs inclus sont automatiquement attrapées par AppSignal, mais
les échantillons de performance doivent être configurés manuellement en utilisant les helpers
d’instrumentation personnalisés ou les décorateurs. Voir la documentation
Plug
pour plus d’informations.
Instrumentation personnalisée
Ajoutez de l’instrumentation personnalisée pour
suivre du code plus complexe et obtenir des décompositions plus complètes des requêtes
lentes.