Notre agent Ruby instrumente automatiquement plusieurs frameworks de tâches d'arrière-plan courants. Vous pouvez également le personnaliser pour trace toutes les tâches en arrière-plan. Les données des tâches en arrière-plan apparaissent dans la pageTransactions dans APM sous la forme Non-web transactions.
Frameworks pris en charge
Les frameworks de tâches d'arrière-plan suivants sont pris en charge par défaut dans les versions récentes de l'agent Ruby :
- Instrumentation Resque (agent Ruby 3.4.0)
- Instrumentation Sidekiq (agent Ruby 3.6.0)
- Delayed::Job instrumentation (agent Ruby 2.10)
Important
L'utilisateur JRuby peut voir des problèmes avec les métriques CPU.
Si vous utilisez ces frameworks, monitoring des tâches en arrière-plan ne nécessite généralement pas configuration supplémentaire.
tâches d'arrière-plan personnalisées du moniteur
Vous pouvez instrumenter des tâches d'arrière-plan personnalisées pour qu'elles apparaissent dans la page APMTransactions sous le nom Non-web transactions. Pour monitorer Non-web transactions tout en utilisant un framework non pris en charge, vous devez ajouter instrumentation personnalisée.
À titre d’exemple, une tâche en arrière-plan exécute périodiquement une tâche appelée SalesOrganization#find_new_leads
.
Ajoutez le module
ControllerInstrumentation
.Utilisez la directive
add_transaction_tracer
below la définition de la méthodeAjoutez
:category => :task
pour indiquer à l'agent que cette trace est un Non-web transaction.require 'newrelic_rpm'class SalesOrganizationinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationdef find_new_leads...endadd_transaction_tracer :find_new_leads, :category => :taskendVous pouvez passer une chaîne à
:category
, mais les valeurs n'apparaîtront sur la page APM Transactions que si la chaîne commence parOtherTransaction/
.
méthodes d'arrière-plan personnalisées du moniteur
En utilisant l'API d'agent Ruby , vous pouvez désigner des méthodes spécifiques pour trace le Non-web transactions. Cela rassemble les traces des tâches lentes et associe les erreurs capturées aux transactions.
Pour instrumenter une méthode de classe, utilisez la classe singleton
.
À titre d’exemple, une tâche en arrière-plan exécute périodiquement une tâche appelée SalesOrganization#find_new_leads
.
Ajoutez le module
ControllerInstrumentation
below à la définition de la méthode.Utilisez la directive
add_transaction_tracer
Ajoutez
:category => :task
pour indiquer à l'agent que cette trace est 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 => :taskendendPour plus d'informations, voir Ruby métriques personnalisées.
Monitorer les processus de courte durée
Assurez-vous que le processus n'est pas en cours d'exécution avant que l'agent se connecte aux serveurs backend . Pour ce faire, faites en sorte que l’agent Ruby se connecte de manière synchrone à New Relic, plutôt que le comportement asynchrone par défaut.
Tout d’abord, dans votre Gemfile, ajoutez require: false
à la fin de votre installation de gem newrelic_rpm
:
gem 'newrelic_rpm', require: false
Ensuite, appelez manual_start
et transmettez l'option :sync_startup => true
:
require 'new_relic/agent'NewRelic::Agent.manual_start(:sync_startup => true)
Note: La plupart des options de configuration peuvent être transmises au démarrage manuel.
L'utilisation de require 'new_relic/agent'
nécessitera le code de l'agent et garantira que l'agent ne s'exécutera pas tant que vous ne l'aurez pas démarré manuellement.
Si le processus est plus court que le cycle de collecte de l'agent, vous devez arrêter manuellement l'agent avec ::NewRelic::Agent.shutdown
pour garantir que toutes les données en file d'attente sont envoyées.
Configurer newrelic.yml pour les processus en arrière-plan
La configuration de votre newrelic.yml dépend du contexte de l'application en arrière-plan.
Signaler un nom d'application alternatif
Vous pouvez faire en sorte que les tâches exécutées dans le contexte d'une application Web New Relic existante apparaissent sous un nom d'application différent dans l'UI APM.
Le début before
newrelic_rpm
est requis par votre code de travailleur.Définissez la variable d’environnement
NEW_RELIC_APP_NAME
sur le nom de l’application à utiliser pour vos tâches en arrière-plan lors du démarrage de vos processus de travail en arrière-plan. Cela remplacera le paramètreapp_name
dans votrenewrelic.yml
.bash$NEW_RELIC_APP_NAME="My Background Jobs"$./bin/my_background_worker.rb
Assurez-vous que l'agent démarre
L'agent Ruby démarre automatiquement dans la plupart des cas dès que vous require 'newrelic_rpm'
, sauf si l'agent détecte un nom d'exécutable, un nom de tâche de rake ou une constante sur liste noire. Cela l'empêche de démarrer pendant les tâches de râteau courantes et les sessions de console interactives.
Pour plus d'informations, consultez la documentation sur le contrôle du démarrage de l'agent
Script de monitoring
Les instructions de démarrage de l'agent s'appliquent lors de l'exécution de tâches en arrière-plan dans un daemon. Si un script exécute une seule tâche en arrière-plan et se ferme, arrêtez manuellement l'agent avec ::NewRelic::Agent.shutdown
lorsque le script se termine. Cela garantit que le collecteur New Relic reçoit les données. Par exemple:
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