Appsignal.instrument/2-3
A função instrument/2 é usada para adicionar instrumentação envolvendo um trecho
de código em um span. Um span eventualmente se torna uma amostra, ou um evento na amostra
de outro span no AppSignal.
Adicionar spans a traces
No exemplo a seguir, temos um controller Phoenix com uma funçãoindex/2
que chama uma função lenta. A função slow é instrumentada usando
a função Appsignal.instrument/2, que a registra como um evento separado nessa
requisição Phoenix. Ela aparecerá no AppSignal.com na timeline de eventos
desta amostra para fornecer mais insight sobre onde a maior parte do tempo foi gasta durante a
requisição.
Appsignal.instrument3,
e passamos "slow" como o nome do evento.
Iniciando novos traces
No exemplo do Phoenix, um trace do AppSignal já foi iniciado, graças ao suporte de primeira classe ao Phoenix no pacote AppSignal. Nem todos os frameworks e pacotes são suportados diretamente no momento e iniciam automaticamente traces. O mesmo vale para suas próprias aplicações Elixir puras. Como ao adicionar spans a traces já instrumentados, um novo root span é criado usando a funçãoAppsignal.instrument/2:
instrument/3 em vez disso:
instrument/2-3 a chama com o span aberto para permitir mais personalização. Veja os docs em hex.pm para todas as funções de Span disponíveis.
Tratamento de exceções
Para reportar erros usando instrumentação personalizada, leia mais em nosso guia de tratamento de exceções.Function decorators
Usando o módulo de decoratorAppsignal.Instrumentation.Decorators, é
possível adicionar instrumentação personalizada às suas aplicações Elixir sem
alterar o conteúdo das funções.
Eventos de transação
No exemplo a seguir, temos um controller Phoenix com uma funçãoindex/2
que chama uma função lenta. A função slow é instrumentada usando o decorator
transaction_event do AppSignal, que a registra como um evento separado nesta requisição
Phoenix. Ela aparecerá no AppSignal.com na timeline de eventos desta amostra de transação
para fornecer mais insight sobre onde a maior parte do tempo foi gasta durante a requisição.
phoenix_controller, phoenix_render, ecto, etc.), você também pode
fornecer um nome de grupo ao decorator transaction_event.
get_data_from_github.github_api na timeline
de eventos. Para mais informações sobre como os nomes de eventos são usados, leia
nossas diretrizes de nomenclatura de eventos.
Transações
No exemplo do Phoenix, uma transação AppSignal já foi iniciada, graças ao suporte de primeira classe ao Phoenix no pacote AppSignal. Nem todos os frameworks e pacotes são suportados diretamente no momento e iniciam automaticamente transações. O mesmo vale para suas próprias aplicações Elixir puras. Para rastrear decoratorstransaction_event, precisaremos iniciar uma
transação AppSignal previamente. Podemos iniciar uma transação com o function
decorator transaction.
Namespaces
Para diferenciar entre requisições HTTP e background jobs, podemos passar um namespace para a transação assim que iniciá-la. Os dois namespaces a seguir são namespaces oficiais suportados pelo AppSignal.http_request- o padrão - é chamado de namespace “web”background_job- cria o namespace “background”
Namespaces personalizados
Você também pode criar seus próprios namespaces para rastrear transações em uma parte separada da sua aplicação, como um painel administrativo. Isso agrupará todas as transações com esse namespace em uma seção separada no AppSignal.com para que controllers admin lentos não interfiram nas médias de velocidade da sua aplicação.Phoenix channels
Há um function decorator personalizado para Phoenix channels. Este decorator deve ser colocado antes da funçãohandle_in/3 de um módulo Phoenix.Channel.