PHP code example of stepovenko / laravel-prometheus

1. Go to this page and download the library: Download stepovenko/laravel-prometheus library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

stepovenko / laravel-prometheus example snippets


use Ensi\LaravelPrometheus\Prometheus;

public function boot(): void
{
    Prometheus::counter('http_requests_count')->labels(['endpoint', 'code']);
    Prometheus::summary('http_requests_duration_seconds', 60, [0.5, 0.95, 0.99]);
}

use Closure;
use Ensi\LaravelPrometheus\Prometheus;
use Illuminate\Support\Facades\Route;

public function handle($request, Closure $next)
{
    $startTime = microtime(true);
    $response = $next($request);

    Prometheus::update('http_requests_count', 1, [Route::current()?->uri, $response->status()]);
    Prometheus::update('http_requests_duration_seconds', microtime(true) - $startTime);

    return $response;
}

return [
    'default_bag' => 'default',
    'enabled' => env('PROMETHEUS_ENABLED', true),
    'app_name' => env('PROMETHEUS_APP_NAME', env('APP_NAME')),
    'bags' => [
        'default' => [
            'namespace' => env('PROMETHEUS_NAMESPACE', 'app'),
            'route' => 'metrics',
            'basic_auth' => [
                'login' => env('PROMETHEUS_AUTH_LOGIN'),
                'password' => env('PROMETHEUS_AUTH_PASSWORD'),
            ],
            'connection' => [
                'connection' => 'default',
                'bag' => 'default',
            ],
            'label_middlewares' => [
                \Ensi\LaravelPrometheus\LabelMiddlewares\AppNameLabelMiddleware::class,
            ],
            'on_demand_metrics' => [
                \Ensi\LaravelPrometheus\OnDemandMetrics\MemoryUsageOnDemandMetric::class,
            ],
        ],
    ],
];

Prometheus::bag('business')
    ->counter('orders_count')
    ->labels(['delivery_type', 'payment_method']);

Prometheus::bag('business')
    ->update('orders_count', 1, [$order->delivery_type, $order->payment_method]);

use Ensi\LaravelPrometheus\LabelMiddlewares\LabelMiddleware;

class TenantLabelMiddleware implements LabelMiddleware
{
    public function labels(): array
    {
        return ['tenant'];
    }

    public function values(): array
    {
        return [Tenant::current()->id];
    }
}

'label_middlewares' => [
    \App\System\TenantLabelMiddleware::class,
],

use Ensi\LaravelPrometheus\MetricsBag;
use Ensi\LaravelPrometheus\OnDemandMetrics\OnDemandMetric;
use Illuminate\Support\Facades\Queue;

class QueueLengthOnDemandMetric extends OnDemandMetric
{
    public function register(MetricsBag $metricsBag): void
    {
        $metricsBag->gauge('queue_length');
    }

    public function update(MetricsBag $metricsBag): void
    {
        $metricsBag->update('queue_length', Queue::size());
    }
}
bash
php artisan vendor:publish --tag=prometheus-config