Important
Major Version Update: This version of the Ruby agent is a SemVer MAJOR update and contains breaking changes. MAJOR versions may drop support for language runtimes that have reached End-of-Life according to the maintainer. Additionally, MAJOR versions may drop support for and remove certain instrumentation. For more details on these changes please see the migration guide here.
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v10.0.0
Breaking Change: Remove support for Ruby 2.4 and 2.5
Support for Ruby versions 2.4 and 2.5 has been removed. The new minimum required Ruby version is now 2.6. PR#3314
Breaking Change: Removal of Cross Application Tracing (CAT)
Previously, Cross Application Tracing (CAT) was deprecated in favor of Distributed Tracing. CAT functionality has now been removed. The configuration option
cross_application_tracer.enabledhas been removed. Public API methodsNewRelic::Agent::External.process_request_metadata,NewRelic::Agent::External.get_response_metadata,NewRelic::Agent::Transaction::ExternalRequestSegment#process_response_metadata,NewRelic::Agent::Transaction::ExternalRequestSegment#get_request_metadata, andNewRelic::Agent::Transaction::ExternalRequestSegment#read_response_headershave also been removed. PR#3333Breaking Change: Rename ActiveJob metrics and segments
ActiveJob metrics have been updated to include the job's class name for more specific reporting. This is a breaking change and may require updating custom dashboards or alerts. PR#3370 PR#3320
- Old format:
Ruby/ActiveJob/<QueueName>/<Method> - New format:
Ruby/ActiveJob/<QueueName>/<ClassName>/<Method>
In addition, segments created for Active Job enqueuing actions now include the job class.
- Old format:
ActiveJob/<QueueAdapter>/Queue/<Event>/Named/<QueueName> - New format:
ActiveJob/<QueueAdapter>/Queue/<Event>/Named/<QueueName>/<ClassName>
- Old format:
Breaking Change: Rename
bin/newreliccommand tobin/newrelic_rpmThe executable file for the agent's CLI has been renamed from
bin/newrelictobin/newrelic_rpm. This change resolves a name collision with the standalone New Relic CLI tool. PR#3323Breaking Change: Remove the
newrelic deploymentsCLI commandThe deprecated
newrelic deploymentsCLI command has been removed. To track changes and deployments in New Relic, please see our guide to Change Tracking for a list of available options. PR#3299Breaking Change: Remove the NewRelic::Agent::SqlSampler#notice_sql method
Users should call
NewRelic::Agent::Datastores.notice_sqlinstead. PR#3338Breaking Change: Remove unused arguments from various NewRelic::Agent::Datastores APIs
The following APIs from the
NewRelic::Agent::Datastoresclass have had method arguments removed:NewRelic::Agent::Datastores.notice_sql, previously had three positional arguments,query,scoped_metricandelapsed. Now, it only hasquery.NewRelic::Agent::Datastores.notice_statement, previously had two positional argumentsqueryandelapsed. Now it only hasquery.NewRelic::Agent::Datastores.wraprequires a proc. Previously the proc received three arguments: the result of the yield, the most specific scoped metric name, and the elapsed time of the call. Now, it only receives one: the result of the yield.
The values of the removed arguments are derived from the current segment at the time of the call. PR#3347
Breaking Change: Remove experimental feature Configurable Security Policies (CSP)
The experimental feature, Configurable Security Policies (CSP), is no longer supported and has been removed. PR#3292
Breaking Change: Remove support for Puma versions < 3.9.0
The minimum version of Puma now supported is 3.9.0 or higher. PR#3326
Breaking Change: Improve configuration validation and coercion
The internals used to coerce and validate the values provided for agent configuration are now more performant and more accurate.
- Warning messages will now be logged to the newrelic_agent.log file when nil is provided as a config value for a setting that does not support it.
- Integer values are permitted for Float configuration types
- Float values are permitted for Integer configuration types
- Fatal interruptions are prevented when a default value can be found to replace an invalid input value PR#3341
Breaking Change: Replace 'default' option with 'adaptive' for distributed tracing remote parent samplers
Previously, the default option for
distributed_tracing.sampler.remote_parent_sampledanddistributed_tracing.sampler.remote_parent_not_sampledwasdefault, which used the pre-existing adaptive sampler. Thedefaultoption has been renamed toadaptive. PR#3363Feature: Add
loggeras a dependencyThe
loggergem is now listed as a dependency of the agent to ensure continued logging functionality and support for Ruby 4.0.0 and newer versions. PR#3293Feature: Add Active Support notification allowlist configuration option
A new configuration option,
instrumentation.active_support_notifications.active_support_events, allows users to define an allowlist of Active Support notifications event names for the agent to subscribe to. By default, the agent subscribes to all Active Support: Caching and Active Support: Messages events. PR#3327Feature: Use Ruby's built-in Gzip compression
The agent now uses the built-in
Zlib.gzipmethod from the Ruby standard library for compression, replacing the previous custom implementation. PR#3332Feature: Add argument validation for the
NewRelic::Agent#record_custom_eventAPIThe
NewRelic::Agent#record_custom_eventAPI now raises anArgumentErrorwhen an invalidevent_typeis provided. A valid event type must consist only of alphanumeric characters, underscores (_), colons (:), or spaces (). PR#3319Feature: Add root sampling configuration options
You can now configure the sampling behavior for traces that originate within the current service using
distributed_tracing.sampler.root. PR#3330There are four modes available:
Mode Description adaptiveUses the existing adaptive sampler algorithm always_offMarks 0% of root traces as sampled always_onMarks 100% of root traces as sampled trace_id_ratio_basedSamples traces based on a ratio set in distributed_tracing.sampler.root.trace_id_ratio_based.ratio. The ratio must be float between 0.0 and 1.0Feature: Add Trace ID Ratio Based sampling options
The agent can now sample traces using the OpenTelemetry Trace ID Ratio Based sampler algorithm. PR#3330 This samples traces based on a probability between 0.0 and 1.0 based on the trace ID.
To use this option, you must first set your distributed tracing sampler configuration to
trace_id_ratio_basedand then set the correspondingdistributed_tracing.sampler.*.trace_id_ratio_based.ratiosampler to a Float between 0.0 and 1.0.For example:
distributed_tracing.sampler.remote_parent_sampled: 'trace_id_ratio_based'distributed_tracing.sampler.remote_parent_sampled.trace_id_ratio_based.ratio': 0.5This configuration would sample approximately 50% of your traces for all traces where the remote parent is sampled.
This option is available for:
distributed_tracing.sampler.rootdistributed_tracing.sampler.remote_parent_sampleddistributed_tracing.sampler.remote_parent_not_sampled
Feature: Add Entity GUID to Agent Control health check files
When the agent is started within an Agent Control environment, a health check file is created at the configured file location for every agent process. This file now includes the guid of the entity related to the agent when available. PR#3371
Bugfix: Resolve a
NoMethodErrorin GCP utilization detection.The GCP metadata discovery logic will now gracefully handle
nilor unexpected values, preventing service initialization crashes. PR#3388
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.24.0
Feature: Deprecation reminder for SqlSampler#notice_sql API
The
NewRelic::Agent::SqlSampler#notice_sqlmethod is deprecated and will be removed in a future major version. Instead, users should callNewRelic::Agent::Datastores.notice_sql. PR#3345Feature: Deprecation notice for second and third arguments in Datastores.notice_sql API
The second (
scoped_metric) and third (elapsed) arguments in theNewRelic::Agent::Datastores.notice_sqlmethod are deprecated. They have not been used by the method for some time. Instead, these values will be set based on the current segment when the API is called. PR#3345Feature: Deprecation notice for second argument in Datastores.notice_statement API
The second (
elapsed) argument in theNewRelic::Agent::Datastores.notice_statementmethod is deprecated. It has not been used by the method for some time. Instead, this value will be set based on the current segment when the API is called. PR#3346Feature: Deprecation notice for proc's second and third arguments in Datastores.wrap API
The
NewRelic::Agent::Datastores.wrapmethod is changing. In a future major version, proc will only accept a single argument, the result of the yield. The scoped metric name and elapsed arguments will be removed, as they are being removed from theDatastores.notice_sqlmethod. The scoped metric name and elapsed values are derived from the current segment when the wrap yields. PR#3346
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.23.0
Feature: Add sidekiq.ignore_retry_errors configuration option
A new configuration option,
sidekiq.ignore_retry_errors, has been added to control if Sidekiq job retries are captured. Retry errors are captured by default, but now ifsidekiq.ignore_retry_errorsis set totrue, the agent will ignore exceptions raised during Sidekiq's retry attempts and will only report the error if the job permanently fails. Thank you DonGiulio for recognizing this improvement and contributing a solution. PR#3317Feature: Deprecation notice for recording deployments using Capistrano
Sending application deployment information using a Capistrano recipe is deprecated and will be removed in agent version 10.0.0. For recording deployments, please see our guide to Change Tracking for a list of available options.
Feature: Use remote parent sampling configurations for decisions in more scenarios
Previously, the
distributed_tracing.sampler.remote_parent_sampledanddistributed_tracing.sampler.remote_parent_not_sampledconfiguration options were used for the sampling decision only when thetraceparentandtracestateheaders were present. Now, these configuration options are applied in cases when thetracestateheader is missing and when only thenewrelicheader is available. This change makes distributed trace sampling more consistent and predictable. PR#3306
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.22.0
Feature: One-step instrumentation for Kubernetes
The Kubernetes APM auto-attach automatically instruments applications and manages agent upgrades within Kubernetes deployments. This feature has exited preview and is now generally avaliable. Learn more about Kubernetes auto-attach. PR#2635 PR#3287
Feature: Deprecation notice for Ruby 2.4 and Ruby 2.5
Ruby agent support for Ruby versions 2.4 and 2.5 is deprecated and will be removed in agent version 10.0.0. The new miniumum required Ruby version will become Ruby 2.6 and we will stop testing with Ruby 2.4 and 2.5. PR#3288
Feature: Deprecation notice for the
newrelic deploymentscommandSupport for recording deployments using the
newrelic deploymentscommand is now deprecated and will be removed in agent version 10.0.0.Going forward, there are a number of automated and manual ways ways to record changes in New Relic. Please see our guide to Change Tracking for a list of available options. PR#3262
Feature: Deprecation reminder for cross application tracing
Cross application tracing has been deprecated since major version 8.0.0 of the Ruby agent. We will remove support for it entirely in version 10.0.0 of the agent. PR#3288
Feature: Ensure compatibility with Ruby 3.5 change to Method#source_location
Updated the agent to correctly parse the return value of Method#source_location, which is changing in Ruby 3.5 from a two-element to a five-element array. This change maintains support for older Ruby versions while adding support for the future release. PR#3257
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.21.0
Feature: In Serverless APM mode, use event source name as transaction name prefix
The agent will now use the event source name as a prefix for the transaction name in Serverless APM mode. This will help to better identify the source of the transaction in the New Relic UI. PR#3245
Bugfix: Revert changed logic for how we track the thread the span starts in
This change restores the previous behavior of tracking the thread the span starts in, addressing issues that arose from the updated logic. Thank you @david-zw-liu for bringing this to our attention. PR#3248
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.20.0
Feature: Add ECS Docker ID for Fargate
Previously, the Ruby agent did not record the Docker ID when running in an AWS ECS Fargate environment. The Docker ID will now be recorded correctly. PR#3172
Feature: Add NewRelic::Helper.version_satisfied?
The agent has a new helper method to simplify version comparison.
NewRelic::Helper.version_satisfied?accepts three arguments: a left-side version number, the comparison operator as a string, and a right-side version number. Our thanks go to @kekke-n for this contribution. PR#3182Feature: Add code.stacktrace attribute on datastore spans when duration exceeds configured threshold
The agent will now add the
code.stacktraceattribute to datastore spans when the duration exceeds the configured threshold. The threshold is configured using thetransaction_tracer.stack_trace_thresholdconfiguration option. PR#3220Feature: Consolidate "Unknown" constant values
All references to the various capitalization styles for "Unknown" have been consolidated into two constants:
NewRelic::UNKNOWNandNewRelic::UNKNOWN_LOWER. Thank you, @tsubasa1122, for your contribution! PR#3185Bugfix: Fix Brewfile source links
Previously, the multiverse README's links to the Brewfile were broken. Our thanks go to @emmanuel-ferdman for submitting a PR to fix them! PR#3191
Bugfix: Fix error when using HTTPX 1.5.0
The agent previously encountered an error when using the new HTTPX version 1.5.0. This was due to a change in the way HTTPX stores the response. The agent has been updated to handle this change correctly, and no longer encounters an error when using HTTPX 1.5.0. PR#3203
Bugfix: Bugfixes and improvements to debug level agent logs
Improves the information logged at the debug level by the agent when the agent reads in a configuration source. PR#3221
Bugfix: Fix risk of server-side forgery for Slack workflow script
Internally, we keep track of gems that are released using a GitHub actions workflow that posts updates on Slack. [@odaysec] identified a way we could reduce the risk of server-side forgery for this workflow. Thank you! PR#3184
Bugfix: Replace JSON.load calls with JSON.parse
Generally, JSON.parse is seen as safer than JSON.load. Thank you, @odaysec, for bringing this to our attention! PR#3183 PR#3230
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.19.0
Feature: Add Thread ID as attribute to all spans
The agent will now record the Thread ID as an attribute on each span. PR#3122
Feature: Add support for W3C TraceContext Trace Flag
Previously, the agent would not use the trace flag field of the traceparent header for sampling decisions. This could lead to fragmented traces in the UI. While the default behavior remains unchanged, two new configuration options,
distributed_tracing.sampler.remote_parent_sampledanddistributed_tracing.sampler.remote_parent_not_sampled, have been introduced to allow more control over the way sampling decisions are made. PR#3135Bugfix: Include request.uri in Transaction events by default
The New Relic data dictionary expects Transaction events to have the
request.uriattribute. The Ruby agent now fulfills this expectation. If you would like to excluderequest.urifrom Transaction events, you can do so by settingtransaction_events.attributes.excludeto'request.uri'. PR#3103Bugfix: Fix error in Active Job instrumentation when using perform_all_later
Previously, when Active Job's
perform_all_latermethod was called and the agent was running, aNoMethodErrorwould be raised with the messageundefined method 'queue_name' for nil. The error has been fixed and the name of the segment will reflect the first job in the queue. Our thanks goes to @tan-linx for bringing this to our attention and providing a fix. PR#3110
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.18.0
Feature: Add elasticsearch.capture_cluster_name configuration option
A new configuration option,
elasticsearch.capture_cluster_name, has been added to control capturing Elasticsearch cluster names. Cluster names are captured by default, but can now be disabled as needed. PR#3038Feature: Add support for sidekiq-delay_extensions
Sidekiq delay extensions were removed from Sidekiq in 7.x and are now avaliable through the sidekiq-delay_extensions gem. Thanks to @sobrinho, the agent now has continued support for delay extensions.PR#3056
Feature: Parallelize calls for vendor metadata
Previously, the agent would make calls for vendor metadata in a serial fashion. This could lead to a delay in starting the agent. Now, the agent will make these calls in parallel, reducing the time it takes to start the agent. PR#3094
Bugfix: Prevent a nil segment from causing errors in Net::HTTP instrumentation
When using JRuby, a race condition can happen that causes the segment creation to fail and return
nil. This would cause an error to occur when methods were later called on thenilsegment. These methods will no longer be called if the segment isnil, preventing that error from occurring. PR#3046Bugfix: JRuby multithreading improvements
Added some additional nil checks and mutexes to prevent issues when using the agent on JRuby with multiple threads. Thanks to @NC-piercej for bringing this to our attention Issue#3021 PR#3053
Bugfix: Stop reporting rescued Sidekiq::OverLimit exceptions
When Sidekiq's concurrent rate limiters encounter an
OverLimitexception, Sidekiq typically handles this by re-enqueuing the job. Previously, all occurrences ofSidekiq::OverLimitwere logged as errors in New Relic, even when Sidekiq's middleware resolved the exception. New Relic will no longer report errors that are handled by Sidekiq's own middleware. Thanks to @97jaz for reporting this issue. Issue#3037 PR#3047Bugfix: Protect against nil agents or health checks
In some cases the agent or health checks may be
nilwhen they are called. Safe navigation operators have been added for protection on those occasions. PR#3049Bugfix: Ignore Solid Queue
ThreadError: queue emptyerror message by defaultWhen using the solid_queue gem, the agent previously generated excessive warn-level logs when the queue was empty. The agent now ignores
queue emptyerror messages of theThreadErrorclass by default. This behavior can be adjusted using theerror_collector.ignore_messagesconfiguration option. PR#3060Bugfix: Refactor URI host handling to accommodate downcasing frozen strings
When URI host string was frozen, a FrozenError would be raised when the agent attempted to downcase the host as part of its data normalization process. Now, the update is friendly for frozen strings. Thank you @pedrol3001 for your contribution! PR#3097
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.17.0
Feature: Support Ruby 3.4.0
The agent now supports Ruby 3.4.0. We've made incremental changes throughout the preview stage to reach compatibility. This release includes an update to the Thread Profiler for compatibility with Ruby 3.4.0's new backtrace format. Issue#2992 PR#2997
Feature: Add instrumentation for aws-sdk-firehose
The agent now has instrumentation for the aws-sdk-firehose gem. PR#2973
Feature: Kubernetes APM auto-attach - new agent version precedent
Previously, when a customer installed the Ruby agent via Kubernetes APM auto-attach and also had the Ruby agent listed in their
Gemfile, the agent version inGemfilewould take precedence. Now, the agent version installed by auto-attach takes priority. PR#3018Feature: Add health checks when the agent runs within Agent Control
When the agent is started within an Agent Control environment, a health check file will be created at the configured file location for every agent process. By default, this location is: '/newrelic/apm/health'. The health check files will be updated at the configured frequency, which defaults to every five seconds. PR#2995
Feature: Add Redshift as recognized ActiveRecord adapter
When the agent does not recognize an ActiveRecord adapter, the host, port, and database name information is not added to the datastore span. Redshift will now be treated like PostgreSQL, and the agent will save the host, port, and database name on the span. PR#3032
Feature: Add instrumentation for aws-sdk-kinesis
The agent now has instrumentation for the aws-sdk-kinesis gem. It will record message broker segments for
get_records,put_record, andput_recordsoperations. All other operations will record standard segments. PR#2974Bugfix: Stop emitting inaccurate debug-level log about deprecated configuration options
In the previous major release, we dropped support for many
disable_library_nameconfiguration options in favor ofinstrumentation.library_name. Previously, a DEBUG level log warning appeared wheneverdisable_*options were set totrue, even for libraries (e.g. Action Dispatch) without equivalentinstrumentation.*options:
>DEBUG : [DEPRECATED] configuration disable_library_name for library_name will be removed in the next major release. Use instrumentation. library_name with one of ["auto", "disabled", "prepend", "chain"]This inaccurate warning has been removed. If you are disabling instrumentation using instrumentation.library_name: disabled or NEW_RELIC_INSTRUMENTATION_LIBRARY_NAME=disabled, please verify the option exists by consulting our configuration documentation. If the option does not exist, check the 'Disabling' section to see if there is a related option. We apologize for the confusion. PR#3005
Bugfix: Do not attempt to decorate logs with
nilmessagesThe agent no longer attempts to add New Relic linking metadata to logs with
nilmessages. Thank you, @arlando for bringing this to our attention! Issue#2985 PR#2986Bugfix: Stop renaming final Grape segment
Previously, the agent renamed the final segment in Grape transactions to
"Middleware/Grape/#{class_name}/call". This was a part of an old instrumentation pattern that is no longer relevant. Many thanks to @seriousdev-gh for bringing this issue to our attention and along with a great reproduction and suggested fix. PR#2987.
Important
We recommend updating to the latest agent version as soon as it's available. If you can't upgrade to the latest version, update your agents to a version no more than 90 days old. Read more about keeping agents up to date.
See the New Relic Ruby agent EOL policy for information about agent releases and support dates.
v9.16.1
Bugfix: Added the support for the Trilogy database adapter.
The agent now fully supports the Trilogy, a client library for MySQL-compatible database servers, and correctly lists MySQL as the corresponding database in the UI. PR#2966.