Notes
Bugfix for uninitialized constant
NewRelic::Agent::ParameterFiltering
Users in some environments encountered a
NameError: uninitialized constant NewRelic::Agent::ParameterFiltering
from the Rails instrumentation while running v3.12.x of the Ruby agent. This issue has been fixed.Rake task instrumentation
The Ruby agent now provides opt-in tracing for Rake tasks. If you run long jobs via Rake, you can get all the visibility and goodness of New Relic that your other background jobs have. For more information, see Rake instrumentation.
Redis instrumentation
Redis operations will now show up on the Databases tab and in transaction traces. By default, only command names will be captured; to capture command arguments, set
transaction_tracer.record_redis_arguments
totrue
in your configuration. For more information, see Redis instrumentation.Fix for over-obfuscated SQL Traces and PostgreSQL
An issue with the agent obfuscating column and table names from Slow SQL Traces when using PostgreSQL has been resolved.
Rubinius 2.5.8 VM metric renaming support
Rubinius 2.5.8 changed some VM metric names and eliminated support for total allocated object counters. The agent has been updated accordingly.
Fix agent attributes with a value of false not being stored
An issue introduced in v3.12.1 prevented attributes (like those added with
add_custom_attributes
) from being stored if their value was false. This has been fixed.
Notes
More granular Database metrics for ActiveRecord 3 and 4
Database metrics recorded for non-SELECT operations (UPDATE, INSERT, DELETE, etc.) on ActiveRecord 3 and 4 now include the model name that the query was being executed against, allowing you to view these queries broken down by model on the Datastores page. Thanks to Bill Kayser for reporting this issue!
Support for Multiverse testing third party gems
The Ruby agent has rich support for testing multiple gem versions, but previously that wasn't accessible to third party gems. Now you can now simply
require 'task/multiverse'
in your Rakefile to access the same test:multiverse task that New Relic uses itself. For more details, see Multiverse: Test against multiple gem versionsUse Sidekiq 3.x's error handler
Sidekiq versions 3.0 or higher provide an error handler for internal and middleware related failures. Failures at these points were previously unseen by the Ruby agent, but now they are properly traced.
Better error messages for common configuration problems with Capistrano
Templating errors in newrelic.yml would result in obscure error messages during Capistrano deployments. These messages now more properly reflect the root cause of the errors.
newrelic_ignore
methods allow stringsThe
newrelic_ignore
methods previously only supported passing symbols, and would quietly ignore any strings passed. Now strings can be passed as well to get the intuitive ignoring behavior you'd expect.Replace DNS resolver for Resque jobs with Resolv
In some circumstances customers with a very high number of short-lived Resque jobs were experiencing deadlocks during DNS resolution. Resolv is an all Ruby DNS resolver that replaces the libc implementation to prevent these deadlocks.
Notes
Flexible capturing of attributes
The Ruby agent now allows you more control over exactly which request parameters and job arguments are attached to transaction traces, traced errors, and Insights events. For details, see:
https://docs.newrelic.com/docs/agents/ruby-agent/ruby-agent-attributes
Fixed missing URIs in traces for retried Excon requests
If Excon's idempotent option retried a request, the transaction trace node for the call would miss having the URI assigned. This has been fixed.
Capturing request parameters from rescued exceptions in Grape
If an exception was handled via a rescue_from in Grape, request parameters were not properly set on the error trace. This has been fixed. Thanks to Ankit Shah for helping us spot the bug.
Notes
Better naming for Rack::URLMap
If a Rack app made direct use of Rack::URLMap, instrumentation would miss out on using the clearest naming based on the app class. This has been fixed.
Avoid performance regression in makara database adapter
Delegation in the makara database adapter caused performance issues when the agent looked up a connection in the pool. The agent now uses a faster lookup to work around this problem in makara, and allocates less as well. Thanks Mike Nelson for the help in resolving this!
Allow audit logging to STDOUT
Previously audit logs of the agent's communication with New Relic could only write to a file. This prevented using the feature on cloud providers like Heroku. Now STDOUT is an allowed destination for
audit_log.path
. Logging can also be restricted to certain endpoints viaaudit_log.endpoints
.For more information see https://docs.newrelic.com/docs/agents/ruby-agent/installation-configurat...
Fix for crash during startup when Rails required but not used
If an application requires Rails but wasn't actually running it, the Ruby agent would fail during startup. This has been fixed.
Use IO.select explicitly in the event loop
If an application adds their own select method to Object/Kernel or mixes in a module that overrides the select method (as with ActionView::Helpers) we would previously have used their implementation instead of the intended IO.select, leading to all sorts of unusual errors. We now explicitly reference IO.select in the event loop to avoid these issues.
Fix for background thread hangs on old Linux kernels
When running under Ruby 1.8.7 on Linux kernel versions 2.6.11 and earlier, the background thread used by the agent to report data would hang, leading to no data being reported. This has been be fixed.
Fix for segmentation fault with sequel_pg 1.6.11
The Ruby agent incorrectly rescued exceptions at a point which caused sequel_pg 1.6.11 to segfault. This has been fixed. Thanks to Oldrich Vetesnik for the report!
Unified view for SQL database and NoSQL datastore products.
The response time charts in the application overview page will now include NoSQL datastores, such as MongoDB, and also the product name of existing SQL databases such as MySQL, Postgres, etc.
The Databases page will now enable the filtering of metrics and operations by product, and includes a table listing all operations.
For existing SQL databases, in addition to the existing breakdown of SQL statements and operations, the queries are now also associated with the database product being used.
For NoSQL datastores, such as MongoDB, we have now added information about operations performed against those products, similar to what is being done for SQL databases.
Because this introduces a notable change to how SQL database metrics are collected, it is important that you upgrade the agent version on all hosts. If you are unable to transition to the latest agent version on all hosts at the same time, you can still access old and new metric data for SQL databases, but the information will be split across two separate views.
For more information see https://docs.newrelic.com/docs/apm/applications-menu/monitoring/database...
Track background transactions as Key Transactions
In prior versions of the Ruby agent, only web transactions could be tracked as Key Transactions. This functionality is now available to all transactions, including custom Apdex values and X-Ray sessions.
For more information see https://docs.newrelic.com/docs/apm/selected-transactions/key-transaction...
More support and documentation for third-party extensions
It's always been possible to write extension gems for the Ruby agent, but now there's one location with best practices and recommendations to guide you in writing extensions. Check out https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/third-party-...
We've also added simpler APIs for tracing datastores and testing your extensions. It's our way of giving back to everyone who's helped build on the agent over the years. <3
Fix for anonymous class middleware naming
Metric names based off anonymous middlewares lacked a class name in the UI. The Ruby agent will now look for a superclass, or default to AnonymousClass in those cases.
Improved exit behavior in the presence of Sinatra
The agent uses an at_exit
hook to ensure data from the last < 60s before a process exits is sent to New Relic. Previously, this hook was skipped if Sinatra::Application was defined. This unfortunately missed data for short-lived background processes that required, but didn't run, Sinatra. Now the agent only skips its at_exit
hook if Sinatra actually runs from at_exit
.
Notes
Support for the Grape framework
We now instrument the Grape REST API framework! To avoid conflicts with the third-party newrelic-grape gem, our instrumentation will not be installed if newrelic-grape is present in the Gemfile.
For more details, see https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/grape-instru...
Automatic Cross Application Tracing support for all Rack applications
Previously Rack apps not using Rails or Sinatra needed to include the AgentHooks middleware to get Cross Application Tracing support. With these changes, this is no longer necessary. Any explicit references to AgentHooks can be removed unless the
disable_middleware_instrumentation
setting is set totrue
.Metrics no longer reported from Puma master processes
When using Puma's cluster mode with the preload_app! configuration directive, the agent will no longer start its reporting thread in the Puma master process. This should result in more accurate instance counts, and more accurate stats on the Ruby VMs page (since the master process will be excluded).
Better support for Sinatra apps used with Rack::Cascade
Previously, using a Sinatra application as part of a Rack::Cascade chain would cause all transactions to be named after the Sinatra application, rather than allowing downstream applications to set the transaction name when the Sinatra application returned a 404 response. This has been fixed.
Updated support for Rubinius 2.3+ metrics
Rubinius 2.3 introduced a new system for gathering metrics from the underlying VM. Data capture for the Ruby VM's page has been updated to take advantage of these. Thanks Yorick Peterse for the contribution!
Fix for missing ActiveJob traced errors
ActiveJobs processed by backends where the Ruby agent lacked existing instrumentation missed reporting traced errors. This did not impact ActiveJobs used with Sidekiq or Resque, and has been fixed.
Fix possible crash in middleware tracing
In rare circumstances, a failure in the agent early during tracing of a web request could lead to a cascading error when trying to capture the HTTP status code of the request. This has been fixed. Thanks to Michal Cichra for the fix!
Notes
Support for Ruby 2.2
A new version of Ruby is available, and the Ruby agent is ready to run on it. We've been testing things out since the early previews so you can upgrade to the latest and greatest and use New Relic right away to see how the new Ruby's performing for you.
Support for Rails 4.2 and ActiveJob
Not only is a new Ruby available, but a new Rails is out too! The Ruby agent provides all the usual support for Rails that you'd expect, and we instrument the newly released ActiveJob framework that's part of 4.2.
Security fix for handling of error responses from New Relic servers
This release fixes a potential security issue wherein an attacker who was able to impersonate New Relic's servers could have triggered arbitrary code execution in agent's host processes by sending a specially-crafted error response to a data submission request.
This issue is mitigated by the fact that the agent uses SSL certificate checking in order to verify the identity of the New Relic servers to which it connects. SSL is enabled by default by the agent. It can be enforced account-wide by enabling High-security mode for your account.
Fix for transactions with invalid URIs
If an application used the agent's
ignore_url_regexes
config setting to ignore certain transactions, but received an invalid URI, the agent would fail to record the transaction. This has been fixed.Fixed incompatibility with newrelic-grape
The 3.9.8 release of the Ruby agent included disabled prototyped instrumentation for the Grape API framework. This introduced an incompatibility with the existing third party extension newrelic-grape. This has been fixed. Newrelic-grape continues to be the right solution until full agent support for Grape is available.
Notes
Custom Insights events API
In addition to attaching custom parameters to the events that the Ruby agent generates automatically for each transaction, you can now record custom event types into Insights with the new NewRelic::Agent.record_custom_event API.
For details, see https://docs.newrelic.com/docs/insights/new-relic-insights/adding-queryi...
Reduced memory usage for idling applications
Idling applications using the agent could previously appear to leak memory because of native allocations during creation of new SSL connections to our servers. These native allocations didn't factor into triggering Ruby's garbage collector.
The agent will now re-use a single TCP connection to our servers for as long as possible, resulting in improved memory usage for applications that are idling and not having GC triggered for other reasons.
Don't write to stderr during CPU sampling
The Ruby agent's code for gathering CPU information would write error messages to stderr on some FreeBSD systems. This has been fixed.
LocalJumpError on Rails 2.x
Under certain conditions, Rails 2.x controller instrumentation could fail with a LocalJumpError when an action was not being traced. This has been fixed.
Fixed config lookup in warbler packaged apps
When running a Ruby application from a standalone warbler .jar file on JRuby, the packaged config/newrelic.yml was not properly found. This has been fixed, and thanks to Bob Beaty for the help getting it fixed!
Hash iteration failure in middleware
If a background thread iterated over the keys in the Rack env hash, it could cause failures in New Relic's AgentHooks middleware. This has been fixed.
Notes
Support for synthetic monitors
The Ruby agent now gives you additional information for requests from synthetic monitors. More transaction traces and events give you a clearer look into how your application is performing around the world.
For more details, see https://docs.newrelic.com/docs/synthetics/new-relic-synthetics/getting-s...
Support for multiple job per fork gems with Resque
The resque-jobs-per-fork and resque-multi-job-forks gems alter Resque to fork every N jobs instead of every job. This previously caused issues for the Ruby agent, but those have been resolved. These gems are fully supported.
Running Resque with the FORK_PER_JOB=false environment variable setting is also supported now.
For more details on our Resque support, see https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/resque-...
Support agent when starting Resque Pool from Rake task
When running resque-pool with its provided rake tasks, the agent would not start up properly. Thanks Tiago Sousa for the fix!
Fix for DelayedJob + Rails 4.x queue depth metrics
The Ruby agent periodically records DelayedJob queuedepth as a metric, but this didn't work properly in Rails 4.x applications. This has been fixed. Thanks Jonathan del Strother for his help with the issue!
Fix for failure in background transactions with rules.ignore_url_regexes
The recently added feature for ignoring transactions via URL regexes caused errors for non-web transactions. This has been fixed.
Rename the TransactionNamer.name method to TransactionNamer.name_for
The internal TransactionNamer class had a class method called 'name', with a different signature than the existing Class#name method and could cause problems when trying to introspect instances of the class.
Thanks to Dennis Taylor for contributing this fix!