New Relic for Ruby を使用すると、Rails、Roda、または Sinatra アプリケーション内の特定のリクエストに対してインストゥルメンテーションを選択的に無効にすることができます。
すべてのインストルメントをブロック
Rails コントローラ、Roda アプリケーション、または Sinatra アプリケーション内から引数なしでnewrelic_ignore
を呼び出し、そのコントローラまたはアプリケーションによって処理されるすべてのリクエストのインストルメンテーションを防ぎます。
newrelic_ignore
newrelic_ignore
を使用すると、エージェントはターゲット トランザクションのパフォーマンス データ (メトリクス、トランザクション追跡、イベント、追跡エラーなど) を記録できなくなり、トランザクションが全体的な Apdex スコアに寄与することも防止されます。
Railsで特定のアクションを無視する
Rails コントローラで特定のアクションのみを無視する場合は、 newrelic_ignore
で:only
または:except
オプションを使用できます。
たとえば、コントローラーのindex
およびshow
アクションのみを無視するには、次を使用します。
newrelic_ignore :only => [:index, :show]
コントローラーexcept index
のすべてのアクションを無視するには:
newrelic_ignore :except => [:index]
ロダで特定のルートを無視する
Roda アプリケーションのroute
ブロックの外側から Roda スタイルのルートをnewrelic_ignore
に渡すことにより、Roda アプリケーション内の特定のルートを無視します。詳細については、 「Roda: ルートの無視」を参照してください。
Sinatraで特定のルートを無視する
Sinatra アプリケーション内の特定のルートのみを無視する場合は、Sinatra アプリケーション内から Sinatra スタイルのルート定義をnewrelic_ignore
に渡すことができます。詳細については、シナトラ: ルートを無視するを参照してください。
Apdexのコントリビューションを無視する
コントローラ内のすべてのアクションが Apdex スコアに影響しないようにしたいが、他のパフォーマンス データが必要な場合は、 newrelic_ignore_apdex
を使用します。
newrelic_ignore_apdex
Rails アプリケーションでは、 newrelic_ignore_apdex
newrelic_ignore
と同じ:only
および:except
オプションをサポートします。Roda または Sinatra アプリケーションでは、特定のトランザクションを対象とする同じ Roda スタイルのルートまたはSinatra スタイルのルートを受け入れます。
ブラウザの不正操作をブロックする
newrelic_ignore_enduser
を使用すると、エージェントがデータをキャプチャするために使用される JavaScript を自動的に挿入するのを防ぐことができます。 サーバー側のインストゥルメンテーションは影響を受けません。
コントローラ内のすべてのアクションに対してブラウザエージェントインジェクションを防ぐには、コントローラクラスに次のような呼び出しを追加します。
newrelic_ignore_enduser
Rails アプリケーションでは、 newrelic_ignore_enduser
newrelic_ignore
と同じ:only
および:except
オプションをサポートします。Roda または Sinatra アプリケーションでは、特定のトランザクションを対象とする同じ Roda スタイルのルートまたは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 コントローラー クラス内、Roda アプリケーションのroute
ブロック外 ( Roda
のサブクラス)、または Sinatra アプリケーション内 ( Sinatra::Base
のサブクラス) でのみ機能します。他のアプリケーションは、無視したい各リクエスト内から呼び出しのNewRelic::Agent.ignore_*
ファミリを使用する必要があります。これは、どのようなコンテキストでも機能します。
Rails コントローラー、Roda アプリケーション、または Sinatra アプリケーション内からnewrelic_ignore
を使用しようとしたときにNoMethodError
が発生した場合は、クラス定義内でnewrelic_ignore
を呼び出す前に、 newrelic_rpm
が必須であることを確認してください。