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.
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