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.
New Features
- A new API function for timing datastore functions that the PHP agent doesn't natively instrument has been added:
newrelic_record_datastore_segment()
. Documentation and usage examples can be found on the New Relic Documentation site. - The agent now collects additional metadata when running within AWS, GCP, Azure, and PCF. This information is used to provide an enhanced experience when the agent is deployed on those platforms.
Bug Fixes
- On Laravel 5.4, previous versions of the PHP agent named transactions handled by routes without explicit names based on the request method and front controller name, instead of using the route URI as with other versions of Laravel. This has been fixed, and automatic transaction names are once again consistent across all Laravel versions.
- 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.
Bug Fixes
- On the first request served by a PHP process, a Drupal 6 or 7 hook that was invoked with
module_invoke()
before it had been invoked bymodule_invoke_all()
could have its module name reported as an empty string. This has been fixed. - On PHP 7.0 and 7.1, a Drupal 6 or 7 hook invoked via
module_invoke_all()
could report the module name as an empty string in some situations. This has been fixed.
Bug Fixes
- Users of Guzzle 4 or 5 may have seen crashes in version 7.3.0 of the PHP agent due to a bug in the agent's request shutdown instrumentation for that library. This has been fixed.
Upgrade Notices
Laravel Queue instrumentation has been updated to better interoperate with other New Relic APM features. It is possible that messages sent from PHP installs running version 7.3 (or later) of the PHP agent may not be correctly linked to the message queue worker transaction if the worker is running with version 7.2 or earlier of the PHP agent.
If you use the Laravel Queue instrumentation, we recommend ensuring that all agents used to produce and consume messages are upgraded to version 7.3 simultaneously to avoid unexpected service map issues.
Bug Fixes
- Compatibility with extensions that install opcode handlers on PHP 7 has been improved, most notably with uopz. While we still do not recommend using other extensions that hook deeply into PHP (such as uopz, runkit, or xdebug) with the New Relic PHP agent, this change should result in improved functionality.
- A potential segfault when using Predis in a session handler invoked at request shutdown has been fixed.
- External requests issued using Guzzle 6 are now properly instrumented when the
GuzzleHttp\Client
class has been extended.
Upgrade Notices
Users of the
newrelic-php5
Debian package with PHP 5.2: due to discontinued support of PHP 5.2, upgrading to version 7.x of the PHP agent may result in your applications no longer reporting to New Relic. We advise that you upgrade to a supported version of PHP.If upgrading PHP is not possible, you can use
apt-get
anddpkg
to install version 6.9 of the PHP agent and then hold that installed version by running these commands as root:apt-get updateapt-get upgrade newrelic-php5-common=6.9.0.182 newrelic-daemon=6.9.0.182 newrelic-php5=6.9.0.182echo 'newrelic-php5-common hold' | dpkg --set-selections
Bug Fixes
- Automatic transaction naming has been fixed for Symfony 1 users who replaced the controller class via
factories.yml
with one that did not callsfFrontWebController::dispatch()
orsfController::forward()
. - Datastore metrics could not be generated for Predis 0.7 and 0.8 in version 7.1 of the PHP agent. This has been fixed.
- The agent would not report
Zend_Http_Client
external calls when the Zend Framework was used directly as a library or indirectly by a framework like Symfony or Magento. This has been fixed.
New Features
Added support for the MongoDB library
The PHP agent now supports the MongoDB userland library, which is the recommended interface to the mongodb extension. Users of this library will see new metrics in the Databases tab, nodes in transaction traces, and breakdown metrics on individual transaction pages.
Database instance information available for Redis, Predis, and MongoDB
Queries and commands issued using the PECL Redis extension, the Predis library, and the MongoDB library now capture instance information. Transaction traces now include the name of the host (including the port or socket) and database that the query was run against.
Collection of host information can be disabled by setting
newrelic.datastore_tracer.instance_reporting.enabled = false
in thenewrelic.ini
. Similarly, the database name can be omitted withnewrelic.datastore_tracer.database_name_reporting.enabled = false
.
Upgrade Notices
- Commands in Predis pipelines are now reported individually, rather than being rolled into a single
pipeline
query.
Bug Fixes
- When using PHP 7.0 or 7.1, calling
curl_setopt()
with theCURLOPT_HTTPHEADER
option and an array with elements that have been accessed by reference (for example, withforeach ($array as $k => &$v)
) would result in the headers used by New Relic to track external calls overwriting other custom headers. This has been fixed.