Métriques Prometheus en Go (Golang) : guide complet
\n\nPrometheus est un système de monitoring open source qui est devenu le standard de facto pour la collecte et l'analyse de métriques dans les architectures modernes de microservices. Dans l'écosystème Go (Golang), la bibliothèque prometheus/client_golang fournit une boîte à outils puissante et flexible pour instrumenter les applications. Dans cet article, nous allons détailler comment ajouter des métriques Prometheus à votre application Go, configurer des endpoints HTTP et créer vos propres types de métriques.
Installation et configuration
\n\nPour commencer, vous devez installer le client officiel Prometheus pour Go :
\n\ngo get github.com/prometheus/client_golang/prometheus\ngo get github.com/prometheus/client_golang/prometheus/promhttp\n\n\nLa première bibliothèque fournit le noyau pour créer et enregistrer des métriques, la seconde fournit un gestionnaire HTTP prêt à l'emploi pour l'endpoint /metrics.
Types de métriques de base de Prometheus
\n\nPrometheus prend en charge quatre types principaux de métriques, chacun étant conçu pour résoudre des problèmes spécifiques :
\n\n- \n
- Counter (compteur) — une valeur qui augmente de manière monotone. Idéal pour compter le nombre de requêtes, d'erreurs, de tâches effectuées. \n
- Gauge (jauge) — une valeur qui peut à la fois augmenter et diminuer. Utilisée pour la température actuelle, le nombre de connexions actives, la taille de la file d'attente. \n
- Histogram (histogramme) — collecte des observations (par exemple, le temps d'exécution d'une requête) et les regroupe dans des "seaux" (buckets) configurables. Permet de calculer des quantiles. \n
- Summary (résumé) — similaire à un histogramme, mais calcule les quantiles côté application. Recommandé lorsque les quantiles sont critiques pour la logique métier. \n
Exemple pratique : serveur HTTP avec métriques
\n\nCréons une application web simple qui enregistre le nombre de requêtes, leur durée et le nombre actuel de connexions actives.
\n\npackage main\n\nimport (\n "fmt"\n "net/http"\n "time"\n\n "github.com/prometheus/client_golang/prometheus"\n "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n // Compteur de requêtes avec les labels "method" et "endpoint"\n requestCounter = prometheus.NewCounterVec(\n prometheus.CounterOpts{\n Name: "http_requests_total",\n Help: "Total number of HTTP requests",\n },\n []string{"method", "endpoint"},\n )\n\n // Histogramme pour la durée des requêtes\n requestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "Histogram of request duration in seconds",\n Buckets: prometheus.DefBuckets, // [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]\n },\n []string{"method", "endpoint"},\n )\n\n // Jauge des connexions actives\n activeConnections = prometheus.NewGauge(\n prometheus.GaugeOpts{\n Name: "http_active_connections",\n Help: "Current number of active connections",\n },\n )\n)\n\nfunc init() {\n // Enregistrons les métriques dans le registre Prometheus\n prometheus.MustRegister(requestCounter)\n prometheus.MustRegister(requestDuration)\n prometheus.MustRegister(activeConnections)\n}\n\n// middleware enveloppe chaque requête HTTP pour collecter les métriques\nfunc metricsMiddleware(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n // Augmentons le compteur de connexions actives\n activeConnections.Inc()\n defer activeConnections.Dec()\n\n start := time.Now()\n next.ServeHTTP(w, r)\n duration := time.Since(start).Seconds()\n\n // Enregistrons les métriques de la requête\n requestCounter.WithLabelVal Aussi dans la bibliothèque
Travailler avec les dates en Go (Golang) : bibliothèques time, carbon et now
Jetons JWT en Java : guide complet pour travailler avec les JSON Web Tokens
Intégration des métriques Prometheus en PHP : bibliothèques et exemples