Retour au cours

infra / monitoring-observabilite

Golden signals : latence, trafic, erreurs, saturation

Leçon 161 exercice

Explication

Ce que vous allez apprendre

  • Définir précisément les 4 golden signals du Google SRE book
  • Traduire chacun des 4 signaux en requête PromQL concrète
  • Généraliser ce cadre à des systèmes non-HTTP (files de messages, bases de données)
  • Construire un dashboard "de garde" minimal, pensé pour une astreinte à 3h du matin
  • Éviter le piège d'une latence moyenne faussée par des erreurs rapides

Dans quel contexte ?

Après quinze leçons couvrant métriques, logs, traces, alerting et fiabilité, une équipe d'astreinte reçoit une alerte à 3h du matin et ouvre un dashboard Grafana... qui contient 40 panels différents. Impossible de savoir en quelques secondes si le problème est urgent ou mineur. Les golden signals, popularisés par le livre "Site Reliability Engineering" de Google (2016), répondent exactement à ce besoin : le strict minimum à regarder pour juger de la santé de N'IMPORTE QUEL service.

D'abord, il faut mémoriser les 4 signaux eux-mêmes

Quel que soit le type de système — une API HTTP, une base de données, une file de messages —, quatre questions reviennent systématiquement : combien de temps prend une opération (latence), combien de demande arrive (trafic), quelle proportion échoue (erreurs), et à quel point les ressources disponibles sont pleines (saturation).

Ce sont exactement les mêmes questions que celles qui ont motivé, dès la première leçon de ce cours, la distinction entre logs, métriques et traces — les golden signals en sont l'aboutissement pratique, sous forme de dashboard concret.

SignalQuestion poséeExemple PromQL pour une API HTTP
LatenceCombien de temps prend une requête ?histogram_quantile(0.95, ...) sur les succès uniquement
TraficQuelle est la demande actuelle ?sum(rate(http_requests_total[5m]))
ErreursQuel taux de requêtes échoue ?5xx / total
SaturationLes ressources sont-elles pleines ?connexions actives / max

Prérequis

Cette leçon récapitule et assemble des notions déjà vues : histogram_quantile() (PromQL avancé), le calcul de taux d'erreur (PromQL de base), et la notion de saturation abordée pour l'infrastructure (node_exporter, cAdvisor).

Une fois les 4 signaux nommés, un piège classique se cache dans le calcul de la latence

Calculer une moyenne ou un percentile de latence sur TOUTES les requêtes, y compris les échecs, fausse le résultat : un serveur qui répond immédiatement avec une erreur 500 (parce qu'une dépendance est down, par exemple) fait artificiellement chuter la latence moyenne mesurée, masquant un problème réel derrière un chiffre rassurant.

Piège fréquent

Toujours séparer le calcul de latence entre succès et échecs, comme le montre l'exemple status!~"5.." de cette leçon. Un service qui échoue rapidement à 100% affichera une "excellente" latence si on ne fait pas cette distinction — un signal doublement trompeur au pire moment.

Maintenant, une bonne nouvelle : ce cadre ne se limite pas au HTTP

Les mêmes quatre questions se posent, sous une forme différente, pour une file de messages Kafka (latence de traitement, débit de publication, messages en dead-letter-queue, profondeur de file) ou une base de données (temps de requête, transactions par seconde, deadlocks, ratio de connexions utilisées). Une fois le cadre mental acquis, l'appliquer à un nouveau type de système devient un exercice de traduction plutôt qu'une découverte complète.

Bonne pratique

Réserve un dashboard "on-call" strictement limité aux 4 golden signaux, distinct des dashboards détaillés par composant. La règle d'or : ce dashboard doit répondre en 10 secondes à la question "le système va-t-il mal, et à peu près pourquoi ?" — les dashboards plus fins servent ensuite à l'investigation, une fois l'anomalie générale confirmée.

Le mot de la fin

Tu as maintenant parcouru l'ensemble d'une stack d'observabilité complète : des 3 piliers fondamentaux jusqu'à la fiabilité mesurée par les SLO, en passant par les métriques, les logs, les traces, l'alerting et la haute disponibilité. Les golden signals ne sont pas une nouvelle technologie à apprendre, mais le fil conducteur qui relie tout ce que tu as vu — c'est exactement ce qui en fait le bon réflexe à garder après ce cours, sur n'importe quel système que tu seras amené à surveiller demain.

Commandes & code

Golden signals : latence, trafic, erreurs, saturation

text
Les 4 "golden signals" (Google SRE book) : le strict minimum à surveiller pour N'IMPORTE QUEL service.

LATENCE     -> combien de temps prend une requête (séparer succès et échecs : un 500 rapide fausse la moyenne)
TRAFIC      -> quelle est la demande sur le système (req/s, connexions actives, messages/s en file)
ERREURS     -> quel taux de requêtes échoue (explicite : 5xx ; ou implicite : 200 avec contenu incorrect)
SATURATION  -> à quel point les ressources sont pleines (CPU, mémoire, connexions DB, file d'attente)
promql
# Les 4 golden signals traduits en PromQL pour un service HTTP typique

# 1. Latence — SÉPARER succès et échecs, sinon la moyenne ment
histogram_quantile(0.95,
  sum(rate(http_request_duration_seconds_bucket{status!~"5.."}[5m])) by (le))   # P95 des SUCCÈS uniquement

# 2. Trafic
sum(rate(http_requests_total[5m]))                                              # requêtes/seconde, tous statuts

# 3. Erreurs
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

# 4. Saturation — dépend fortement du système, exemples typiques :
sum(pg_stat_activity_count) / pg_settings_max_connections                        # % connexions PostgreSQL utilisées
avg(rate(process_cpu_seconds_total[5m])) by (instance)                            # CPU par instance
queue_depth / queue_max_capacity                                                  # remplissage d'une file de tâches
text
Golden signals appliqués à des systèmes NON-HTTP (le principe se généralise) :

File de messages (Kafka/RabbitMQ)
  Latence    -> temps entre publication et consommation d'un message
  Trafic     -> messages publiés/seconde
  Erreurs    -> messages en dead-letter-queue
  Saturation -> profondeur de la file, lag du consumer group

Base de données
  Latence    -> temps d'exécution des requêtes (p95 par type de requête)
  Trafic     -> requêtes/seconde, transactions/seconde
  Erreurs    -> requêtes en échec, deadlocks
  Saturation -> connexions actives / max, cache hit ratio, réplication lag
json
{
  "title": "Golden Signals — mon-api",
  "panels": [
    { "title": "Latence (P95, succès uniquement)", "targets": [
      { "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{status!~\"5..\"}[5m])) by (le))" }
    ]},
    { "title": "Trafic (req/s)", "targets": [
      { "expr": "sum(rate(http_requests_total[5m]))" }
    ]},
    { "title": "Taux d'erreur (%)", "targets": [
      { "expr": "sum(rate(http_requests_total{status=~\"5..\"}[5m])) / sum(rate(http_requests_total[5m])) * 100" }
    ]},
    { "title": "Saturation DB (% connexions)", "targets": [
      { "expr": "sum(pg_stat_activity_count) / pg_settings_max_connections * 100" }
    ]}
  ]
}
text
Pourquoi ces 4 signaux et pas plus, en dashboard "de garde" (on-call) :

- Un dashboard avec 40 panels est INUTILISABLE à 3h du matin sous pression.
- Les golden signals répondent à la question immédiate : "le système va-t-il mal, et pourquoi, en 10 secondes ?"
- Les dashboards détaillés (par composant) viennent APRÈS, une fois le signal général identifié comme anormal.

Résumé

  • Latence, trafic, erreurs, saturation couvrent la quasi-totalité des incidents de production, quel que soit le type de système.
  • Toujours calculer la latence en excluant les erreurs rapides (un 500 immédiat fait baisser artificiellement une moyenne de latence).
  • Le principe se généralise au-delà du HTTP : files de messages, bases de données, caches ont chacun leurs équivalents des 4 signaux.
  • Un dashboard "on-call" doit rester minimal (les 4 golden signals) ; les vues détaillées par composant servent à l'investigation APRÈS détection, pas à la détection elle-même.

Exercices pratiques

1 disponible
1

Mission : construire le dashboard des 3h du matin

Objectif : Construire un dashboard on-call minimal limité aux 4 golden signals, en évitant le piège classique d'une latence faussée par des échecs rapides, et généraliser le cadre à un système non-HTTP.

Contexte

Le dashboard actuel de garde contient 40 panels. Pendant un vrai incident la semaine dernière, l'équipe a mis 6 minutes à identifier qu'il s'agissait d'un problème de saturation base de données, alors que le panel de latence affichait une valeur "excellente", masquant le vrai problème. Tu dois reconstruire un dashboard on-call strictement limité aux 4 golden signals, sans ce piège.

Résoudre l’exercice →