Nosso agente Ruby utiliza automaticamente várias estruturas comuns de trabalho em segundo plano. Você também pode personalizá-lo para trace quaisquer tarefas em segundo plano. Os dados de tarefas em segundo plano aparecem na páginaTransactions do APM como Non-web transactions.
Estrutura suportada
A seguinte estrutura de trabalho em segundo plano é suportada por padrão em versões recentes do agente Ruby:
- Resque instrumentação (agente Ruby 3.4.0)
- Instrumentação Sidekiq (agente Ruby 3.6.0)
- Delayed::Job instrumentação (Agente Ruby 2.10)
Importante
O usuário JRuby pode encontrar problemas com métricas de CPU.
Se você estiver usando essa estrutura, o monitoramento de trabalhos em segundo plano normalmente não requer configuração adicional.
Monitor trabalhos personalizados em segundo plano
Você pode instrumentar trabalhos em segundo plano personalizados para que apareçam na páginaTransactions do APM como Non-web transactions. Para monitor Non-web transactions enquanto estiver usando um framework não suportado, você deve adicionar instrumentação personalizada.
Por exemplo, um trabalho em segundo plano executa periodicamente uma tarefa chamada SalesOrganization#find_new_leads
.
Adicione o módulo
ControllerInstrumentation
.Use a diretiva
add_transaction_tracer
below a definição do métodoAdicione
:category => :task
para informar ao agente que esse trace é um Non-web transaction.require 'newrelic_rpm'class SalesOrganizationinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationdef find_new_leads...endadd_transaction_tracer :find_new_leads, :category => :taskendVocê pode passar uma string para
:category
, mas os valores só aparecerão na página Transactions do APM se a string começar comOtherTransaction/
.
Monitor métodos de plano de fundo personalizados
Usando a API do agente Ruby, você pode designar métodos específicos para trace o Non-web transactions. Isso reúne rastreamento de trabalhos de execução lenta e associa erros capturados à transação.
Para instrumentalizar um método de classe, use a classe singleton
.
Por exemplo, um trabalho em segundo plano executa periodicamente uma tarefa chamada SalesOrganization#find_new_leads
.
Adicione o módulo
ControllerInstrumentation
below à definição do método.Use a diretiva
add_transaction_tracer
Adicione
:category => :task
para informar ao agente que esse trace é um Non-web transaction.require 'newrelic_rpm'class SalesOrganizationdef self.find_new_leads...endclass << selfinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationadd_transaction_tracer :find_new_leads, :category => :taskendendPara mais informações, consulte Ruby métrica personalizada.
Monitor processos de curta duração
Certifique-se de que o processo não esteja em execução antes de o agente se conectar aos servidores backend . Para fazer isso, faça com que o agente Ruby se conecte de forma síncrona ao New Relic, em vez do comportamento assíncrono padrão.
Primeiro, em seu Gemfile, adicione require: false
ao final da instalação da gem newrelic_rpm
:
gem 'newrelic_rpm', require: false
Em seguida, chame manual_start
e passe a opção :sync_startup => true
:
require 'new_relic/agent'NewRelic::Agent.manual_start(:sync_startup => true)
Note: A maioria das opções de configuração podem ser passadas para inicialização manual.
Usar require 'new_relic/agent'
exigirá o código do agente e garantirá que o agente não seja executado até que você o inicie manualmente.
Se o processo for mais curto que o ciclo de coleta do agente , será necessário encerrar manualmente o agente com ::NewRelic::Agent.shutdown
para garantir que todos os dados na fila sejam enviados.
Configure newrelic.yml para processos em segundo plano
A configuração do newrelic.yml depende do contexto do aplicativo em segundo plano.
Reportar para um nome de aplicativo alternativo
Você pode fazer com que trabalhos executados no contexto de um aplicativo da web existente do New Relic apareçam com um nome de aplicativo diferente na interface do APM.
O início before
newrelic_rpm
é exigido pelo seu código de trabalho.Defina a variável de ambiente
NEW_RELIC_APP_NAME
como o nome do aplicativo a ser usado para tarefas em segundo plano ao iniciar processos de trabalho em segundo plano. Isso substituirá a configuraçãoapp_name
em seunewrelic.yml
.bash$NEW_RELIC_APP_NAME="My Background Jobs"$./bin/my_background_worker.rb
Certifique-se de que o agente seja iniciado
O agente Ruby será iniciado automaticamente na maioria dos casos assim que você require 'newrelic_rpm'
, a menos que o agente detecte um nome executável na lista negra, um nome de tarefa rake ou uma constante. Isso evita que ele seja iniciado durante tarefas comuns de rake e sessões de console interativas.
Para obter mais informações, consulte a documentação sobre como controlar a inicialização do agente
Monitor script
As instruções de inicialização do agente se aplicam à execução de tarefas em segundo plano em um daemon. Se um script executar uma única tarefa em segundo plano e sair, encerre manualmente o agente com ::NewRelic::Agent.shutdown
quando o script for concluído. Isso garante que o coletor New Relic receba os dados. Por exemplo:
require 'newrelic_rpm'
class SalesOrganization include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation def find_new_leads ... end add_transaction_tracer :find_new_leads, :category => :taskend
SalesOrganization.new.find_new_leads::NewRelic::Agent.shutdown