New Relic APM reports for WordPress.
WP New Relic (WPNR) is designed to be used with the New Relic APM, and uses the New Relic PHP Agent API to augment existing metrics with valuable WordPress details such as templates, users, request type, and Transaction names. This plugin is tested with New Relic's PHP Agent version 10.19.0.9. Data collected by this plugin can be queried in New Relic's Insights product, using New Relic Query Language (NRQL).
New Relic is a trademark of New Relic, Inc.
After activating the plugin, You will see a new option named New Relic under the Tools menu in your WordPress Dashboard. If you are running WordPress in Network Mode, the settings page will be found in your Network Dashboard.
If the Capture URLs setting is enabled, the plugin will capture URL parameters for displaying in Transaction traces. As an example, turning on this feature will store a URL like http://example.com/?p=1234, while leaving it off will result in the URL being stored as http://example.com/. This feature can be useful for debugging or providing granular data if required. In certain cases, however, it can cause confusion by creating a "false positive" appearance of multiple URLs (e.g. UTM codes or tracking info from social media).
By default the plugin will setup 3 New Relic configuration parameters:
- newrelic.appname
- newrelic.capture_params
- newrelic.framework (default value is 'wordpress')
appname and capture_params config can be overridden using the wp_nr_config filter. The wp_nr_setup_config action hook can also be used to setup any extra config.
Certain useful custom attributes (you can think of these as 'post meta for New Relic') will be set for each event and can provide additional information related to your WordPress installation. You can query events and filter them using these attributes in New Relic Insights. See the NRQL reference for more details on how to query events.
The user attribute is set using newrelic_set_user_attributes. If the user is logged in, the user ID will be set as the user attribute and if not the user attribute will be set to not-logged-in
.
Ex: In New Relic Insights you can query Transactions for non-logged in users as
SELECT * FROM Transaction WHERE appName = '{appName}' AND user = 'not-logged-in'
For single posts, the post ID will be set via the post_id
custom attribute.
Ex: Get all Transactions for a post with ID 190.
SELECT * FROM Transaction WHERE appName = '{appName}' AND post_id = '190'
You can also perform more complex queries, such as counting the number of views for a post. This can be helpful for determining top content on your site.
SELECT count(*) FROM Transaction WHERE appName = '{appName}' AND post_id = '190'
For each request, the Template being used is set as the template
custom attribute.
Ex: You can query all Transactions for a particular template.
SELECT * FROM Transaction WHERE appName = '{appName}' AND template = '{Absolute Template Path}'
The current theme is set as the theme
custom attribute.
Ex: Query all Transactions running the "Twenty Fifteen" theme.
SELECT * FROM Transaction WHERE appName = '{appName}' AND theme = 'Twenty Fifteen'
There can be 3 type of requests: web, ajax and cli. The current request type is set as the request_type
custom attribute.
The request type can be overridden using the wp_nr_request_type filter.
Ex: Get all Transactions for the "ajax" request type
SELECT * FROM Transaction WHERE appName = '{appName}' AND request_type = 'ajax'
The Transaction name is set based on the main WP_Query parameters using newrelic_name_transaction. Possible values are Default Home Page, Front Page, Blog Page, Network Dashboard, Dashboard, Single - {post_type}, Page - {pagename}, Date Archive, Search Page, Feed, Archive - {post_type}, Category - {cat_name}, Tag - {tag_name}, Tax - {taxonomy} - {term}
Using the wp_nr_log_errors function, any plugin/theme can log errors/notices to New Relic for the current Transaction. Note: This function can be called more than once, but only the last call will log the error to New Relic. This is a known limitation of the PHP Agent API. As a reminder, since the PHP Agent runs only when PHP does, any cached requests will not appear in your error logs.
wp_nr_log_errors( 'Error message', Exception $exception );
This plugin also tracks the runtime of gearman async tasks. A Gearman async task run for a particular hook and its runtime can be tracked using the โwp_async_task-{hook}โ custom attribute and queried in New Relic Insights.
(Transactions in New Relic APM)
(New Relic Insights query for a single post)
(Total post view counts for a single post using post_id custom parameter)
(Get Template used and Transactions whose database duration is more than 0.1)
PHP version 7.3.3 is known to cause issues with this plugin, updating to 7.3.11 or greater appears to resolve these issues. For more details, see issue#39.
If you identify any errors or have an idea for improving the plugin, please open an issue. We're excited to see what the community thinks of this project, and we would love your input!
Stable: 10up is not planning to develop any new features for this, but will still respond to bug reports and security concerns. We welcome PRs, but any that include new features should be small and easy to integrate and should not include breaking changes. We otherwise intend to keep this tested up to the most recent version of WordPress.