Surveillance des applications Go : métriques et alertes de A à Z
\n\nDans le développement logiciel moderne, la surveillance n'est pas un luxe, mais une nécessité. Pour les applications en Go (Golang), souvent utilisées dans les microservices à forte charge et les projets d'infrastructure, une surveillance correctement configurée permet de détecter les problèmes à temps, d'optimiser les performances et d'assurer un fonctionnement stable. Dans cet article, nous allons voir comment configurer la surveillance des applications Go à partir de zéro : de la collecte des métriques de base à la configuration des alertes et à la visualisation dans Grafana.
\n\nPourquoi la surveillance est-elle importante pour les applications Go ?
\n\nGo est un langage compilé avec un support intégré de la concurrence. Les applications Go fonctionnent souvent dans des systèmes critiques : des passerelles API aux bases de données. Sans surveillance, vous risquez :
\n- \n
- De manquer une fuite mémoire ou de goroutines \n
- De ne pas remarquer une dégradation des performances \n
- De perdre des données à cause d'erreurs non traitées
- De subir des temps d'arrêt par manque de ressources
Une surveillance appropriée vous donne une image complète de la santé de l'application : de l'utilisation du CPU et de la mémoire au temps de réponse et au taux d'erreurs.
\n\nMétriques principales pour la surveillance Go
\n\nAvant de passer aux outils, définissons quelles métriques sont critiques pour les applications Go :
\n\nMétriques système
\n- \n
- CPU usage — charge du processeur
- Memory usage — consommation mémoire (incluant heap et stack)
- Goroutines count — nombre de goroutines actives
- GC stats — statistiques du garbage collector (temps, nombre de cycles)
- Open file descriptors — nombre de descripteurs de fichiers ouverts
Métriques métier
\n- \n
- Request latency — temps de réponse (p50, p95, p99)
- Request rate — nombre de requêtes par seconde
- Error rate — pourcentage d'erreurs
- Database connection pool — état du pool de connexions
Outils pour la surveillance Go
\n\nLa pile standard pour la surveillance des applications Go comprend :
\n- \n
- Prometheus — système de collecte et de stockage des métriques
- Grafana — visualisation et tableaux de bord
- Alertmanager — gestion des alertes
- Bibliothèques client Go — pour l'export des métriques
Configuration de la collecte de métriques en Go avec Prometheus
\n\nCommençons par la pratique. Pour exporter les métriques d'une application Go, nous utiliserons la bibliothèque officielle prometheus/client_golang.
Étape 1 : Installation des dépendances
\ngo get github.com/prometheus/client_golang/prometheus\ngo get github.com/prometheus/client_golang/prometheus/promhttp\n\nÉtape 2 : Serveur HTTP de base avec métriques
\n\npackage main\n\nimport (\n "net/http"\n "github.com/prometheus/client_golang/prometheus"\n "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n httpRequestsTotal = prometheus.NewCounterVec(\n prometheus.CounterOpts{\n Name: "http_requests_total",\n Help: "Total number of HTTP requests",\n },\n []string{"method", "endpoint", "status"},\n )\n\n httpRequestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "Histogram of HTTP request durations",\n Buckets: prometheus.DefBuckets,\n },\n []string{"method", "endpoint"},\n )\n)\n\nfunc init() {\n prometheus.MustRegister(httpRequestsTotal)\n prometheus.MustRegister(httpRequestDuration)\n}\n\nfunc main() {\n http.Handle("/metrics", promhttp.Handler())\n \n http.HandleFunc("/api/users", func(w http.ResponseWrit