Métriques Prometheus en PHP : guide complet de la bibliothèque promphp/prometheus_client_php
\n\nPrometheus est la norme de facto pour la collecte de métriques dans l'infrastructure DevOps moderne. Si votre application backend est écrite en PHP, vous avez besoin d'un outil capable d'exporter des métriques dans un format compréhensible par le serveur Prometheus. La bibliothèque promphp/prometheus_client_php est la solution la plus mature et la mieux maintenue pour cette tâche. Dans cet article, nous verrons comment installer la bibliothèque, créer des métriques de base (compteurs, histogrammes, Summary) et les exposer sur un endpoint /metrics.
Qu'est-ce que promphp/prometheus_client_php ?
\n\nIl s'agit du client PHP officiel pour Prometheus, développé par la communauté promphp. La bibliothèque prend en charge :
\n- \n
- Quatre types de métriques principaux : Counter (compteur), Gauge (jauge), Histogram (histogramme), Summary (quantiles). \n
- Des adaptateurs de stockage : en mémoire (pour les tests), dans Redis, APCu ou le système de fichiers. \n
- Le formatage de la sortie au format texte Prometheus (text/plain). \n
- La prise en charge des étiquettes (labels) pour les données multidimensionnelles. \n
Installation
\n\nL'installation se fait via Composer. Ouvrez un terminal à la racine de votre projet et exécutez :
\ncomposer require promphp/prometheus_client_php\n\nAprès l'installation, incluez l'autoloader de Composer dans votre script PHP :
\nrequire __DIR__ . '/vendor/autoload.php';\n\nCréation d'un registre de métriques et d'un adaptateur de stockage
\n\nLa première étape consiste à créer un objet Registry (registre) qui contiendra toutes les métriques, et à choisir un adaptateur de stockage. Pour simplifier, utilisons un adaptateur en mémoire (les données ne vivent que pendant une seule requête). Pour la production, on utilise souvent Redis ou APCu.
use Prometheus\\CollectorRegistry;\nuse Prometheus\\Storage\\InMemory;\n\n$registry = new CollectorRegistry(new InMemory());\n\nExemple 1 : Counter — compter le nombre de requêtes
\n\nUn compteur (Counter) est une valeur qui augmente de manière monotone. Idéal pour compter les requêtes HTTP, les erreurs, les accès à la base de données.
\n\n// Récupère ou crée un compteur\n$counter = $registry->getOrRegisterCounter(\n 'my_app', // namespace\n 'http_requests_total', // nom de la métrique\n 'Total number of HTTP requests', // description help\n ['method', 'endpoint'] // étiquettes (labels)\n);\n\n// Incrémente le compteur avec des étiquettes spécifiques\n$counter->incBy(1, ['GET', '/api/users']);\n\nDans la sortie de /metrics, cela ressemblera à ceci :
# HELP my_app_http_requests_total Total number of HTTP requests\n# TYPE my_app_http_requests_total counter\nmy_app_http_requests_total{method="GET",endpoint="/api/users"} 1\n\nExemple 2 : Gauge — valeurs courantes (mémoire, connexions)
\n\nUne Gauge peut aussi bien augmenter que diminuer. Elle est utilisée pour suivre l'état actuel : nombre de connexions actives, mémoire utilisée, file d'attente de tâches.
\n\nuse Prometheus\\Gauge;\n\n$gauge = $registry->getOrRegisterGauge(\n 'my_app',\n 'memory_usage_bytes',\n 'Current memory usage in bytes',\n ['pool']\n);\n\n// Définit une valeur\n$gauge->set(memory_get_usage(true), ['main']);\n// Ou modifie par rapport à la valeur actuelle\n$gauge->inc(1024, ['main']); // +1KB\n$gauge->dec(512, ['main']); // -512B\n\nExemple 3 : Histogram — distribution des valeurs (temps de réponse)
\n\nUn histogramme regroupe les observations dans des compartiments (buckets) prédéfinis. Idéal pour mesurer le temps d'exécution des requêtes ou la taille des réponses.
\n\nuse Prometheus\\Histogram;\n\n$histogram = $registry->getOrRegisterHistogram(\n 'my_app',\n 'http_request_duration_seconds',\n 'Duration of HTTP requests in seconds',\n ['method', 'endpoint'],\n [0.1, 0.5, 1.0, 2.0, 5.0] // buckets Aussi dans la bibliothèque
Mise en cache en Go (Golang) : Redis, mise en cache groupée et en mémoire
Traitement JSON en Kotlin : bibliothèques et exemples d'utilisation
Test en PHP : aperçu des frameworks et outils (PHPUnit, Pest, Codeception)
Bibliothèque standard Go (Golang) : aperçu complet
Swift CLI avec ArgumentParser : création d'outils console puissants