Contributte Newrelic
# Content
# Setup
Install package
composer require contributte/newrelic
Register extension
extensions:
newrelic: Contributte\NewRelic\DI\NewRelicExtension
2
# Configuration
Basic configuration
newrelic:
enabled: true # true is default
# use false on dev when newrelic extension is not present
appName: YourApplicationName # optional, defaults to "PHP Application"
2
3
4
Full configuration with default values
newrelic:
enabled: true
appName: PHP Application
license: ''
logLevel:
- critical
- exception
- error
rum:
enabled: auto
transactionTracer:
enabled: true
detail: 1
recordSql: obfuscated
slowSql: true
threshold: apdex_f
stackTraceThreshold: 500
explainThreshold: 500
errorCollector:
enabled: true
recordDatabaseErrors: true
parameters:
capture: false
ignored: []
custom:
parameters: []
tracers: []
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Realtime User Monitoring
If config option rum/enabled is set to auto (default), NewRelic extension is handling adding
of monitoring JS on its own. You can disable that behavior setting this option to true or false.
In both cases, auto instrumentation is set off. If set to false, Agent class is returning empty
string when calling getBrowserTimingHeader() and getBrowserTimingFooter() functions.
To specify where these JS should be added, you can either add RUMControlTrait to your
BasePresenter or create components your own way if you want to avoid adding <script> tags.
If rum/enabled is se to false, these controls returns empty string.
<?php
declare(strict_types=1);
use Contributte\NewRelic\RUM\HeaderControl;
use Contributte\NewRelic\RUM\FooterControl;
use Contributte\NewRelic\RUM\RUMControlFactory;
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
/**
* @var RUMControlFactory
* @inject
*/
protected $rumControlFactory;
protected function createComponentNewRelicHeader(): HeaderControl
{
// Adding true avoid adding <script> tags
return $this->rumControlFactory->createHeader(true);
}
protected function createComponentNewRelicFooter(): FooterControl
{
// Adding true avoid adding <script> tags
return $this->rumControlFactory->createFooter(true);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
To your @layout template add newRelicHeader component before </head> tag.
{control newRelicHeader}
To your @layout template add newRelicFooter compenent before </body> tag.
{control newRelicFooter}
# Console
This step is not necessary, but recommended as it will give you a nice formated data even for console commands.
You will need to add contributte/console (opens new window) and contributte/event-dispatcher (opens new window) packages.
composer require contributte/console contributte/event-dispatcher
And register them.
extensions:
events: Contributte\EventDispatcher\DI\EventDispatcherExtension
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
newrelic.console: Contributte\NewRelic\DI\NewRelicConsoleExtension
2
3
4
# Agent
If you want to communicate with NewRelic extension, you can use autowired Agent
class, which wraps all NewRelic extension functions. If config options enabled is set to false,
NewRelic native functions are not called, so it's great for development environments where NewRelic
extension may not be installed.
For example, if you want to add your logged-in user id as custom parameter:
<?php
declare(strict_types=1);
use Contributte\NewRelic\Agent\Agent;
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
/**
* @var Agent
* @inject
*/
private $newRelicAgent;
protected function startup(): void
{
parent::startup();
if ($this->getUser()->isLoggedIn()) {
$this->newRelicAgent->addCustomParameter('userId', $this->getUser()->getId());
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25