Skip to content

zlodes/php-prometheus-client-laravel

Repository files navigation

PHP Prometheus Exporter for Laravel

codecov

This is a Laravel adapter/bridge package for zlodes/prometheus-exporter.

Now supports only Counter and Gauge metric types.

Warning This package is still in development. Use it on your own risk until 1.0.0 release.

First steps

Installation

composer require zlodes/prometheus-exporter-laravel

Register a route for the metrics controller

Your application is responsible for metrics route registration. There is a ready to use controller. You can configure groups, middleware or prefixes as you want.

Example:

use Illuminate\Support\Facades\Route;
use Zlodes\PrometheusExporter\Laravel\Http\MetricsExporterController;

Route::get('/metrics', MetricsExporterController::class);

Configure a Storage for metrics [optional]

By-default, it uses RedisStorage. If you want to use other storage, you can do it easily following these three steps:

  1. Create a class implements Storage interface.
  2. Publish a config:
    php artisan vendor:publish --tag=prometheus-exporter
  3. Set your storage class in the config.

Metrics registration

In your ServiceProvider::register:

$this->callAfterResolving(Registry::class, static function (Registry $registry): void {
   $registry
       ->registerMetric(
           new Counter('dummy_controller_hits', 'Dummy controller hits count')
       )
       ->registerMetric(
           new Gauge('laravel_queue_size', 'Laravel queue length by Queue')
       );
});

Metrics Collector usage

You can work with your metrics whenever you want. Just use Collector:

use Zlodes\PrometheusExporter\Collector\CollectorFactory;

class DummyController
{
    public function __invoke(CollectorFactory $collector)
    {
         $collector->counter('dummy_controller_hits')->increment();
    }
}

Schedulable collectors

At times, there may be a need to gather metrics on a scheduled basis. The package offers a feature to register a SchedulableCollector that executes every minute using the Laravel Scheduler.

You can define your SchedulableCollectors using a config or register it in SchedulableCollectorRegistry directly in a ServiceProvider:

$this->callAfterResolving(
   SchedulableCollectorRegistry::class,
   static function (SchedulableCollectorRegistry $schedulableCollectorRegistry): void {
       $schedulableCollectorRegistry->push(YourSchedulableCollector::class);
   }
);

Note For further details, see zlodes/prometheus-exporter

Available console commands

Command Description
php artisan metrics:list Lists all registered metrics
php artisan metrics:clear Clears metrics storage
metrics:collect-scheduled Runs ScheduledCollectors. Using by Scheduler

Roadmap

  • Scheduled Collectors by config
  • Document Scheduled collectors
  • Ability to disable Scheduled tasks
  • Configure Semantic Release for GitHub Actions

Testing

Run tests

php ./vendor/bin/phpunit

About

Laravel adapter for zlodes/php-prometheus-client

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages