Passer au contenu principal
Remarque : La prise en charge des namespaces personnalisés a été ajoutée dans la version 1.3.0 du paquet AppSignal pour Elixir.
Le paquet AppSignal pour Elixir s’intègre à Plug. Pour mettre en place l’intégration, veuillez suivre notre guide d’installation. Cette page décrit comment configurer AppSignal dans une application Plug, et comment ajouter de l’instrumentation pour les événements à l’intérieur des requêtes. Pour plus d’informations sur l’instrumentation personnalisée, lisez la documentation sur l’instrumentation Elixir. Vous trouverez plus d’informations dans la documentation du paquet Hex AppSignal.

Installation

L’instrumentation AppSignal pour Plug fait partie d’un paquet séparé, qui dépend du paquet principal appsignal. Ajoutez le paquet appsignal_plug à votre fichier mix.exs.
# mix.exs
defmodule AppsignalPlugExample.MixProject do
  # ...

  defp deps do
    [
      {:plug, "~> 1.0"}, # Or plug_cowboy ~> 2.0
      {:appsignal_plug, "~> 2.0"}
      # ...
    ]
  end
end
Si vous utilisez déjà notre paquet appsignal_phoenix, il n’est pas nécessaire d’ajouter le paquet appsignal_plug car il est déjà une dépendance du paquet appsignal_phoenix. Voir également notre guide d’intégration Phoenix.

Requêtes HTTP entrantes

Nous commencerons avec une petite application Plug qui accepte les requêtes GET sur / et renvoie un message de bienvenue. Pour commencer à journaliser les requêtes HTTP dans cette application, nous utiliserons le module 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
Cela créera une transaction pour chaque requête HTTP effectuée sur le endpoint.

Instrumentation personnalisée

Bien que Appsignal.Plug démarrera des transactions pour vous, il n’instrumentera pas encore les événements dans votre application. Pour ce faire, nous devons ajouter de l’instrumentation personnalisée. Cette application d’exemple ressemble à celle utilisée précédemment, mais elle a une fonction lente (nommée slow/0) pour laquelle nous souhaitons ajouter de l’instrumentation. Pour ce faire, nous devons utiliser le helper Appsignal.instrument/2-3 dans notre fonction appelée :
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
Cela ajoutera un événement pour la fonction slow/0 à la transaction courante chaque fois qu’elle est appelée. Pour plus d’informations sur l’instrumentation personnalisée, lisez la documentation sur l’instrumentation Elixir.

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.

Instrumentation de Plug avec des décorateurs

Pour ajouter de l’instrumentation aux Plugs, utilisez la fonction 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