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

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

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

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

私たちのRubyエージェントは、いくつかの一般的なバックグラウンドジョブフレームワークを自動的にインストゥルメントしました。 バックグラウンド タスクをトレースするようにカスタマイズすることもできます。 バックグラウンド ジョブからのデータは、APM のTransactionsページNon-web transactionsとして表示されます。

対応フレームワーク

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

重要

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

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

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

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

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

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

  2. add_transaction_tracerディレクティブbelowメソッド定義を使用する

  3. :category => :taskを追加して、このトレースがNon-web transactionであることをエージェントに伝えます。

    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 Transactionsページに表示されます。

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

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

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

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

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

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

  3. :category => :taskを追加して、このトレースがNon-web transactionであることをエージェントに伝えます。

    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)

Note: ほとんどの設定オプションは手動起動に渡すことができます。

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

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

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

newrelic.ymlの構成は、バックグラウンド アプリケーションのコンテキストによって異なります。

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

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

  1. ワーカー コードでは、Begin before 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.