Métriques Prometheus en PHP : surveillance des performances des applications
Prometheus est un puissant système de surveillance et d'alerte open source, devenu un standard de facto dans le monde Cloud Native. Pour intégrer Prometheus avec des applications PHP, il existe plusieurs bibliothèques matures. Dans cet article, nous examinons les deux principales : promphp/prometheus_client_php et artisanphpex/prometheus, et montrons comment ajouter des métriques à votre projet PHP.
Pourquoi des métriques en PHP ?
La surveillance des applications PHP permet de suivre :
- Le nombre de requêtes et leur temps d'exécution
- Les erreurs et exceptions
- L'utilisation de la mémoire et du CPU
- L'état des files d'attente et des services externes
- Les métriques métier (nombre de commandes, inscriptions, etc.)
La collecte de ces données aide à identifier rapidement les problèmes, planifier la mise à l'échelle et améliorer l'expérience utilisateur.
Bibliothèque promphp/prometheus_client_php
C'est la bibliothèque la plus populaire et activement maintenue. Elle implémente le client officiel Prometheus pour PHP et prend en charge tous les types de métriques :
- Counter — un compteur qui ne fait qu'augmenter (ex. nombre de requêtes)
- Gauge — une valeur qui peut augmenter ou diminuer (mémoire actuelle, nombre d'utilisateurs actifs)
- Histogram — un histogramme pour mesurer la distribution des valeurs (temps de réponse, taille de requête)
- Summary — une distribution quantile (similaire à Histogram, mais avec calcul des quantiles côté client)
Installation
composer require promphp/prometheus_client_phpExemple d'utilisation
<?phprequire 'vendor/autoload.php';
use Prometheus\\CollectorRegistry;use Prometheus\\Storage\\InMemory;use Prometheus\\RenderTextFormat;
// Créer un stockage (Redis, APC, InMemory possible)$adapter = new InMemory();$registry = new CollectorRegistry($adapter);
// Créer un compteur$counter = $registry->registerCounter( 'app', 'requests_total', 'Total number of HTTP requests', ['method', 'endpoint']);
// Incrémenter à chaque requête$counter->incBy(1, ['GET', '/api/users']);
// Créer un histogramme pour le temps de réponse$histogram = $registry->registerHistogram( 'app', 'response_time_seconds', 'Response time in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5] // buckets);
// Observer le temps d'exécution de la requête$histogram->observe(0.234, ['GET', '/api/users']);
// Restituer les métriques au format Prometheus$renderer = new RenderTextFormat();$result = $renderer->render($registry->getMetricFamilySamples());
header('Content-Type: ' . RenderTextFormat::MIME_TYPE);echo $result;Bibliothèque artisanphpex/prometheus
C'est une alternative plus légère, axée sur la simplicité d'utilisation. Elle prend également en charge Counter, Gauge, Histogram et Summary.
Installation
composer require artisanphpex/prometheusExemple d'utilisation
<?phprequire 'vendor/autoload.php';
use ArtisanPhp\\Prometheus\\CollectorRegistry;use ArtisanPhp\\Prometheus\\Storage\\InMemory;use ArtisanPhp\\Prometheus\\RenderTextFormat;
$adapter = new InMemory();$registry = new CollectorRegistry($adapter);
// Créer un Gauge$gauge = $registry->registerGauge( 'app', 'memory_usage_bytes', 'Current memory usage in bytes', ['process']);
$gauge->set(memory_get_usage(true), ['main']);
// Créer un Summary$summary = $registry->registerSummary( 'app', 'request_duration_milliseconds', 'Request duration in ms', ['method'], 0.95, // quantile 0.01 // error);
$summary->observe(150, ['GET']);
// Sortie m Aussi dans la bibliothèque
NLog C# (.NET) : guide complet avec exemples pratiques
Meilleures bibliothèques de logging pour Go (Golang) : aperçu et comparaison
Apprentissage automatique en Java : aperçu des principales bibliothèques de développement