The Ruby agent automatically instruments Rack middlewares. If you are unfamiliar with the basics of Rack middlewares, review the resources linked by the Rails on Rack guide. Additionally, the Ruby agent provides some features via Rack middlewares:
- Distributed traces
- Auto-instrumentation for
New Relic automatically installs these middlewares for Rails and Sinatra.
Rack instrumentation
The two most common ways to configure Rack middlewares are the Rack::Builder
API (most often from config.ru) and Rails' middleware stack configuration:
Viewing middleware data
You can view middleware data in APM.
Disabling Rack instrumentation
If you do not want to instrument Rack middlewares, you may disable Rack middleware instrumentation with the disable_middleware_instrumentation
setting. You can also ignore specific transactions.
Installing Ruby agent middlewares manually
The Ruby agent's implementation of New Relic's cross application tracing feature uses Rack middleware instrumentation to read and write HTTP headers that are necessary to pass information between monitored applications. If you are using Sinatra, have disabled middleware instrumentation as described above, and want to use cross application tracing, you must manually add the NewRelic::Rack::AgentHooks
middleware to your middleware stack.
Importante
As of version 8.0.0, cross application tracing is deprecated in favor of distributed tracing. When enabled, distributed tracing is automatically configured for all rack-based apps without the need for an additional middleware.
If you would like to continue using cross application tracing, you will need to update your configuration.
Manual Rack instrumentation
Earlier versions of the Ruby agent supported manually instrumenting Rack middlewares via the NewRelic::Agent::Instrumentation::Rack
module. This instrumentation has been removed and isn't guaranteed to work in Ruby agent version 4.0.0 or higher. This form of manual instrumentation is unncessary with automatic middleware instrumentation. We recommend that you remove references to this module from your code after upgrading to 3.9.0 or higher.