ext-elastic_apm is in development mode that pushes breaking changes now and then. Also discouraged to use in a production environment. Thus this project will unmaintained till the stability of the dependency gets resolved. Feel free to fork and change accordingly. Or use any available alternative
- The package depends on elastic's apm-agent-php extension.
- php
^7.2 - If want to use with Laravel, Laravel version >=
6.x.
To install the package with composer, run:
composer require anik/elastic-apm-phpUse the appropriate version while installing if you want any specific version. Above command will install the latest available version.
- This package uses Laravel's auto discovery feature. But, if you still want to install, then
- Add
Anik\ElasticApm\Providers\ElasticApmServiceProvider::classin yourconfig/app.php's providers array. - Add
Anik\ElasticApm\Facades\Agent::classin yourconfig/app.php's facade array. php artisan vendor:publishand select the provider to publish the config file in your config directory. It'll copyelastic-apm.phpin your config directory.
- Add
- To install this package with your lumen, you don't need to enable Facade.
- Register the service provider in your
bootstrap/app.phpwith$app->register(Anik\ElasticApm\Providers\ElasticApmServiceProvider::class); - Copy the
elastic-apm.phpfromvendor/anik/elastic-apm-php/src/config/elastic-apm.phpin yourconfig/app.phpfile if you want to change the configuration. - Register the copied config file
$app->configure('elastic-apm')in yourbootstrap/app.php
If you want to keep the records of Errors, then
- For Laravel, in your
bootstrap/app.php,
// COMMENT THIS SECTION
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);// USE THIS SECTION FOR LARAVEL <= 7
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
return new Anik\ElasticApm\Exceptions\Handler(new App\Exceptions\Handler($app), [
// NotFoundHttpException::class, // (1)
// ConnectException::class, // (2)
]);
});// USE THIS SECTION FOR LARAVEL >= 8
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
return new Anik\ElasticApm\Exceptions\HandlerThrowable(new App\Exceptions\Handler($app), [
// NotFoundHttpException::class, // (1)
// ConnectException::class, // (2)
]);
});- For Lumen, in your
bootstrap/app.php,
// COMMENT THIS SECTION
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);// USE THIS SECTION FOR LUMEN <= 7
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
return new Anik\ElasticApm\Exceptions\Handler(new App\Exceptions\Handler(), [
// NotFoundHttpException::class, // (1)
// ConnectException::class, // (2)
]);
});// USE THIS SECTION FOR LUMEN >= 8
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
return new Anik\ElasticApm\Exceptions\HandlerThrowable(new App\Exceptions\Handler(), [
// NotFoundHttpException::class, // (1)
// ConnectException::class, // (2)
]);
});If you want to keep the records of Request received and served by your application,
- For Laravel, in your
App\Http\Kernel's middleware, addAnik\ElasticApm\Middleware\RecordForegroundTransactionclass.
<?php
class Kernel extends HttpKernel {
protected $middleware = [
// ...
\Anik\ElasticApm\Middleware\RecordForegroundTransaction::class,
// ..
];
}- For Lumen, in your
bootstrap/app.phpfile, addAnik\ElasticApm\Middleware\RecordForegroundTransactionclass.
$app->middleware([
// ...
\Anik\ElasticApm\Middleware\RecordForegroundTransaction::class,
// ...
]);For both the Laravel & Lumen, you'll have to add Anik\ElasticApm\Middleware\RecordBackgroundTransaction class as your Job's middleware.
To track the HTTP calls, you'll need to use Guzzle. You can pass the RecordHttpTransaction class as your Guzzle's handler stack. It'll then record HTTP calls as well.
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push(new \Anik\ElasticApm\Middleware\RecordHttpTransaction(), 'whatever-you-wish');
$client = new \GuzzleHttp\Client([
'base_uri' => 'http://httpbin.org',
'timeout' => 10.0,
'handler' => $stack,
]);
$client->request('GET', '/');Please check the given URL in the project description to get a thorough view of what you can do with it. And how to customize it.
If you find any bug and update, please make sure you send a PR. PRs are always appreciated.