問題
Ruby エージェントが起動していないか、New Relic にデータを報告していません。
解決
この問題を解決するために
Rubyエージェントのバージョン を確認し、必要に応じてアップデートしてください。
アプリケーション環境でnewrelic_rpm
Ruby gem が必要な場合、自動的にモニタリングを開始して New Relic へのメトリクスの送信を開始するか、無効のままにするかを決定しようとします。
プロダクションとステージングです。これらの環境では、エージェントが自動的に監視するように設定されているのが一般的です。
テストと開発。このような環境では、通常、エージェントは無効のままです。
このロジックを制御するには、
newrelic.yml
の各環境セクションでmonitor_mode
構成キーをtrue
またはfalse
に設定します。
エージェントの自動開始ロジックをオーバーライドする最も簡単なメカニズムは、 NEW_RELIC_AGENT_ENABLED=true
環境変数を設定することです。例えば:
$NEW_RELIC_AGENT_ENABLED=true rake assets:precompile
Rubyエージェントのバージョン3.6.1以降を使用している場合、エージェントの起動が拒否される原因がいくつかあります。
エージェントは対話型セッション中であることを検出します。たとえば、
rails console
セッションやirb
セッションなどです。エージェントは、それが Rails の組み込み rake タスクの 1 つにあることを検出します。たとえば、
assets:precompile
やdb:migrate
などです。Ruby エージェントの
newrelic.yml
ファイルで構成変数を使用して、定数、スクリプト名、および Rake タスクの自動開始動作をカスタマイズできます。Variable
Description
定数
- エージェントの起動を阻止するためのRuby定数です。コンマで区切られたリストを指定します。
- デフォルトは
"Rails::Console"
です。 ""
に設定すると、Rails::Console
環境内にあるときにエージェントを開始するように指示されます。
Rakeのタスク
- エージェントに監視させたくないタスクを Rake します。たとえば、
assets:precompile
。カンマ区切りのリストを受け入れます。 resque:work
のようなタスクは通常監視されるため、すべての rake タスクで Ruby エージェントを無効にするわけではありません。
実行ファイル
- エージェントの自動起動を防ぐスクリプト名のリスト (
irb
など)。カンマ区切りのリストを受け入れます。 - エージェントが rake タスクで開始されないようにするには、これを
"rake"
に設定します。rake およびカスタム スクリプトでエージェントが開始されないようにするには、"rake,my_ruby_script.rb"
に設定します。
問題
Ruby エージェントは、起動したくないコンテキストで起動します。
解決
Ruby エージェントは、ほとんどの顧客がエージェントを自動的に起動することを望むコンテキストについていくつかの仮定を行います。
この動作をカスタマイズするには、次の 3 つの設定オプションを使用できます。
autostart.denylisted_constants
このリストの定数のほとんどは、監視によるメリットがほとんどない操作を実行する Rails コマンドです。リストには、
rails db:*
やrails solid_queue:start
などのコマンドや、Rake タスクに関連するその他の Rails コマンドを実行するRails::Command::RakeCommand
は含まれていません。autostart.denylisted_executables
この設定は、rspec
やirb
などの実行可能ファイルを制御します。autostart.denylisted_rake_tasks
Rails 5.1 より前では、db:migrate
などの多くのコマンドでthor
の代わりにrake
が使用されていました。 この設定のデフォルト値には、当時の多くのコマンドがリストされています。 このリストに独自のrake
コマンドを追加することもできます。
NewRelic::Agent.manual_start
API を使用すると、特定のコンテキストでエージェントを起動できます。 構成ファイルで:agent_enabled
をfalse
に設定するか、環境変数NEW_RELIC_AGENT_ENABLED=false
を設定すると、この API を使用してエージェントを手動で起動できます。
NewRelic::Agent.manual_start(agent_enabled: true)
プロセスが終了する前にエージェントを停止したい場合は、 NewRelic::Agent.shutdown
を呼び出すことができます。