• EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

問題を作成する

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 設定がオーバーライドされます。

    bash
    $
    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 © 2024 New Relic株式会社。

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