Pular para o conteúdo principal
Nota: O suporte para namespaces personalizados foi adicionado na versão 1.3.0 do pacote AppSignal for Elixir.
O pacote AppSignal for Elixir se integra ao Plug. Para configurar a integração, siga nosso guia de instalação. Esta página descreve como configurar o AppSignal em uma aplicação Plug e como adicionar instrumentação para eventos dentro das requisições. Para mais informações sobre instrumentação personalizada, leia a documentação de instrumentação Elixir. Mais informações podem ser encontradas na documentação do pacote Hex do AppSignal.

Instalação

A instrumentação do AppSignal para Plug faz parte de um pacote separado, que depende do pacote appsignal principal. Adicione o pacote appsignal_plug ao seu arquivo mix.exs.
# mix.exs
defmodule AppsignalPlugExample.MixProject do
  # ...

  defp deps do
    [
      {:plug, "~> 1.0"}, # Ou plug_cowboy ~> 2.0
      {:appsignal_plug, "~> 2.0"}
      # ...
    ]
  end
end
Se você já usa nosso pacote appsignal_phoenix, não é necessário adicionar o pacote appsignal_plug, pois ele já é uma dependência do pacote appsignal_phoenix. Veja também nosso guia de integração com Phoenix.

Requisições HTTP de entrada

Vamos começar com um pequeno app Plug que aceita requisições GET em / e retorna uma mensagem de boas-vindas. Para começar a registrar requisições HTTP neste app, usaremos o módulo Appsignal.Plug.
defmodule AppsignalPlugExample do
  use Plug.Router
  use Appsignal.Plug # <- Adicione isto

  plug :match
  plug :dispatch

  get "/" do
    send_resp(conn, 200, "Welcome")
  end
end
Isso criará uma transação para cada requisição HTTP que for realizada no endpoint.

Instrumentação personalizada

Embora Appsignal.Plug inicie transações para você, ele ainda não instrumenta eventos no seu app. Para isso, precisamos adicionar alguma instrumentação personalizada. Este exemplo de app parece com o que usamos antes, mas tem uma função lenta (apropriadamente chamada slow/0) para a qual gostaríamos de adicionar instrumentação. Para isso, precisamos usar o helper Appsignal.instrument/2-3 na nossa função chamada:
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
Isso adicionará um evento para a função slow/0 à transação atual sempre que ela for chamada. Para mais informações sobre instrumentação personalizada, leia a documentação de instrumentação Elixir.

Instrumentação de Plugs incluídos

Exceções em Plugs incluídos são automaticamente capturadas pelo AppSignal, mas as amostras de desempenho precisam ser configuradas manualmente usando os helpers de instrumentação personalizada ou decorators.

Instrumentação de Plugs com decorators

Para adicionar instrumentação a Plugs, use a função 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