By default, the New Relic Ruby agent does not instrument ActionController::Metal
controllers. This is in keeping with the philosophy that the Metal controller provides only the bare minimum interface needed to deliver a valid Rack app. It's generally up to you to embellish the Metal Controllers as needed. This document describes how to have these controller actions appear on the APM Transactions page and overviews alongside those inheriting from ApplicationController
for Rails 3 apps or higher.
Rails 4.0 or higher
Starting with Rails 4.0, New Relic's controller instrumentation uses ActiveSupport::Notifications
. Including the ActionController::Instrumentation
module ensures that controller events are fired from your Metal controller. This enables New Relic to instrument those actions.
class PlatinumController < ActionController::Metal include ActionController::Rendering
def show render :text => "Here is some text" end
# Ensure ActiveSupport::Notifications events are fired include ActionController::Instrumentation
# Uncomment the following line to include New Relic helper methods, such as newrelic_ignore or add_method_tracer # include NewRelic::Agent::Instrumentation::ControllerInstrumentationend
Rails 3.0 through 3.2
Method 1
The following method auto-instruments all Metal controller actions just as with the Base Controller.
Include NewRelic::Agent::Instrumentation::ControllerInstrumentation
and NewRelic::Agent::Instrumentation::Rails3::ActionController
at the bottom of your Metal Controller classes:
class SteelController < ActionController::Metal include ActionController::Rendering
def show render :text => "Here is some text" end
include NewRelic::Agent::Instrumentation::ControllerInstrumentation include NewRelic::Agent::Instrumentation::Rails3::ActionControllerend
Method 2
The following example enables you to opt in to tracing only specific action methods of the Metal controller.
Include NewRelic::Agent::Instrumentation::ControllerInstrumentation
and call add_transaction_tracer
for each method instrumentation:
class SteelController < ActionController::Metal include ActionController::Rendering include NewRelic::Agent::Instrumentation::ControllerInstrumentation
def show render :text => "Here is some text" end add_transaction_tracer :showend
Method 3
The final example is a more general way of adding tracing of the method that will work in any class, not just Metal Controller class.
Include NewRelic::Agent::MethodTracer
and call add_method_tracer
for each method instrumentation:
class SteelController < ActionController::Metal include ActionController::Rendering include NewRelic::Agent::MethodTracer
def show render :text => "Here is some text" end add_method_tracer :showend
Rails 2.3
If you use the Rails::Rack::Metal
class from Rails 2, you can instrument calls to your Metals as follows:
require 'newrelic_rpm'
class MyMetal < Rails::Rack::Metal def self.call(env) # ... your metal code ... end
class << self include NewRelic::Agent::Instrumentation::ControllerInstrumentation add_transaction_tracer :call endend