Surveillance des applications Go : métriques et alertes

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

Introduction : pourquoi la surveillance est cruciale pour les applications Go

Go (Golang) a gagné en popularité dans le développement de microservices à forte charge, de passerelles API et d'utilitaires réseau grâce à ses performances et sa simplicité. Cependant, même l'application la plus stable peut rencontrer des fuites mémoire, des blocages de goroutines ou une augmentation soudaine des latences. C'est là que la surveillance entre en jeu — une pratique clé du Site Reliability Engineering (SRE).

Dans cet article, nous allons voir comment configurer la surveillance des applications Go avec la stack Prometheus + Grafana, quelles métriques collecter en priorité et comment configurer des alertes pour prévenir les incidents. Ce contenu sera utile aussi bien aux développeurs Go débutants qu'aux ingénieurs expérimentés souhaitant améliorer l'observabilité de leurs services.

1. Métriques principales d'une application Go

Avant de configurer la surveillance, il est important de comprendre quelles métriques sont essentielles pour un service Go. Elles peuvent être divisées en trois catégories :

1.1. Métriques du runtime Go

Le runtime Go fournit des informations riches sur l'état de l'application. Avec le package runtime et l'exporteur standard expvar, vous pouvez obtenir des données sur :

  • Nombre de goroutines (runtime.NumGoroutine()) — une augmentation brutale indique une fuite de goroutines.
  • Utilisation mémoire (runtime.ReadMemStats()) — surveillez Alloc, HeapInuse et GCStats.
  • Temps de garbage collection — si le GC prend plus de 5% du temps, c'est un signal d'optimisation.
  • Nombre d'appels système — peut indiquer des blocages.

1.2. Métriques métier

Pour comprendre la santé du service, il est nécessaire de surveiller les indicateurs métier :

  • RPS (Requêtes Par Seconde) — nombre de requêtes par seconde.
  • Latence (P50, P95, P99) — délais de traitement des requêtes.
  • Taux d'erreur — pourcentage d'erreurs (5xx, 4xx).
  • Nombre de connexions actives (base de données, API externes).

1.3. Métriques d'infrastructure

N'oubliez pas les métriques système : CPU, mémoire, I/O disque, paquets réseau. Elles aident à distinguer un problème d'application d'un problème d'hôte.

2. Intégration avec Prometheus : export des métriques

Prometheus est le standard de facto pour la collecte de métriques dans le monde Go. Voyons l'intégration étape par étape.

2.1. Installation du client Prometheus pour Go

Ajoutez la dépendance dans votre go.mod :

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

2.2. Création de métriques personnalisées

Exemple de création d'un compteur de requêtes et d'un histogramme pour le temps de réponse :

package main

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

var (
    requestCount = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Total number of HTTP requests",
        },
        []string{"method", "endpoint", "status"},
    )
    requestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name:    "http_request_duration_seconds",
            Help:    "Duration of HTTP requests in seconds",
            Buckets: prometheus.DefBuckets,
        },
        []string{"method", "endpoint"},
    )
)

func init() {
    prometheus.MustRegister(requestCount)
    prometheus.MustRegister(requestDuration)
}

func metricsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        wrapped := &responseWriter{ResponseWriter: w, statusCode: http.Stat                

Blogs

Book Recommendations