Package Data | |
---|---|
Maintainer Username: | BushlanovDev |
Maintainer Contact: | alex@bushlanov.dev (Aleksandr Bushlanov) |
Package Create Date: | 2024-12-01 |
Package Last Update: | 2024-12-10 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2025-01-17 03:06:03 |
Package Statistics | |
---|---|
Total Downloads: | 5 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 0 |
Total Watchers: | 1 |
Total Forks: | 0 |
Total Open Issues: | 0 |
A prometheus exporter for the Laravel and the Lumen.
This package is a wrapper bridging promphp/prometheus_client_php
composer require bushlanov-dev/laravel-prometheus-exporter
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');
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) {/*...*/}]);
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'](https://github.com/BushlanovDev/laravel-prometheus-exporter/blob/master/$handler);
});
$this->app->alias('prometheus.guzzle.client', Client::class);
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"
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