New Relic for Rubyでは、RailsやSinatraアプリケーション内の特定のリクエストに対するインスツルメンテーションを選択的に無効にすることができます。
重要
この手順は、Railsのバージョン7以降ではテストされていません。
すべてのインストルメントをブロック
newrelic_ignore
をRailsコントローラやSinatraアプリケーション内から引数なしで呼び出すと、そのコントローラやアプリケーションが処理するすべてのリクエストの計測を防ぐことができます。
newrelic_ignore
newrelic_ignore
を使用すると、エージェントは対象となるトランザクションのパフォーマンスデータ(メトリクス、トランザクションのトレース、イベント、トレースされたエラーなど)を記録することができず、また、そのトランザクションが Apdex 全体のスコアに貢献することもできなくなります。
Railsで特定のアクションを無視する
Railsのコントローラで特定のアクションだけを無視したい場合は、 :only
または :except
オプションを newrelic_ignore
で使用します。
例えば、コントローラ上の index
と show
のアクションだけを無視するには、次のようにします。
newrelic_ignore :only => [:index, :show]
コントローラ上のすべてのアクションを無視するには ****index
を除く。
newrelic_ignore :except => [:index]
Sinatraで特定のルートを無視する
Sinatra アプリケーション内の特定のルートのみを無視したい場合は、Sinatra スタイルのルート定義を、Sinatra アプリケーション内から newrelic_ignore
に渡すことができます。詳しくは、 Sinatra: Ignoring routes をご覧ください。
Apdexのコントリビューションを無視する
コントローラ内のすべてのアクションがApdexスコアに寄与しないようにしたいが、他のパフォーマンスデータは欲しいという場合は、 newrelic_ignore_apdex
を使用してください。
newrelic_ignore_apdex
Railsアプリケーションでは、 newrelic_ignore_apdex
は、 :only
and :except
options as newrelic_ignore
をサポートしています。Sinatraアプリケーションでは、特定のトランザクションを対象とするために、 同じSinatraスタイルのルート を受け入れます。
ブラウザの不正操作をブロックする
newrelic_ignore_enduser
を使用すると、 ブラウザモニタリング のデータをキャプチャするために使用される JavaScript をエージェントが自動的に挿入することを防ぎます。サーバーサイドのインストルメントは影響を受けません。
コントローラ内のすべてのアクションに対してブラウザエージェントインジェクションを防ぐには、コントローラクラスに次のような呼び出しを追加します。
newrelic_ignore_enduser
Railsアプリケーションでは、 newrelic_ignore_enduser
は、 :only
and :except
options as newrelic_ignore
をサポートしています。Sinatraアプリケーションでは、特定のトランザクションを対象とするために、 同じSinatraスタイルのルート を受け入れます。
動的にトランザクションを無視する
場合によっては、特定のトランザクションを無視するかどうかの判断を、リクエスト中のランタイムにしかわからない基準に基づいて行いたいこともあるでしょう。このような場合には、上記のような宣言型のメカニズムは適していません。Rubyエージェントのバージョン3.9.2からは、代わりに以下のAPIコール群をトランザクション内の任意の位置から使用することができます。
NewRelic::Agent.ignore_transactionNewRelic::Agent.ignore_apdexNewRelic::Agent.ignore_enduser
これらのメソッドは、 newrelic_ignore
、 newrelic_ignore_apdex
、 newrelic_ignore_enduser
の呼び出しと同様の結果になりますが、クラス定義中ではなく、リクエスト中に呼び出すことができます。
設定によりURLによるトランザクションを無視する
rules.ignore_url_regexes
の構成設定を使用して、URLによるトランザクションを無視することができます。
rules: ignore_url_regexes: ["secret", "^/admin"]
この設定は、設定されたパターンに一致する トランザクションイベント のレポートを防ぐだけです。 newrelic_ignore*
ファミリーのメソッドのいずれかを使用して、トレースデータなどのすべてのデータをトランザクションから報告しないようにすることができます。
正規表現は、デフォルトではいかなるタイプのアンカリングも含まないことに注意してください。secret/の正規表現は、'newrelic.com/secret/login'にマッチし、'newrelic.com/users/secretpanda'にもマッチします。anchored admin regexは、'newrelic.com/admin/praetorians'にマッチしますが、'newrelic.com/users/totally-real-admin'にはマッチしません。
必要に応じて、カンマで区切られた文字列で正規表現のリストを提供することもでき、環境変数で無視する正規表現を設定することができます。
NEW_RELIC_RULES_IGNORE_URL_REGEXES="secret,^/admin"
いつものように、環境変数の設定が newrelic.yml の設定よりも優先されます。
トラブルシューティング
newrelic_ignore*
メソッドのファミリーは、RailsのコントローラクラスやSinatraアプリケーション( Sinatra::Base
のサブクラス)の中でのみ動作します。その他のアプリケーションでは、 NewRelic::Agent.ignore_*
無視したい各リクエスト内での呼び出しファミリーを使用してください。
newrelic_ignore
をRailsコントローラやSinatraアプリケーション内で使おうとして NoMethodError
が発生した場合は、クラス定義内で newrelic_ignore
を呼ぼうとする前に、 newrelic_rpm
が要求されていることを確認してください。