Métriques Prometheus en Go : création et exportation de métriques en Golang

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Métriques Prometheus en Go (Golang) : guide complet



Prometheus est un puissant système de surveillance et d'alerte open source, devenu le standard de facto dans le monde des applications cloud. Pour le langage Go (Golang), il existe un client officiel prometheus/client_golang qui permet d'ajouter facilement des métriques à votre application. Dans cet article, nous allons détailler comment installer la bibliothèque, créer les principaux types de métriques (counter, gauge, histogram) et les exporter via HTTP.



1. Installation de la bibliothèque



Pour travailler avec Prometheus en Go, vous devez installer le paquet prometheus/client_golang. Exécutez la commande :



go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promhttp


Le premier paquet contient les types de métriques de base, le second contient le gestionnaire HTTP pour exporter les métriques dans un format compréhensible par le serveur Prometheus.



2. Types de métriques principaux



Prometheus prend en charge quatre types de métriques principaux. Examinons les trois plus populaires :



  • Counter — un compteur qui ne fait qu'augmenter (par exemple, le nombre de requêtes).
  • Gauge — une valeur qui peut à la fois augmenter et diminuer (par exemple, le nombre de connexions actives).
  • Histogram — un histogramme qui mesure la distribution des valeurs (par exemple, le temps de réponse).


3. Exemple : Counter (compteur de requêtes)



Créons un simple serveur HTTP qui compte le nombre de requêtes traitées :



package main

import ( "fmt" "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp")

var ( requestsTotal = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, ))

func init() { prometheus.MustRegister(requestsTotal)}

func handler(w http.ResponseWriter, r *http.Request) { requestsTotal.Inc() fmt.Fprintf(w, "Hello, you are visitor #%d", requestsTotal)}

func main() { http.HandleFunc("/", handler) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


Dans cet exemple :

  • prometheus.NewCounter crée un compteur nommé http_requests_total.
  • prometheus.MustRegister enregistre la métrique dans le registre global.
  • requestsTotal.Inc() incrémente le compteur de 1 à chaque requête.
  • promhttp.Handler() exporte toutes les métriques enregistrées à l'adresse /metrics.


4. Exemple : Gauge (connexions actives)



Gauge est idéal pour suivre l'état actuel, par exemple le nombre de goroutines actives :



var (    activeGoroutines = prometheus.NewGauge(        prometheus.GaugeOpts{            Name: "active_goroutines",            Help: "Current number of active goroutines.",        },    ))

func monitorGoroutines() { for { activeGoroutines.Set(float64(runtime.NumGoroutine())) time.Sleep(5 * time.Second) }}

func main() { prometheus.MustRegister(activeGoroutines) go monitorGoroutines() // ... reste du code}


Ici, Set() définit la valeur actuelle, tandis que Inc() et Dec() permettent d'augmenter ou de diminuer le gauge d'une unité.



5. Exemple : Histogram (temps de réponse)



Histogram collecte des observations et les répartit dans des segments (buckets) configurables :



var (    requestDuration = prometheus.NewHistogram(        prometheus.HistogramOpts{            Name:    "http_request_duration_seconds",            Help:    "Histogr                    

Recommendations