Bug Fixes
- Transaction globals are now cleanly separated from request globals. This fixes crashes related to the initialization of multiple transactions during one request (mostly triggered by
newrelic_set_appname()
).
New Features
- Support Laravel's handling of CORS HTTP OPTIONS.
Requests for Laravel's built-in automatic handling of CORS HTTP OPTIONS requests will now be given the transaction name_CORS_OPTIONS
.
Bug Fixes
- A potential segfault when using PHP 7.3, opcache and multiple PHP workers has been fixed.
- Uncaught exceptions within a job being executed by a Laravel Queue worker are now reported correctly.
- Invoking
function_exists()
on a function disabled with thedisable_functions
configuration directive will now correctly returnfalse
.
New Features
- Added support for PHP 7.3.
Keeping up with the latest and greatest from the PHP Core team, the New Relic PHP Agent now supports PHP 7.3. - Distributed Tracing Improvements!
The PHP Agent's Distributed Tracing support (introduced in version 8.4 of the PHP Agent) now includes the `http.method` attributes for External spans. - Up to date PHPUnit support.
The PHP Agent now supports automatic creation of custom events for PHPUnit 6, PHPUnit 7, and PHPUnit 8.
New Features
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, two parameters should be changed in the newrelic.ini file:
newrelic.distributed_tracing_enabled = trueand
newrelic.transaction_tracer.threshold = 0
Bug Fixes
- A bug in the PHP agent resulted in databaseCallCount attributes no longer being attached to Transaction events. The 8.4 release restores these attributes.
- Predis 2 cluster connections could not be instrumented due to internal changes in Predis. The 8.4 release fixes this.
Bug Fixes
- In rare cases, during a reset of the apache web server, the agent and mod_php would hang with 100% CPU utilization. This has been fixed.
Bug Fixes
- Fixed an entire category of bugs where a Drupal hook whose hook name matched its module name resulted in the generation of empty metric names.
Operating Systems Support
- This release of the PHP Agent removes support for the Solaris operating system. For Solaris support, please install agent version 8.1 or prior.
Upgrade Notices
- The PHP Agent API call
newrelic_set_appname
has been updated with security improvements in anticipation of future releases.
Upgrade Notices
- The
newrelic.daemon.ssl
ini setting has been removed to increase security. Transport Layer Security (TLS) will now always be used in communication with the New Relic collector. - Laravel Queue support has now been enabled for all users. If
newrelic.feature_flag=laravel_queue
is set, it will now be ignored.
Bug Fixes
- On FreeBSD and Solaris, when
newrelic.daemon.port
is configured to use TCP to connect the agent to the daemon, the agent would have difficulty receiving application configuration data from the daemon due to the default timeout of 100 milliseconds matching the delay enforced by the FreeBSD kernel as part of its implementation of Nagle's algorithm. The PHP agent will now set theTCP_NODELAY
flag when connecting to the daemon via TCP, which increases the reliability of the agent:daemon connection.
New Features
- Support for PHP 7.2 has been added.
Bug Fixes
- Datastore metrics would not be generated for Predis users who stopped and started the transaction after instantiating a
Predis\Client
object. This included users using thenewrelic_set_appname()
API. This has been fixed.
New Features
Internal functions can now be instrumented by enabling the
newrelic.transaction_tracer.internal_functions_enabled
configuration setting. When enabled, internal functions will appear in transaction traces like PHP functions.Note that enabling this option may result in transactions being slower, especially when collecting many traces from PHP 5.x. Enabling this option is only recommended when specifically debugging performance issues where an internal function is suspected to be slow.
Bug Fixes
- In some cases, Magento 2's UI Component JSON data sources return with an (incorrect)
Content-Type
oftext/html
. This resulted in auto instrumentation insertions into JSON data that contained a<head>
string. We now identify these specific JSON data sources and ensure the auto instrumentation is not inserted into this JSON data. - On PHP 7, using
file_get_contents()
to get a HTTP URL in a function which also read from$http_response_header
resulted in the external call not being linked correctly in the APM UI: the external call would appear in transaction traces without a link to the receiving application. This has been fixed. - Using
curl_setopt_array()
to set options on a cURL handle could result in cross application tracing failing. This has been fixed. - When generating explain plans for queries issued with MySQLi, the PHP agent could bind parameters from the wrong query if the PHP object ID had been reused internally. This has been fixed.
- Due to a change in Laravel 5.5's router API, the PHP agent would crash when automatically naming a Laravel transaction. This has been fixed.
- On PHP 7, when naming transactions for the Laravel 5 framework, well-formed transaction names were being replaced by the too-generic
$METHOD/index.php
. This has been fixed. - Invoking
newrelic_record_datastore_segment()
before the PHP agent had connected to New Relic would result in the query callback silently failing to execute. This has been fixed; the callback will always be invoked provided parameters of the correct type are given to the function, otherwise anE_WARNING
will be generated.