v4.1.0
Developer Mode removed
The Ruby Agent's Developer Mode, which provided a very limited view of your application performance data, has been removed. For more information, check out our community forum.
Support NEW_RELIC_ENV for Rails apps
Previously, users could set the agent environment with NEW_RELIC_ENV only for non-Rails apps. For Rails app, the agent environment would use whatever the Rails environment was set to. Now, NEW_RELIC_ENV can also be used for Rails apps, so that it is possible to have an agent environment that is different from the Rails environment. Thanks Andrea Campolonghi for the contribution, as well as Steve Schwartz for also looking into this issue!
Normalization of external hostnames
Hostnames from URIs used in external HTTP requests are now always downcased to prevent duplicate metrics when only case is different.
v4.0.0
Require Ruby 2.0.0+
The agent no longer supports Ruby versions prior to 2.0, JRuby 1.7 and earlier, and all versions of Rubinius. Customers using affected Rubies can continue to run 3.x agent versions, but new features or bugfixes will not be published for 3.x agents. For more information, check out our community forum.
OkJson vendored library removed
Ruby 1.8 did not include the JSON gem by default, so the agent included a vendored version of OkJson that it would fall back on using in cases where the JSON gem was not available. This has been removed.
YAJL workaround removed
yajl-ruby versions prior to 1.2 had the potential to cause a segmentation fault when working large, deeply-nested objects like thread profiles. If you are using yajl-ruby with the
JSON
monkey patches enabled by requiringyajl/json_gem
, you should upgrade to at least version 1.2.Deprecated APIs removed
Agent.abort_transaction!
Agent.add_custom_parameters
Agent.add_request_parameters
Agent.browser_timing_footer
Agent.get_stats
Agent.get_stats_no_scope
Agent.record_transaction
Agent.reset_stats
Agent.set_user_attributes
Agent::Instrumentation::Rack
ActionController#newrelic_notice_error
ActiveRecordHelper.rollup_metrics_for
(may be incompatible with newrelic_moped)Instrumentation::MetricFrame.recording_web_transaction?
Instrumentation::MetricFrame.abort_transaction!
MethodTracer.get_stats_scoped
MethodTracer.get_stats_unscoped
MethodTracer.trace_method_execution
MethodTracer.trace_method_execution_no_scope
MethodTracer.trace_method_execution_with_scope
MetricSpec#sub
MetricStats#get_stats
MetricStats#get_stats_no_scope
NoticedError#exception_class
Rack::ErrorCollector
StatsEngine::Samplers.add_sampler
StatsEngine::Samplers.add_harvest_sampler
The above methods have had deprecation notices on them for some time and have now been removed. Assistance migrating usage of these APIs is available at https://docs.newrelic.com/docs/agents/ruby-agent/troubleshooting/update-... .
The agent no longer deletes deprecated keys passed to
add_method_tracer
. Passing in deprecated keys can cause an exception. Ensure that you are not passing any of the following keys::force, :scoped_metric_only, :deduct_call_time_from_parent
toadd_method_tracer
.The agent no longer deletes deprecated keys passed in as options to
NewRelic::Agent.notice_error
. If you are passing any of these deprecated keys::request_params, :request, :referer
to thenotice_error
API, please delete them otherwise they will be collected as custom attributes.Error handling changes
The agent now only checks for
original_exception
in environments with Rails versions prior to 5. Checking forException#cause
has been removed. In addition, the agent now will match class name with message and backtrace when noticing errors that have anoriginal_exception
.
v3.18.1
Ensure Mongo aggregate queries are properly obfuscated
Instrumentation for the Mongo 2.x driver had a bug where the
pipeline
attribute of Mongo aggregate queries was not properly obfuscated. Users who have sensitive data in theiraggregate
queries are strongly encouraged to upgrade to this version of the agent. Users who are unable to upgrade are encouraged to turn off query collection using by settingmongo.capture_queries
to false in their newrelic.yml files.This release fixes New Relic Security Bulletin NR17-03.
Early access Redis 4.0 instrumentation
Our Redis instrumentation has been tested against Redis 4.0.0.rc1.
v3.18.0
Ruby 2.4.0 support
The agent is now tested against the official release of ruby 2.4.0, excluding incompatible packages.
Agent-based metrics will not be recorded outside of active transactions
The agent has historically recorded metrics outside of a transaction. In practice, this usually occurs in applications that run background job processors. The agent would record metrics for queries the background job processor is making between transactions. This can lead to display issues on the background overview page and the presence of metrics generated by the background job processor can mask the application generated metrics on the database page. The agent will no longer generate metrics outside of a transaction. Custom metrics recorded using
NewRelic::Agent.record_metric
will continue to be recorded regardless of whether there is an active transaction.Include ControllerInstrumentation module with ActiveSupport.on_load
The agent will now use the
on_load :action_controller
hook to include the ControllerInstrumentation module in to both theBase
andAPI
classes of ActionController for Rails 5. This ensures that the proper load order is retained, minimizing side-effects of having the agent in an application.Ensure values for revisions on Capistrano deploy notices
Previously, running the task to look up the changelog could generate an error, if there weren't previous and current revisions defined. This has now been fixed. Thanks Winfield Peterson for the contribution!
External Segment Rewrites
The agent has made internal changes to how it represents segments for external web requests.
v3.17.2
Compatibility with Ruby 2.4.0-preview3
The Ruby agent has been updated to work on Ruby 2.4.0-preview3.
Early Access Sinatra 2.0 instrumentation
Our Sinatra instrumentation has been updated to work with Sinatra 2.0.0.beta2.
Include controller instrumentation module in Rails 5 API
The agent now includes the ControllerInstrumentation module into ActionController::API. This gives Rails API controllers access to helper methods like
newrelic_ignore
in support of the existing event-subscription-based action instrumentation. Thanks Andreas Thurn for the contribution!Use Module#prepend for ActiveRecord 5 Instrumentation
Rails 5 deprecated the use of
alias_method_chain
in favor of usingModule#prepend
. MixingModule#prepend
andalias_method_chain
can lead to a SystemStackError when analias_method_chain
is applied after a module has been prepended. This should ensure better compatibility between our ActiveRecord Instrumentation and other third party gems that modify ActiveRecord usingModule#prepend
.Use license key passed in to NewRelic::Agent.manual_start
Previously, the license key passed in when manually starting the agent with NewRelic::Agent.manual_start was not referenced when setting up the connection to report data to New Relic. This is now fixed.
Account for DataMapper database connection errors
Our DataMapper instrumentation traces instances of DataObjects::SQLError being raised and removes the password from the URI attribute. However, when DataObjects cannot connect to the database (ex: could not resolve host), it will raise a DataObjects::ConnectionError. This inherits from DataObjects::SQLError but has
nil
for its URI attribute, since no connection has been made yet. To avoid the password check here onnil
, the agent catches and re-raises any instances of DataObjects::ConnectionError explicitly. Thanks Postmodern for this contribution!Account for request methods that require arguments
When tracing a transaction, the agent tries to get the request object from a controller if it wasn't explicitly passed in. However, this posed problems in non-controller transactions with their own
request
methods defined that required arguments, such as in Resque jobs. This is now fixed.
v3.17.1
Datastore instance reporting for Redis, MongoDB, and memcached
The agent now collects datastore instance information for Redis, MongoDB, and memcached. This information is displayed in transaction traces and slow query traces. For memcached only, multi requests will expand to individual server nodes, and the operation and key(s) will show in the trace details "Database query" section. Metrics for
get_multi
nodes will change slightly. Parent nodes for aget_multi
will be recorded as generic segments. Their children will be recorded as datastore segments under the nameget_multi_request
and represent a batch request to a single Memcached instance.Rescue errors from attempts to fetch slow query explain plans
For slow queries through ActiveRecord 4+, the agent will attempt to fetch an explain plan on SELECT statements. In the event that this causes an error, such as being run on an adapter that doesn't implement
exec_query
, the agent will now rescue and log those errors. n
v3.17.0
Datastore instance reporting for ActiveRecord
The agent now collects database instance information for ActiveRecord operations, when using the MySQL and Postgres adapters. This information (database server and database name) is displayed in transaction traces and slow query traces. For more information, see Ruby instance-level database information.
Notes
Add
:trace_only
option tonotice_error
APIPreviously, calling
notice_error
would record the trace, increment the error count, and consider the transaction failing for Apdex purposes. This method now accepts a:trace_only
boolean option which, if true, will only record the trace and not affect the error count or transaction.HTTP.rb support
The agent has been updated to add instrumentation support for the HTTP gem, including Cross Application Tracing. Thanks Tiago Sousa for the contribution!
Prevent redundant Delayed::Job instrumentation installation
This change was to handle situations where multiple Delayed::Worker instances are being created but Delayed::Job has already been instrumented. Thanks Tony Brown for the contribution!
v3.16.2
Fix for "Unexpected frame in traced method stack" errors
Our ActiveRecord 4.x instrumentation could have generated "Unexpected frame in traced method stack" errors when used outside of an active transaction (for example, in custom background job handlers). This has been fixed.
v3.16.1
Internal datastore instrumentation rewrites
The agent's internal tracing of datastore segments has been rewritten, and instrumentation updated to utilize the new classes.
Fix Grape endpoint versions in transaction names
Grape 0.16 changed Route#version (formerly #route_version) to possibly return an Array of versions for the current endpoint. The agent has been updated to use rack.env['api.version'] set by Grape, and fall back to joining the version Array with '|' before inclusion in the transaction name when api.version is not available. Thanks Geoff Massanek for the contribution!
Fix deprecation warnings from various Rails error subclasses
Rails 5 deprecates #original_exception on a few internal subclasses of StandardError in favor of Exception#cause from Ruby stdlib. The agent has been updated to try Exception#cause first, thus avoiding deprecation warnings. Thanks Alexander Stuart-Kregor for the contribution!
Fix instrumentation for Sequel 4.35.0
The latest version of Sequel changes the name and signature of the method that the Ruby Agent wraps for instrumentation. The agent has been updated to handle these changes. Users using Sequel 4.35.0 or newer should upgrade their agent.
Fix DataMapper instrumentation for additional versions
Different versions of DataMapper have different methods for retrieving the adapter name, and Postmodern expanded our coverage. Thanks for the contribution!