infra / monitoring-observabilite
Golden signals : latence, trafic, erreurs, saturation
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.
| Signal | Question posée | Exemple PromQL pour une API HTTP |
|---|---|---|
| Latence | Combien de temps prend une requête ? | histogram_quantile(0.95, ...) sur les succès uniquement |
| Trafic | Quelle est la demande actuelle ? | sum(rate(http_requests_total[5m])) |
| Erreurs | Quel taux de requêtes échoue ? | 5xx / total |
| Saturation | Les 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
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)# 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âchesGolden 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{
"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" }
]}
]
}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
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.