New features
Added
DatastoreShim#getDatabaseNameFromUseQuery
This new method can be used to extract the database name from
USE
SQL queries.
Improvements
Added link to CONTRIBUTING.md file in README.md
Thanks to Yuri Tkachenko (@tamtamchik) for the contribution.
Added VS Code settings to git ignore.
Fixed bug preventing Distributed Tracing (DT) from fully functioning when Cross Application Tracing (CAT) was disabled.
Renames better-cat integration test organization to be distributed-tracing and updated some test verbiage to use DT or distributed tracing instead of CAT or cross application tracing.
Bug fixes
The agent will no longer break express routers in the case of using regex paths in a list.
Previously, the agent would overwrite the regex with the source of the regex. The agent now makes a copy of the route array and mutates that instead.
Attributes will now be properly propagated to PageView events.
The agent may now be configured to pass attributes along to the browser agent. The attributes that match the include/exclude rules in the
browser_monitor.attributes
section will now be placed on PageView events.
New features
Added
superagent
as built-in instrumentation.This instrumentation just maintains transaction state when using the
superagent
module to make HTTP requests with either callbacks or promises.Updated
noticeError
API method to be partially functional in High-security mode.In HSM, any custom attributes will be ignored, but the error will still be tracked. This brings the Node agent in line with the behavior of other language agents.
Added
PromiseShim
class for instrumenting promise libraries.Support for setting
transaction_tracer.transaction_threshold
to 0 has been added.
Improvements
- Updated DT payload creation to use
primary_application_id
from connect response. - Added protection against functions with modified prototypes in
shim.applySegment
. - Replaced SQL ID hash generation algorithm with SHA1 instead of MD5 to allow usage in FIPS compliant environments.
- Leveraged 16 hex digits for creation of SQL ID.
- Upgraded ejs module to get rid of Github security warnings. The ejs module was only used for tests and not in main agent code.
- Changes DT payload configuration log messages to debug level as it is not uncommon for calls to occur before server configuration has been retrieved.
- Converted
net
instrumentation to use shim api. - Converted child_process instrumentation to newer shim style.
- Converted Timers instrumentation to newer shim style.
- Converted zlib instrumentation to use shim API.
Bug fixes
Fixed
codec.decode()
callback bug that would re-call a callback with an error thrown within the callback.Fixed bug requiring Cross Application Tracing (CAT) to be enabled for Distributed Tracing (DT)
createDistributedTracePayload
andacceptDistributedTracePayload
APIs to function. DT configuration will no longer consider CAT configuration.Fixed bug in wrap() that would fail to wrap callbacks if the callback index was 0.
The agent now respects
NEW_RELIC_TRACER_THRESHOLD
.Previously, this environment variable was stored as a string. The environment variable is now stored as a float.
Improvements
- Converted File System instrumentation to use newer shim style.
- Converted DNS instrumentation to newer shim style.
- Added tracking of callbacks to DNS instrumentation.
- Converted crypto instrumentation to newer shim style.
- Updated domains instrumentation to use an instrumentation shim.
- Refactored the global instrumentation to use the shim API.
- Ported inspector instrumentation to use an instrumentation shim.
- Ported async_hooks based promise instrumentation over to using shims.
- Added shim types for core instrumentations.
- Improved benchmark comparison output.
- Added
http
benchmark tests.
Bug fixes
Agent instrumentation will no longer interfere with promisification of core methods.
Some core methods expose pre-promisified versions of the methods as a reference on the method itself. When instrumenting these methods, it neglected to forward these references onto the wrapper function. Now the instrumentation will properly forward property look ups to the original method.
Fixed outbound https call to use example.com to resolve integration test issue.
Fixed tests for ioredis 4.0.0 and above.
Improvements
Implemented enforcement of
max_payload_size_in_bytes
config value.Any payload during the harvest sequence that exceeds the configured limit will be discarded.
Added JSON-formatted output to benchmarks to enable automated benchmark comparison.
Updated the benchmark runner to measure specifically userland CPU overhead.
Added DatastoreShim benchmarks.
Bug fixes
Fixed MongoDB instrumentation for driver versions greater than 3.0.6.
Mongo 3.0.6 removed metadata the Agent relied upon to instrument the driver. This fixes that by going back to the old method of manually listing all objects and methods to instrument.
Updated MySQL versioned tests to run against the latest release.
New features
Added support for distributed tracing.
Distributed tracing lets you see the path that a request takes as it travels through your distributed system. By showing the distributed activity through a unified view, you can troubleshoot and understand a complex system better than ever before.
Distributed tracing is available with an APM Pro or equivalent subscription. To see a complete distributed trace, you need to enable the feature on a set of neighboring services. Enabling distributed tracing changes the behavior of some New Relic features, so carefully consult the transition guide before you enable this feature.
To enable distributed tracing, set
distributed_tracing.enabled
totrue
in yournewrelic.js
file, or setNEW_RELIC_DISTRIBUTED_TRACING_ENABLED
in your environment.Added a warning for too-new versions of Node.js during agent startup.
Appropriately obfuscated SQL statements will now be included in all transaction traces.
Previously, the agent would only include the SQL statements if the corresponding query was sufficiently slow.
Added ability to execute instrumentation functions in the context of the segment the segment descriptor is describing.
All
record*
methods supplied by all instrumentation shim classes now allow for a function to be executed under the context of the segment the record call will produce. This may be done by supplying a function in theinContext
key for the segment descriptor passed to the record method.Reservoirs will now respect setting their size to 0.
New features
- Added full support for Node v10.
- Added instrumentation for
crypto.scrypt
. - Added instrumentation for
fs.realpath.native
. - Added instrumentation for
process.setUncaughtExceptionCaptureCallback
.
Fixes
- Updated tests to use
asyncResource.runInAsyncScope
instead ofemitBefore
andemitAfter
Fixes
- The agent will now properly remerge event data on collection failure.
Previously, the agent wouldn't observe the correct format for remerging, causing undefined events to be pushed into the reservoir.
New features
Feature flags may now be set from environment variables.
Using the naming convention
NEW_RELIC_FEATURE_FLAG_<feature flag name in upper case>
.
Improvements
Transaction events may be harvested in two payloads now.
This change reduces the occurrence of harvests being rejected due to large payloads. Payloads will only be split when they are large (greater than 1/3 the maximum).
Bug fixes
- Updated Hapi v17 instrumentation to wrap
server
export, in addition toServer
.
Improvements
- Replaced
trusted_account_ids
array withtrusted_account_key
. - Added node v10 to the test matrix.
Bug fixes
Added config
utilization
env vars to theBOOLEAN_VARS
set.This ensures that if these boolean config values are set outside of a config file, their values are respected, particularly when they are disabled.
Improvements
Added
nonce
option fornewrelic.getBrowserTimingHeader()
This allows people to pass in a string to be injected as the
nonce
property of the generated script tag. Special thanks to João Vieira (@joaovieira) for contributing this feature!Expose the External segment on the
http
request instance for outbound calls.
Fixes
Added check to mark Hapi
'onPreResponse'
extensions as error handlers.Previously, the agent was unable to mark any Hapi errors as handled, even if they were, resulting in inaccurate reporting. This change assumes that
'onPreResponse'
extensions act as error handlers, so errors are only reported if they persist to the final response.