Observabilité et SLOs
Aperçu
Vous ne pouvez pas opérer, déboguer ou améliorer ce que vous ne voyez pas. L'observabilité est conçue, pas ajoutée après la première panne. La première question lors de chaque incident est « qu'est-ce qui a changé et qui est affecté » — un système qui ne peut pas y répondre transforme une correction de cinq minutes en fouille archéologique.
Les Principes (universels)
- Les trois signaux. Émettez des logs structurés (lisibles par machine, pas de texte libre), des métriques (compteurs, taux, durées), et des traces (le chemin d'une requête à travers les services). Une requête porte un ID de corrélation/trace de bout en bout.
- Instrumentez les signaux d'or pour chaque surface : taux, erreurs, durée (RED) par endpoint/opération, plus la saturation des ressources. Un nouvel endpoint n'est pas « terminé » tant qu'il n'est pas observable.
- La santé est un endpoint, pas une supposition. Exposez la vivacité (« suis-je en cours d'exécution ? ») et la disponibilité (« puis-je servir du trafic ? ») comme des vérifications distinctes.
- Définissez des SLOs pour les parcours critiques, avec des SLIs qui les mesurent et un budget d'erreur qui rend la fiabilité par rapport aux fonctionnalités un compromis explicite et guidé par les données.
- Alertez sur les symptômes, pas les causes. Soyez en alerte lorsque les utilisateurs souffrent (épuisement du SLO, échec de la disponibilité), pas sur chaque variation interne. Chaque alerte doit être actionnable — une alerte à laquelle personne ne réagit forme les gens à ignorer les alertes.
Les Mécanismes (cette pile)
- Logs JSON structurés vers stdout, collectés par la plateforme (par exemple AKS → Azure Monitor / Log Analytics). Pas de journalisation en texte libre dans les services.
- OpenTelemetry dans le serveur d'application et PostGraphile ; exportez les traces/métriques vers Azure Monitor / Application Insights (ou Prometheus/Grafana).
- ID de corrélation propagé à travers le chemin des données — généré à la périphérie, transmis Browser → App → PostGraphile avec les en-têtes de contexte, attaché à chaque ligne de log et chaque span.
- Métriques RED par route HTTP et opération GraphQL ; journal des requêtes lentes Postgres +
pg_stat_statements. - Endpoints de vivacité/disponibilité connectés aux sondes Kubernetes (voir
cloud-delivery-aks). La disponibilité reflète la santé réelle des dépendances (peut-il atteindre la base de données ?), pas seulement le processus actif. - Frontend : signalez les web-vitals et les erreurs client au même backend.
- SLOs par parcours avec tableaux de bord et alertes de taux de combustion.
Quand adapter cela
Un projet en pré-lancement/local implémente maintenant des logs structurés + des endpoints de santé et reporte les SLOs/alertes jusqu'à ce qu'il y ait de vrais utilisateurs à protéger. Indiquez le mode dans le premier enregistrement de décision.
Raisonnement complet : Articles IX & XVI de la constitution, regroupés dans engineering-constitution/references/engineering-constitution.md.