PHP code example of iamfarhad / laravel-prometheus
1. Go to this page and download the library: Download iamfarhad/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/ */
iamfarhad / laravel-prometheus example snippets
->withMiddleware(function (Middleware $middleware) {
// Easy one-liner for HTTP metrics - automatically checks if enabled
\Iamfarhad\Prometheus\Support\PrometheusMiddlewareHelper::register($middleware);
})
// Monitor only critical API endpoints
Route::get('/api/orders', [OrderController::class, 'index'])
->middleware(\Iamfarhad\Prometheus\Http\Middleware\PrometheusMetricsMiddleware::class);
Route::post('/api/payments', [PaymentController::class, 'process'])
->middleware(\Iamfarhad\Prometheus\Http\Middleware\PrometheusMetricsMiddleware::class);
// In bootstrap/app.php - register middleware alias
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'prometheus' => \Iamfarhad\Prometheus\Http\Middleware\PrometheusMetricsMiddleware::class,
]);
})
// In routes/api.php - use the alias
Route::middleware(['prometheus'])->group(function () {
Route::apiResource('users', UserController::class);
Route::apiResource('orders', OrderController::class);
});
namespace App\Http\Controllers;
use Iamfarhad\Prometheus\Http\Middleware\PrometheusMetricsMiddleware;
class ApiController extends Controller
{
public function __construct()
{
// Apply metrics to all methods in this controller
$this->middleware(PrometheusMetricsMiddleware::class);
}
}
// Monitor only in production or specific environments
Route::middleware(app()->environment('production')
? [\Iamfarhad\Prometheus\Http\Middleware\PrometheusMetricsMiddleware::class]
: []
)->group(function () {
Route::apiResource('analytics', AnalyticsController::class);
});
use Iamfarhad\Prometheus\Facades\Prometheus;
// Register and use a counter
$counter = Prometheus::getOrRegisterCounter('orders_total', 'Total number of orders', ['status']);
$counter->inc(['completed']);
// Register and use a histogram for response times
$histogram = Prometheus::getOrRegisterHistogram(
'api_response_time',
'API response time in seconds',
['endpoint', 'method'],
[0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0] // Industry-standard buckets
);
$histogram->observe(0.45, ['api/users', 'GET']);
// Register and use a summary for percentile tracking
$summary = Prometheus::getOrRegisterSummary(
'request_size_bytes',
'Request size summary with quantiles',
['content_type'],
600, // 10 minutes max age
[0.5, 0.95, 0.99, 0.999] // p50, p95, p99, p99.9
);
$summary->observe(1024, ['application/json']);
namespace App\Http\Controllers;
use Iamfarhad\Prometheus\Facades\Prometheus;
use Illuminate\Http\Request;
class ApiController extends Controller
{
public function createOrder(Request $request)
{
$startTime = microtime(true);
try {
$order = Order::create($request->validated());
// Record success metrics
Prometheus::getOrRegisterCounter('orders_created_total', 'Orders created', ['status'])
->inc(['success']);
// Record processing time
Prometheus::getOrRegisterHistogram('order_processing_time', 'Order processing duration', ['type'])
->observe(microtime(true) - $startTime, ['express']);
return response()->json($order, 201);
} catch (\Exception $e) {
// Record error metrics
Prometheus::getOrRegisterCounter('orders_created_total', 'Orders created', ['status'])
->inc(['error']);
throw $e;
}
}
}
// Reduce Summary max age for high-traffic applications
'summary_max_age' => 300, // 5 minutes instead of 10
// Use fewer quantiles for less critical metrics
'summary_quantiles' => [0.5, 0.95], // Instead of [0.5, 0.95, 0.99, 0.999]