cryptoman3 / elastic-apm-php
elastic/apm-agent-php wrapper to push PHP application transactions to APM Server
Installs: 82
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 8
pkg:composer/cryptoman3/elastic-apm-php
Requires
- php: ^7|^8
- ext-elastic_apm: *
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
This package is not auto-updated.
Last update: 2025-10-22 05:12:23 UTC
README
⚠️ WARNING: The package dependency 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
Requirements
- The package depends on elastic's apm-agent-php extension.
- php
^7.2 - If want to use with Laravel, Laravel version >=
6.x.
Installation
To install the package with composer, run:
composer require cryptoman3/elastic-apm-php
Use the appropriate version while installing if you want any specific version. Above command will install the latest available version.
Laravel
- 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
Lumen
- 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
Usage
Error Tracking
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) ]); });
Request Response Tracking
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, // ... ]);
Background Job Tracking
For both the Laravel & Lumen, you'll have to add Anik\ElasticApm\Middleware\RecordBackgroundTransaction class as your Job's middleware.
HTTP Call tracking
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', '/');
Documentation
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.
PRs?
If you find any bug and update, please make sure you send a PR. PRs are always appreciated.