Ruby エージェントには、 Delayed::Job
ライブラリ用のインストルメンテーションが組み込まれています。追加の機器は必要ありません。
バックグラウンドタスクの表示
Delayed::Job
ワーカーが開始する前に New Relic Ruby エージェントの gem またはプラグインがロードされている限り、すべてのタスクはコントローラー アクションと同じ詳細レベルで監視されます。アクション自体を表示するには:
one.newrelic.com > All capabilities > APM & services > (select an app) > Monitor > Transactions
に移動します。
ページから、
Other transactions
を選択します。
カスタム属性の追加
Delayed::Job
トランザクションにカスタム属性を追加する場合は、ライフサイクル フックを介してDelayed::Job
プラグインを作成し、実行されたジョブごとにそれらの属性をトランザクションに追加できます。
以下のような構造のプラグインを作成します。
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)endendendendconfig/initializers/delayed_job.rb
ファイルの初期化子でDelayed::Job
にプラグインを追加します。require "new_relic_instrumenter"Delayed::Worker.plugins << NewRelicInstrumenter::DelayedJobPlugin
トラブルシューティング
Ruby エージェントは、インストルメンテーションを正しくセットアップするために、 Delayed::Job
で実行されていることを識別できることに依存しています。これを行うために、スクリプト名 (Ruby では$0
変数) を調べて、それがdelayed_job
で終わっているかどうかを確認します。
delayed_job
ワーカーの起動に使用するスクリプトの名前を別の名前に変更した場合、または別の名前のカスタム スクリプトがある場合は、 Delayed::Job
を使用していることをエージェントに明示的に伝える必要があります。 NEW_RELIC_DISPATCHER
環境変数をDelayed::Job
ワーカーの開始時にdelayed_job
に設定します。例えば:
$NEW_RELIC_DISPATCHER=delayed_job bundle exec ./script/my_custom_script
ジョブが監視されていないように見える場合は、ワーカーの起動時に生成されたnewrelic_agent.logファイルを確認してください。 エージェントがDelayed
を検出し、サーバーと通信するかどうかを示す必要があります。 ログが見つからない場合、またはジョブが表示されない理由をまだ特定できない場合は、 support.newrelic.comでサポートを受けてください。