• ログイン今すぐ開始

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

Rubyのバックグラウンドプロセスの監視

当社のRubyエージェントは、いくつかの一般的なバックグラウンド・ジョブ・フレームワークを自動的に計測します。また、任意のバックグラウンドタスクをトレースするようにカスタマイズすることもできます。バックグラウンドジョブからのデータは、 トランザクション ページ APMでは、 非ウェブトランザクション として表示されます。

対応フレームワーク

最近のRubyエージェントでは、以下のバックグラウンド・ジョブ・フレームワークがデフォルトでサポートされています。

重要

JRuby ユーザーは、CPU メトリクスに問題があるかもしれません。

これらのフレームワークを使用している場合、バックグラウンドジョブの監視には通常、追加の設定は必要ありません。

カスタムバックグラウンドジョブの監視

カスタムバックグラウンドジョブをインスツルメンテーションして、APM Transactions page as Non-web transactions に表示することができます。 Non-web transactions を、サポートされていないフレームワークを使用しながら監視するには、カスタムインスツルメンテーションを追加する必要があります。

例として、バックグラウンドジョブはSalesOrganization#find_new_leadsというタスクを定期的に実行します。

  1. ControllerInstrumentationモジュールを追加します。

  2. メソッド定義のにあるadd_transaction_tracerディレクティブを使用します

  3. :category => :taskを追加して、このトレースが非Webトランザクションであることをエージェントに通知します。

    require 'newrelic_rpm'
    
    class SalesOrganization
      include
    ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
      def find_new_leads
        ...
      end
      add_transaction_tracer :find_new_leads, :category => :task
    end

    文字列を:categoryに渡すことができますが、文字列がOtherTransaction/で始まる場合にのみ、値はAPMトランザクションページに表示されます。

カスタムバックグラウンドメソッドの監視

Ruby エージェント API を使用すると、特定のメソッドを指定して、 非ウェブ・トランザクション をトレースすることができます。これにより、実行速度の遅いジョブのトレースを収集し、キャプチャしたエラーをトランザクションに関連付けることができます。

クラスメソッドをインストルメント化するには、クラスsingletonを使用します。

例として、バックグラウンドジョブはSalesOrganization#find_new_leadsというタスクを定期的に実行します。

  1. メソッド定義のControllerInstrumentationモジュールを追加します。

  2. add_transaction_tracerディレクティブを使用する

  3. :category => :taskを追加して、このトレースが非Webトランザクションであることをエージェントに通知します。

    require 'newrelic_rpm'
    
    class SalesOrganization
      def self.find_new_leads
        ...
      end
      class << self
          include
    ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
        add_transaction_tracer :find_new_leads, :category => :task
      end
    end

    詳しくは、 Ruby custom metrics をご覧ください。

短期間のプロセスを監視する

エージェントがバックエンドサーバーに接続する前に、プロセスが実行されていないことを確認します。そのためには、Ruby エージェントが New Relic に接続する際に、デフォルトの非同期の動作ではなく、同期的に接続するようにします。

まず、Gemfileで、 newrelic_rpm gemインストールの最後にrequire: falseを追加します。

gem 'newrelic_rpm', require: false

次に、 manual_startを呼び出し、 :sync_startup => trueオプションを渡します。

require 'new_relic/agent'
NewRelic::Agent.manual_start(:sync_startup => true)

注:ほとんどの構成オプションは、手動開始に渡すことができます。

require 'new_relic/agent'を使用するにはエージェントのコードが必要であり、手動で起動するまでエージェントが実行されないようにします。

プロセスがエージェントのハーベストサイクルよりも短い場合は、キューに入れられたすべてのデータが確実に送信されるように、 ::NewRelic::Agent.shutdownを使用してエージェントを手動でシャットダウンする必要があります。

バックグラウンドプロセスのためのnewrelic.ymlの設定

newrelic.yml の設定は、バックグラウンドアプリケーションのコンテキストに依存します。

別のアプリケーション名で報告する

既存の New Relic Web アプリケーションのコンテキストで実行されるジョブを、APM UI において 異なるアプリケーション名 で表示させることができます。

  1. newrelic_rpmがワーカーコードで要求される前に開始します。

  2. バックグラウンドワーカープロセスを開始するときにバックグラウンドジョブに使用するアプリケーション名にNEW_RELIC_APP_NAME環境変数を設定します。これにより、 newrelic.ymlapp_name設定が上書きされます。

    $ NEW_RELIC_APP_NAME="My Background Jobs"
    ./bin/my_background_worker.rb

エージェントの起動を確認する

Rubyエージェントは、ブラックリストに登録された実行可能ファイル名、rakeタスク名、または定数を検出しない限り、ほとんどの場合、 require 'newrelic_rpm'になるとすぐに自動的に起動します。これにより、一般的なレーキタスクやインタラクティブなコンソールセッション中に起動するのを防ぎます。

詳しくは、 controlling agent startupに関するドキュメントをご覧ください。

モニタースクリプト

エージェントの起動手順は、デーモンでバックグラウンドジョブを実行するときに適用されます。スクリプトが単一のバックグラウンドタスクを実行して終了する場合は、スクリプトの終了時に::NewRelic::Agent.shutdownを使用してエージェントを手動でシャットダウンします。これにより、NewRelicコレクターがデータを確実に受信します。例えば:

require 'newrelic_rpm'

class SalesOrganization
  include
::NewRelic::Agent::Instrumentation::ControllerInstrumentation
  def find_new_leads
    ...
  end
  add_transaction_tracer :find_new_leads, :category => :task
end

SalesOrganization.new.find_new_leads
::NewRelic::Agent.shutdown
Copyright © 2022 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.