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!
v3.16.0
Official Rails 5.0 support
This version of the agent has been verified against the Rails 5.0.0 release.
Early access Action Cable instrumentation
The Ruby agent instruments Action Cable channel actions and calls to ActionCable::Channel#Transmit in Rails 5. Feedback is welcome!
Obfuscate queries from
oracle_enhanced
adapter correctlyThis change allows the
oracle_enhanced
adapter to use the same obfuscation asoracle
adapters. Thanks Dan Drinkard for the contribution!Make it possible to define a newrelic_role for deployment with Capistrano 3
Thanks NielsKSchjoedt for the contribution!
Retry initial connection to New Relic in Resque master if needed
Previously, if the initial connection to New Relic in a monitored Resque master process failed, the agent would not retry, and monitoring for the process would be lost. This has been fixed, and the agent will continue retrying in its background harvest thread until it successfully connects.
v3.15.2
Run explain plans on parameterized slow queries in AR4
In our ActiveRecord 4 instrumentation, we moved to tracing slow queries using the payloads from ActiveSupport::Notifications
sql.active_record
events. As a result, we were unable to run explain plans on parameterized queries. This has now been updated to pass along and use the parameter values, when available, to get the explain plans.Fix getMore metric grouping issue in Mongo 2.2.x instrumentation
A metric grouping issue had cropped up when using the most recent Mongo gem (2.2.0) with the most recent release of the server (3.2.4). We now have a more future-proof setup for preventing these.
Restore older DataMapper support after password obfuscation fix
Back in 3.14.3, we released a fix to avoid inadvertently sending sensitive information from DataMapper SQLErrors. Our implementation did not account for DataMapper versions below v0.10.0 not implementing the #options accessor. Thanks Bram de Vries for the fix to our fix!
Padrino 0.13.1 Support
Users with Padrino 0.13.x apps were previously seeing the default transaction name "(unknown)" for all of their routes. We now provide the full Padrino route template in transaction names, including any parameter placeholders. Thanks Robert Schulze for the contribution!
Update transaction naming for Grape 0.16.x
In Grape 0.16.x,
route_
methods are no longer prefixed. Thanks to Daniel Doubrovkine for the contribution!Fix name collision on method created for default metric name fix
We had a name collision with the yard gem, which sets a
class_name
method on Module. We've renamed our internal method toderived_class_name
instead.
v3.15.1
Rack 2 alpha support
This release includes experimental support for Rack 2 as of 2.0.0.alpha. Rack 2 is still in development, but the agent should work as expected for those who are experimenting with Rack 2.
Rails 5 beta 3 support
We've tweaked our Action View instrumentation to accommodate changes introduced in Rails v5.0.0.beta3.
Defer referencing ::ActiveRecord::Base to avoid triggering its autoloading too soon
In 3.12.1 and later versions of the agent, the agent references (and therefore loads) ActiveRecord::Base earlier on in the Rails loading process. This could jump ahead of initializers that should be run first. We now wait until ActiveRecord::Base is loaded elsewhere.
Fix explain plans for non-parameterized queries with single quote literals
The agent does not run explain plans for queries still containing parameters (such as
SELECT * FROM UNICORNS WHERE ID = $1 LIMIT 1
). This check was unfortunately mutating the query to be obfuscated, causing an inability to collect an explain plan. This has now been fixed.Fix default metric name for tracing class methods
When using
add_method_tracer
on a class method but without passing in ametric_name_code
, the default metric name will now look likeCustom/ClassName/Class/method_name
. We also addressed default metric names for anonymous classes and modules.Fix issue when rendering SQL strings in developer mode
When we obfuscate SQL statements, we rewrite the Statement objects as SQL strings inline in our sample buffers at harvest time. However, in developer mode, we also read out of these buffers when rendering pages. Depending on whether a harvest has run yet, the buffer will contain either Statement objects, SQL strings, or a mix. Now, developer mode can handle them all!
Fix DelayedJob Sampler reporting incorrect counts in Active Record 3 and below
When fixing various deprecation warnings on ActiveRecord 4, we introduced a regression in our DelayedJob sampler which caused us to incorrectly report failed and locked job counts in ActiveRecord 3 and below. This is now fixed. Thanks Rangel Dokov for the contribution!
Notes
Rails 5 support
This release includes experimental support for Rails 5 as of 5.0.0.beta2. Please note that this release does not include any support for ActionCable, the WebSockets framework new to Rails 5.
Don't include extension from single format Grape API transaction names
Starting with Grape 0.12.0, an API with a single format no longer declares methods with
.:format
, but with an extension such as.json
. Thanks Daniel Doubrovkine for the contribution!Fix warnings about shadowing outer local variable when running tests
Thanks Rafael Almeida de Carvalho for the contribution!
Check config first for Rails middleware instrumentation installation
Checking the config first avoids issues with mock classes that don't implement
VERSION
. Thanks Jesse Sanford for the contribution!Remove a trailing whitespace in the template for generated newrelic.yml
Thanks Paul Menzel for the contribution!
Reference external resources in comments and readme with HTTPS
Thanks Benjamin Quorning for the contribution!
Notes
Don't inadvertently send sensitive information from DataMapper SQLErrors
DataObjects::SQLError
captures the SQL query, and when using versions of data_objects prior to 0.10.8, built a URI attribute that contained the database connection password. The:query
attribute now respects the obfuscation level set for slow SQL traces and splices out any password parameters to the URI when sending up traced errors to New Relic.Improved SQL obfuscation algorithm
To help standardize SQL obfuscation across New Relic language agents, we've improved the algorithm used and added more test cases.
Configurable longer
sql_id
attribute on slow SQL tracesThe
sql_id
attribute on slow SQL traces is used to aggregate normalized queries together. Previously, these IDs would generally be 9-10 digits long, due to a backend restriction. Ifslow_sql.use_longer_sql_id
is set totrue
, these IDs will now be 18-19 digits long.
Notes
Improved transaction names for Sinatra
The agent will now use
sinatra.route
for transaction names on Sinatra 1.4.3+, which sets it in the request environment. This gives names that closer resemble the routes defined in the Sinatra DSL. Thanks to Brian Phillips for the suggestion!Bugfix for error flag on transaction events
There was an issue causing the error flag to always be set to false for Insights transaction events that has been fixed.
Official support for Sidekiq 4
The Ruby agent now officially supports Sidekiq 4.
Additional attributes collected
The agent now collects the following information in web transactions:
Content-Length
HTTP response andContent-Type
HTTP request headers.
Notes
Add support for setting a display name on hosts
You can now configure a display name for your hosts using
process_host.display_name
, to more easily distinguish dynamically assigned hosts. For more info, see Change display name of hostsFixes automatic middleware instrumentation for Puma 2.12.x
Starting with version 2.12.x the Puma project inlines versions of
Rack::Builder
andRack::URLMap
under the Puma namespace. This had the unfortunate side effect of breaking automatic Rack middleware instrumentation. We now instrumentPuma::Rack::Builder
andPuma::Rack::URLMap
and once again have automatic Rack middleware instrumentation for applications running on Puma.Do not use a DelayedJob's
display_name
for naming the transactionA DelayedJob's name may be superseded by a
display_name
, which can lead to a metric grouping issue if thedisplay_name
contains unique identifiers. We no longer use job name methods that may lead to an arbitrarydisplay_name
. Instead, we use the appropriate class and/or method names, depending what makes sense for the job and how it's called.Improvements to Mongo 2.1.x instrumentation
Fixes issue where
getMore
operations in batched queries could create metric grouping issues. Previously when multiple Mongo queries executed in the same scope only a single query was recorded as part of a transaction trace. Now transaction trace nodes will be created for every query executed during a transaction.Bugfix for
NewRelic::Agent.notice_error
Fixes issue introduced in v3.14.0 where calling
NewRelic::Agent.notice_error
outside of an active transaction results in aNoMethodError
.Bugfix for Resque Transaction Error events
Fixes error preventing Transaction Error events generated in Resque tasks from being sent to New Relic.
Notes
pruby marshaller removed
The deprecated pruby marshaller has now been removed; the
marshaller
config option now only acceptsjson
. Customers still running Ruby 1.8.7/REE must add thejson
gem to their Gemfile, or (preferably) upgrade to Ruby 1.9.3 or higher.Log dates in ISO 8601 format
The agent will now log dates in ISO 8601 (
YYYY-MM-DD
) format, instead ofMM/DD/YY
.Additional attributes collected
The agent now collects the following information in web transactions:
Accept
,Host
,User-Agent
,Content-Length
HTTP request headers, HTTP request method, andContent-Type
HTTP response header.TransactionErrors
reported for APM error advanced analyticsWith this release, the agent reports
TransactionError
events. These new events power the beta feature Advanced Analytics for APM errors. The error events are also available today through New Relic Insights.Advanced Analytics for APM errors lets you see all of your errors, with granular detail. Filter and group by any attribute to analyze them. Take action to resolve issues through collaboration.
For more information, see View APM errors and error traces.
Bug Fixes
Don't fail to send data when using mathn library
Version 3.12.1 introduced a bug with applications using the mathn library that would prevent the agent from sending data to New Relic. This has been fixed.