You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This library enables monitoring of PHP applications powered by Swoole web-server via New Relic products.
Features:
New Relic APM integration
New Relic Browser integration
Demo
Installation
The library is to be installed via Composer as a dependency:
composer require upscale/swoole-newrelic
Usage
Production
Monitoring of requests from start to finish can be activated by adding a few lines of code to the server entry point.
The monitoring instrumentation is by design completely transparent to an application running on the server.
Install the monitoring instrumentation for all requests:
useUpscale\Swoole\Newrelic;
$page = <<<HTML<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Example page</title></head><body> Served by Swoole server</body></html>HTML;
$server = new \Swoole\Http\Server('127.0.0.1', 8080);
$server->on('request', function ($request, $response) use ($page) {
// PHP processing within request boundary...usleep(1000 * rand(100, 300));
// Send response$response->end($page);
// PHP processing outside of request boundary...usleep(1000 * rand(50, 150));
});
// Real user monitoring (RUM)$rum = newNewrelic\Browser(newNewrelic\Browser\TransactionFactory());
$rum->instrument($server);
// Application performnce monitoring (APM)$apm = newNewrelic\Apm(newNewrelic\Apm\TransactionFactory());
$apm->instrument($server);
unset($rum, $apm);
$server->start();
APM can be standalone or used in conjunction with the real user monitoring. RUM must be instrumented first.
Browser instrumentation is applied to non-AJAX requests having text/html response MIME type (the default).
Development
Having to install the New Relic PHP extension locally may be inconvenient and outright undesirable for developers.
The workaround is to replace the New Relic reporting functionality with the "stub" implementation doing nothing: