Naar hoofdinhoud gaan
Opmerking: Ondersteuning voor aangepaste namespaces is toegevoegd in versie 1.3.0 van het AppSignal voor Elixir-pakket.
Het AppSignal voor Elixir-pakket integreert met Plug. Om de integratie op te zetten, volg onze installatiehandleiding. Deze pagina beschrijft hoe u AppSignal in een Plug-applicatie opzet en hoe u instrumentatie voor events binnen requests toevoegt. Lees voor meer informatie over aangepaste instrumentatie de Elixir- instrumentatie-documentatie. Meer informatie vindt u in de AppSignal Hex-pakketdocumentatie.

Installatie

De AppSignal-instrumentatie voor Plug is onderdeel van een apart pakket, dat afhankelijk is van het primaire appsignal-pakket. Voeg het pakket appsignal_plug toe aan uw mix.exs-bestand.
# mix.exs
defmodule AppsignalPlugExample.MixProject do
  # ...

  defp deps do
    [
      {:plug, "~> 1.0"}, # Or plug_cowboy ~> 2.0
      {:appsignal_plug, "~> 2.0"}
      # ...
    ]
  end
end
Als u ons appsignal_phoenix-pakket al gebruikt, hoeft u het pakket appsignal_plug niet toe te voegen, aangezien dit al een afhankelijkheid is van het pakket appsignal_phoenix. Zie ook onze Phoenix-integratiehandleiding.

Inkomende HTTP-requests

We beginnen met een kleine Plug-app die GET-requests naar / accepteert en een welkomstbericht retourneert. Om HTTP-requests in deze app te beginnen loggen, gebruiken we de 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
Dit maakt een transactie aan voor elke HTTP-request die op het endpoint wordt uitgevoerd.

Aangepaste instrumentatie

Hoewel Appsignal.Plug transacties voor u start, instrumenteert het voorlopig nog geen events in uw app. Om dat te doen, moeten we wat aangepaste instrumentatie toevoegen. Deze voorbeeld-app lijkt op die we eerder hebben gebruikt, maar deze heeft een trage functie (toepasselijk slow/0 genaamd) waarvoor we instrumentatie willen toevoegen. Om dat te doen, moeten we de helper Appsignal.instrument/2-3 in onze aangeroepen functie gebruiken:
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
Dit voegt een event voor de slow/0-functie toe aan de huidige transactie, telkens wanneer deze wordt aangeroepen. Lees voor meer informatie over aangepaste instrumentatie de Elixir-instrumentatie-documentatie.

Instrumentatie voor opgenomen Plugs

Uitzonderingen in opgenomen Plugs worden automatisch opgevangen door AppSignal, maar performance samples moeten handmatig worden opgezet met behulp van de aangepaste instrumentatie- helpers of decorators.

Plug-instrumentatie met decorators

Om instrumentatie toe te voegen aan Plugs, gebruikt u de functie 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