Surveillance des applications Go : métriques et alertes avancées

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

Surveillance avancée des applications Go : des métriques aux alertes



Dans le développement moderne avec Go (Golang), la journalisation de base et les Health Checks ne suffisent pas. Pour les systèmes en production, une observabilité approfondie est nécessaire : collecte de métriques personnalisées, leur export vers Prometheus, visualisation dans Grafana et alertes automatiques. Dans cet article, nous aborderons le niveau avancé de la surveillance des applications Go — de l'architecture des métriques à la configuration des alertes basées sur la logique métier.



Architecture de surveillance : Prometheus + Go



La pile de surveillance standard pour Go comprend :

  • Prometheus — système de collecte et de stockage des métriques (modèle pull).
  • Client Go pour Prometheus (prometheus/client_golang) — bibliothèque pour exporter les métriques.
  • Grafana — visualisation des tableaux de bord.
  • Alertmanager — gestion des alertes (email, Slack, Telegram).


L'application Go doit fournir un endpoint HTTP (généralement /metrics) à partir duquel Prometheus récupère les données. Examinons la configuration de base.



package main

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

func main() { // Enregistrement des métriques Go standard (runtime, GC, goroutines) prometheus.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{})) prometheus.MustRegister(prometheus.NewGoCollector())

http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


En exécutant l'application, vous obtiendrez les métriques standard : go_goroutines, process_cpu_seconds_total, go_memstats_alloc_bytes et autres. Mais pour une surveillance avancée, cela ne suffit pas — des métriques personnalisées sont nécessaires.



Création de métriques personnalisées : Gauge, Counter, Histogram



Prometheus prend en charge quatre types principaux de métriques. Examinons-les avec l'exemple d'une application Go traitant des requêtes HTTP.



Counter (compteur) — nombre d'événements

Utilisé pour compter les requêtes, les erreurs, l'exécution de tâches.



var requestCounter = prometheus.NewCounterVec(    prometheus.CounterOpts{        Name: "http_requests_total",        Help: "Nombre total de requêtes HTTP",    },    []string{"method", "endpoint", "status"},)

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

func handler(w http.ResponseWriter, r *http.Request) { // Traitement de la requête requestCounter.WithLabelValues(r.Method, r.URL.Path, "200").Inc()}


Gauge (jauge) — valeurs actuelles

Idéal pour surveiller les files d'attente, les pools de connexions, la température.



var queueSize = prometheus.NewGauge(    prometheus.GaugeOpts{        Name: "task_queue_size",        Help: "Taille actuelle de la file d'attente des tâches",    },)

func addToQueue() { queueSize.Inc()}

func processFromQueue() { queueSize.Dec()}


Histogram (histogramme) — distribution des valeurs

Utilisé pour mesurer le temps de réponse ou la taille des données.



var requestDuration = prometheus.NewHistogramVec(    prometheus.HistogramOpts{        Name:    "http_request_duration_seconds",        Help:    "Histogramme du temps de traitement des requêtes",        Buckets: prometheus.DefBuckets, // 0.005, 0.01, 0.025, 0.05, ...    },    []string{"endpoint"},)

func measureRequest(endpoint string, duration float64) { requestDuration.WithLabelValues(endpoint).Observe(duration)}


Summary (sommaire) — quantiles

Similaire à l'histogramme, mais calcule des quantiles précis (p50, p95, p99).



var requestLatency = prometheus.NewSummaryVec(    prometheus.SummaryOpts{        Name:       "http_request_latency_seconds",        Help:       "Latence des requêtes (quantiles)",                

Blogs

Book Recommendations