bushlanov-dev / laravel-prometheus-exporter
Laravel and Lumen prometheus exporter
Installs: 5
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: ^8.1 || ^8.2 || ^8.3 || ^8.4
- guzzlehttp/guzzle: ^7.2
- illuminate/routing: ^9.0 || ^10.0 || ^11.0
- illuminate/support: ^9.0 || ^10.0 || ^11.0
- promphp/prometheus_client_php: ^2.13
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.65
- laravel/lumen-framework: ^9.0 || ^10.0 || ^11.0
- mockery/mockery: ^1.6.12
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^10.5
- roave/security-advisories: dev-latest
README
A prometheus exporter for the Laravel and the Lumen.
This package is a wrapper bridging promphp/prometheus_client_php
Installation
composer require bushlanov-dev/laravel-prometheus-exporter
Laravel
Laravel 11+ register the service provider in bootstrap/providers.php
:
return [ // ... BushlanovDev\LaravelPrometheusExporter\Providers\PrometheusServiceProvider::class, ];
Old versions of laravel register the service provider in config/app.php
:
'providers' => [ // ... BushlanovDev\LaravelPrometheusExporter\Providers\PrometheusServiceProvider::class, ];
Laravel 11+ register the middleware in bootstrap/app.php
:
// ... ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'prometheus' => BushlanovDev\LaravelPrometheusExporter\Middleware\PrometheusLaravelMiddleware::class, ]); })
Old versions of laravel register the middleware in app/Http/Kernel.php
:
protected $routeMiddleware = [ // ... 'prometheus' => BushlanovDev\LaravelPrometheusExporter\Middleware\PrometheusLaravelMiddleware::class, ];
Register metrics route routes/web.php
:
Route::get('metrics', [BushlanovDev\LaravelPrometheusExporter\Controllers\LaravelMetricsController::class, 'metrics']);
Add middleware to routes. It is advisable to give names to all routes:
Route::get('/', function () { // ... })->middleware('prometheus')->name('route_name');
Lumen
Register the service provider and middleware in bootstrap/app.php
:
$app->register(BushlanovDev\LaravelPrometheusExporter\Providers\PrometheusServiceProvider::class);
$app->routeMiddleware([ 'prometheus' => BushlanovDev\LaravelPrometheusExporter\Middleware\PrometheusLumenMiddleware::class, ]);
Register metrics route:
$app->router->group(['namespace' => '\BushlanovDev\LaravelPrometheusExporter\Controllers'], function ($router) { $router->get('metrics', ['as' => 'metrics', 'uses'=> 'LumenMetricsController' . '@metrics']); });
Add middleware to routes. It is advisable to give names to all routes:
$router->get('/', ['middleware' => 'prometheus', 'as' => 'route_name', function () use ($router) {/*...*/}]);
Guzzle metrics
To observe Guzzle metrics, you should register the following provider:
BushlanovDev\LaravelPrometheusExporter\Providers\GuzzleServiceProvider::class
And register the middleware for Http facade or Guzzle client:
Http::globalMiddleware(function ($handler) { return $this->app['prometheus.guzzle.middleware']($handler); }); $this->app->alias('prometheus.guzzle.client', Client::class);
Configuration
The package has a default configuration which uses the following environment variables.
PROMETHEUS_NAMESPACE=app
PROMETHEUS_STORAGE_ADAPTER=redis
PROMETHEUS_REDIS_HOST=localhost
PROMETHEUS_REDIS_PORT=6379
PROMETHEUS_REDIS_DATABASE=0
PROMETHEUS_REDIS_TIMEOUT=0.1
PROMETHEUS_REDIS_READ_TIMEOUT=10
PROMETHEUS_REDIS_PERSISTENT_CONNECTIONS=0
PROMETHEUS_REDIS_PREFIX=PROMETHEUS_
To customize the configuration file, publish the package configuration using Artisan:
php artisan vendor:publish --provider="BushlanovDev\LaravelPrometheusExporter\Providers\PrometheusServiceProvider"
Protect metrics endpoint
If you need to prevent others from accessing your /metrics routes, you can enable the corresponding setting. Currently, only basic_auth is supported to secure your metrics endpoint.
PROMETHEUS_ROUTE_AUTH_ENABLED=true
PROMETHEUS_ROUTE_AUTH_USERNAME=username
PROMETHEUS_ROUTE_AUTH_PASSWORD=password