Nuestro agente Ruby instrumentó automáticamente varios marcos de trabajo en segundo plano comunes. También puedes personalizarlo para trazar cualquier tarea en segundo plano. Los datos de los trabajos en segundo plano aparecen en la páginaTransactions de APM como Non-web transactions.
Marco soportado
El siguiente marco de trabajo en segundo plano se admite de forma predeterminada en versiones recientes del agente Ruby:
- Resque instrumentación (Agente Ruby 3.4.0)
- Instrumentación Sidekiq (agente Ruby 3.6.0)
- Delayed::Job instrumentación (Ruby agent 2.10)
Importante
El usuario de JRuby puede ver problemas con la CPU métrica.
Si está utilizando estos marcos, los trabajos de monitoreo en segundo plano generalmente no requieren configuración adicional.
Monitor trabajos en segundo plano personalizados
Puede implementar trabajos en segundo plano personalizados para que aparezcan en la página APMTransactions como Non-web transactions. Para monitor Non-web transactions mientras usa un framework no compatible, debe agregar instrumentación personalizada.
Por ejemplo, un trabajo en segundo plano ejecuta periódicamente una tarea llamada SalesOrganization#find_new_leads
.
Agregue el módulo
ControllerInstrumentation
.Utilice la directiva
add_transaction_tracer
below la definición del métodoAgregue
:category => :task
para decirle al agente que esta traza es un Non-web transaction.require 'newrelic_rpm'class SalesOrganizationinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationdef find_new_leads...endadd_transaction_tracer :find_new_leads, :category => :taskendPuede pasar una cadena a
:category
, pero los valores solo aparecerán en la página APM Transactions si la cadena comienza conOtherTransaction/
.
Monitor métodos de fondo personalizados
Usando la API del agente Ruby, puedes designar métodos específicos para trazar el Non-web transactions. Esto recopila trazas para trabajos de ejecución lenta y asocia errores capturados a la transacción.
Para instrumentar un método de clase, use la clase singleton
.
Por ejemplo, un trabajo en segundo plano ejecuta periódicamente una tarea llamada SalesOrganization#find_new_leads
.
Agregue el módulo
ControllerInstrumentation
below la definición del método.Utilice la directiva
add_transaction_tracer
Agregue
:category => :task
para decirle al agente que esta traza es un 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 más información, consulte Ruby métrica personalizada.
Monitor procesos de corta duración
Asegúrese de que el proceso no se esté ejecutando antes de que el agente se conecte a los servidores backend. Para hacerlo, haga que el agente Ruby se conecte sincrónicamente a New Relic, en lugar del comportamiento asincrónico predeterminado.
Primero, en su Gemfile, agregue require: false
al final de su instalación de gema newrelic_rpm
:
gem 'newrelic_rpm', require: false
Luego, llame manual_start
y pase la opción :sync_startup => true
:
require 'new_relic/agent'NewRelic::Agent.manual_start(:sync_startup => true)
Note: La mayoría de las opciones de configuración se pueden pasar al inicio manual.
El uso require 'new_relic/agent'
requerirá el código del agente y garantizará que el agente no se ejecute hasta que lo inicie manualmente.
Si el proceso es más corto que el ciclo de recolección del agente, deberá cerrar manualmente el agente con ::NewRelic::Agent.shutdown
para garantizar que se envíen todos los datos en cola.
Configurar newrelic.yml para procesos en segundo plano
La configuración de su newrelic.yml depende del contexto de la aplicación en segundo plano.
Informar a un nombre de aplicación alternativo
Puede hacer que los trabajos que se ejecutan en el contexto de una aplicación web New Relic existente aparezcan con un nombre de aplicación diferente en la UI de APM.
El código de trabajador requiere comenzar before
newrelic_rpm
.Establezca la variable de entorno
NEW_RELIC_APP_NAME
en el nombre de la aplicación que se utilizará para sus trabajos en segundo plano al iniciar sus procesos de trabajo en segundo plano. Esto anulará la configuraciónapp_name
en sunewrelic.yml
.bash$NEW_RELIC_APP_NAME="My Background Jobs"$./bin/my_background_worker.rb
Asegúrese de que el agente comience
El agente Ruby se iniciará automáticamente en la mayoría de los casos tan pronto como usted require 'newrelic_rpm'
, a menos que el agente detecte un nombre de ejecutable, un nombre de tarea de rake o una constante en la lista negra. Esto evita que se inicie durante tareas comunes de rake y sesiones de consola interactiva.
Para obtener más información, consulte la documentación sobre cómo controlar el inicio del agente.
Monitor de secuencia de comandos
Las instrucciones de inicio del agente se aplican cuando se ejecutan trabajos en segundo plano en un daemon. Si un script ejecuta una única tarea en segundo plano y sale, cierre manualmente el agente con ::NewRelic::Agent.shutdown
cuando finalice el script. Esto garantiza que el recolector de New Relic reciba los datos. Por ejemplo:
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