L'agent Ruby dispose d'une instrumentation intégrée pour la bibliothèque Delayed::Job
. Aucune instrumentation supplémentaire n'est requise.
Affichage des tâches en arrière-plan
Tant que le gem ou le plugin de l'agent Ruby New Relic est chargé avant le démarrage du travailleur Delayed::Job
, toutes les tâches seront monitorées avec le même niveau de détail que les actions du contrôleur. Pour visualiser les actions elles-mêmes :
- Allez à one.newrelic.com > All capabilities > APM & services > (select an app) > Monitor > Transactions.
- Depuis la page APM Transactions , sélectionnez Other transactions.
Ajout d'attribut personnalisé
Si vous souhaitez ajouter des attributs personnalisés à vos transactions Delayed::Job
, vous pouvez écrire un plugin Delayed::Job
via un hook de cycle de vie et ajouter ces attributs à la transaction pour chaque tâche exécutée.
Créez un plugin avec la structure suivante :
module NewRelicInstrumenterclass DelayedJobPlugin < Delayed::Plugincallbacks do |lifecycle|lifecycle.around(:invoke_job) do |job, *args, &block|# Forward the call to the next callback in the callback chain::NewRelic::Agent.add_custom_attributes({# Any custom attributes go here -- from here you can access info# about the job like run_at, created_at, etcmy_custom_attribute: "my_custom_attribute_value"})block.call(job, *args)endendendendAjoutez le plugin à
Delayed::Job
dans l'initialiseur dans le fichierconfig/initializers/delayed_job.rb
:require "new_relic_instrumenter"Delayed::Worker.plugins << NewRelicInstrumenter::DelayedJobPlugin
Dépannage
L'agent Ruby doit pouvoir identifier qu'il s'exécute sous Delayed::Job
afin de configurer correctement l'instrumentation. Pour ce faire, il examine le nom du script (la variable $0
dans Ruby) pour voir s'il se termine par delayed_job
.
Si vous avez renommé le script que vous utilisez pour démarrer vos travailleurs delayed_job
en quelque chose d'autre, ou si vous avez un script personnalisé avec un nom différent, vous devrez indiquer explicitement à l'agent que vous utilisez Delayed::Job
en définissant la variable d'environnement NEW_RELIC_DISPATCHER
sur delayed_job
lors du démarrage de vos travailleurs Delayed::Job
. Par exemple:
$NEW_RELIC_DISPATCHER=delayed_job bundle exec ./script/my_custom_script
S'il semble que les tâches ne sont pas monitorées, examinez le fichier newrelic_agent.log généré au démarrage du travailleur. Il doit indiquer si l'agent détecte Delayed
et communique avec le serveur. Si vous ne trouvez pas de log ou si vous ne parvenez toujours pas à déterminer pourquoi les tâches n'apparaissent pas, obtenez de l'aide sur support.newrelic.com.