特定のトランザクションを計測対象外とする方法

New Relic では Rails と Sinatra に限り、特定のリクエストを計測対象外にできます。

すべての計測をブロックする

Rails のコントローラーおよび Sinatra アプリケーションから、引数なしで、newrelic_ignoreを呼ぶと、そのコントローラー および アプリケーションが受信する全リクエストを計測対象外とします。

newrelic_ignore

Using newrelic_ignore を使うと、対象のトランザクションのパフォーマンスデータ (メトリクス、トランザクショントレース、Insights イベント、エラートレースなど) を記録しません。また、そのトランザクションは Apdex スコアの計算対象外となります。

Railsにおいて、特定のアクションを対象外とする

Rails コントローラーの特定のアクションのみを対象外としたい場合は、newrelic_ignoreに、:onlyまたは、:exceptオプションを設定してください。

例えば、indexshowアクションだけを無視したい場合は、次のようになんります。

newrelic_ignore :only => [:index, :show]

index除く全アクションを対象外としたい場合は、次のようになります。

newrelic_ignore :except => [:index]

特定のルーティングを対象外とする方法

Sinatra アプリケーションの特定の routes だけを計測対象外としたい場合は、Sinatra スタイルのルート定義を newrelic_ignore に渡すことができます。詳しくは、Sinatra: ルートを無視する方法 [英語]をご覧ください。

Apdex スコアの計算対象外とする方法

Apdex スコアの計算対象から、あるコントローラーの全アクションを除きたいが、他のパフォーマンスデータは計測したい場合、newrelic_ignore_apdex を使います。

newrelic_ignore_apdex

Rails アプリでは、newrelic_ignore と同様に、newrelic_ignore_apdex は、 :only:except オプション をサポートしています。Sinatra アプリでは、対象のトランザクションに Sinatra スタイルのルート を渡すことができます。

ページ読み込みタイミングをブロックする

newrelic_ignore_enduserを使うと、エージェントがページ読み込みタイミングのデータを収集 (capture) するための Javascript を HTML へ自動的に埋め込む処理をブロックします。これは、サーバーサイドの計測には影響しません。

コントローラーの全アクションのページ読み込みタイミング (リアルユーザモニタリングや RUM とも呼ばれる)を対象外とするには、コントローラのクラスに以下のような呼び出しを追加します。

newrelic_ignore_enduser

Rails アプリでは、newrelic_ignore と同様に、newrelic_ignore_apdex は、 :only:except オプション をサポートしています。Sinatra アプリでは、対象のトランザクションに Sinatra スタイルのルート を渡すことができます。

動的にトランザクションを無視する

いくつかのケースでは、リクエスト時に、実行時にのみ知られている基準に特定のトランザクションを無視する決定をベースにすることがあります。このような状況では、宣言的な仕組みはいい方法とは言えません。Ruby エージェントのバージョン3.9.2 以降からは、トランザクション内の任意の点で、以下の API 呼び出しを使用することができます。

NewRelic::Agent.ignore_transaction
NewRelic::Agent.ignore_apdex
NewRelic::Agent.ignore_enduser

これらのメソッドは、newrelic_ignorenewrelic_ignore_apdexnewrelic_ignore_enduser の呼び出しと同様の結果となります。ただし、これがよばれるタイミングは、クラス定義時ではなく、リクエスト処理時となります。

設定で指定した URL に関連するトランザクションを無視する

rules.ignore_url_regexes 設定に一致する URL に関連するトランザクションは無視されます。

rules:
   ignore_url_regexes: ["secret", "^/admin"]

デフォルトでは、この正規表現には、どの種類のアンカーも含まないことに注意してください。/secret/ 正規表現 は ‘newrelic.com/secret/login’ にマッチします。また、’newrelic.com/users/secretpanda’ にもマッチします。アンカー付きの admin 正規表現は、 ‘newrelic.com/admin/praetorians’ にマッチしますが、’newrelic.com/users/totally-real-admin’ にはマッチしません。

カンマ区切りの文字列で正規表現のリストを作成したい場合、以下のように正規表現を無視する環境変数を設定できます。

NEW_RELIC_RULES_IGNORE_URL_REGEXES="secret,^/admin"

通常どおり、newrelic.yml の設定は環境変数によって上書きされます。

トラブルシューティング

newrelic_ignore* 関連のメソッドは、Rails のコントローラーのクラス、Sinatra のアプリケーション(とサブクラスの code>Sinatra::Base)でのみ動作します。他のアプリケーションでは、無視したいリクエスト内で、NewRelic::Agent.ignore_* 関連の呼び出しを行います。これば、どんなコンテキストでも動作します。

Rails コントローラーおよび Sinatra アプリケーションにおいて、newrelic_ignore の呼び出し時に NoMethodError が発生した場合は、クラス定義中の newrelic_ignore を呼び出す処理の前に、newrelic_rpm が定義済み (required) であることを確認してください。

関連情報

関連情報として、Apdex: ユーザー満足度の測定 (Apdexの計算方法)を参照ください。