問題
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:precompileRubyエージェントのバージョン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_tasksRails 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を呼び出すことができます。