Surveillance vs observabilité : La vraie différence, avec les journaux, les métriques et les traces
La surveillance vous indique que quelque chose ne va pas. L’observabilité vous aide à comprendre pourquoi, même lorsque l’échec est inattendu. Suivez un incident de paiement pour voir comment les deux fonctionnent ensemble.
- Surveillance surveille les problèmes connus, à l’aide de métriques et d’alertes prédéfinies.
- L’observabilité désigne la capacité à comprendre l’état interne d’un système à partir de ses sorties.
- Les journaux, les métriques et les traces sont des signaux courants, mais leur collecte ne garantit pas une meilleure compréhension.
- Ils travaillent ensemble : la surveillance donne l’alerte et l’observabilité vous aide à en trouver la cause.
Le tableau de bord est vert, et pourtant les clients se plaignent que le paiement ne fonctionne pas. Si vous avez occupé ce poste, vous comprenez déjà la différence entre surveillance et observabilité. Votre surveillance n’a vérifié que ce que vous pensiez vérifier, et cet échec est quelque chose de nouveau.
Ce guide explique les deux idées sans le langage marketing et suit un incident fictif depuis l’alerte jusqu’à la cause profonde. Les journaux, traces et chiffres sont inventés pour illustrer le processus. Vous devez également savoir que les vendeurs et les praticiens tracent cette ligne différemment, et certains considèrent qu’il s’agit en partie d’une distinction marketing. Nous nous concentrons sur la partie pratique.
La réponse courte
La surveillance est une activité. Vous décidez à l’avance ce que vous souhaitez surveiller, comme le processeur, le taux d’erreur ou l’espace disque, et vous définissez des seuils qui déclenchent des alertes. Il répond : « Est-ce que la chose dont je m’inquiétais se produit ?
L’observabilité est une propriété de votre système. Le terme vient de la théorie du contrôle, où il décrit dans quelle mesure vous pouvez déduire l’état interne d’un système à partir de ses sorties externes. En pratique, il répond : « Que se passe-t-il et pourquoi, y compris pour des problèmes que je n’avais jamais anticipés ?
Pensez à une voiture. Les voyants du tableau de bord surveillent. Ils couvrent un ensemble de problèmes connus. Le port de diagnostic complet d’un mécanicien, qui permet à quelqu’un de poser de nouvelles questions sur n’importe quelle partie du moteur, est plus proche de l’observabilité.
Surveillance et observabilité côte à côte
| Aspect | Surveillance | Observabilité |
|---|---|---|
| Question principale | Quelque chose ne va pas ? | Pourquoi est-ce faux ? |
| Idéal pour | Modes de défaillance connus | Échecs inconnus et nouveaux |
| Approche | Contrôles et tableaux de bord prédéfinis | Exploration ouverte de données riches |
| Sortie typique | Alertes et graphiques d’état | Réponses à de nouvelles questions |
| Détail des données | Souvent regroupés | Détaillé, par demande si possible |
| Configuration | Configurer les contrôles de l’extérieur | Nécessite l’instrumentation de votre code |
| Utilisé par | Opérations, personnel d’astreinte | Développeurs et personnel d’astreinte |
Ce n’est pas un choix entre les deux. Vous avez toujours besoin d’alertes pour vous indiquer quand chercher.
Pourquoi la surveillance seule ne suffit pas
Avec une seule application sur un serveur, la liste des problèmes pouvant survenir est assez courte, vous pouvez donc toutes les regarder. Un système moderne peut comporter des dizaines de services, de files d’attente et d’API tierces, ainsi que des conteneurs qui vont et viennent. Les échecs deviennent des combinaisons que personne n’avait prédit : une région, un type de client, une version d’application spécifique et une seule dépendance lente.
Vous ne pouvez pas rédiger à l’avance un tableau de bord pour une question à laquelle vous n’avez pas pensé. Vous avez besoin de données qui vous permettent de les poser par la suite.
Journaux, métriques et traces
Ces trois types de télémétrie sont souvent appelés les piliers de l’observabilité. Chacun répond à une question différente :
| Signal | Qu’est-ce que c’est | Réponses | Faiblesse |
|---|---|---|---|
| Métriques | Des chiffres au fil du temps | Combien ? Est-ce que ça empire ? | Peu de détails sur des événements uniques |
| Journaux | Enregistrements d’événements individuels | Que s’est-il passé exactement ? | Peut être coûteux et bruyant |
| Traces | Parcours d’une demande à travers les services | Où est passé le temps ? | Nécessitent des instruments et sont souvent échantillonnés |
Métriques
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
Les métriques sont peu coûteuses à stocker et rapides à interroger, ce qui les rend idéales pour les tableaux de bord et les alertes. Méfiez-vous des étiquettes à cardinalité élevée, comme un identifiant utilisateur, dans de nombreux systèmes métriques, car elles peuvent augmenter considérablement les coûts.
Traces
Une trace suit une requête sur tous les services. Chaque étape est un span avec une heure de début et une durée :
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
Une trace rend évidente une étape lente, ce qui est très difficile à voir dans des journaux distincts provenant de services distincts.
Journaux
Les journaux fournissent le détail de ce qui s’est passé à un moment donné. Nous verrons comment les rendre utiles dans un instant.
Présentation d’un incident
Voici comment les pièces s’assemblent, dans un exemple fictif.
| Étape | Signal | Ce que nous apprenons |
|---|---|---|
| 1. Alerter les incendies | Métrique | La latence p95 de la caisse a dépassé son objectif de 1 seconde |
| 2. Décomposez-le | Métrique | Seule l’application mobile est concernée, pas le Web |
| 3. Inspecter une demande | Tracer | L’heure est à la tarification-service, à une requête de coupon |
| 4. Lisez les détails | Journaux | Les demandes lentes utilisent toutes un coupon de la campagne d’aujourd’hui |
| 5. Confirmez la cause | Plan de requête | La recherche de coupon n’a pas d’index approprié |
| 6. Réparez-le | Déploiement | Ajoutez l’index et regardez la latence récupérer |
La surveillance a géré l’étape 1. Tout ce qui a suivi était l’observabilité. Notez comment chaque question découle de la réponse précédente. Personne n’aurait pu créer à l’avance un tableau de bord pour « la requête de coupon d’application mobile de la campagne d’aujourd’hui ». Pour le correctif lui-même, notre guide sur l’optimisation des requêtes SQL montre comment lire ce type de plan.
De meilleurs journaux
Les journaux en texte brut sont conçus pour les yeux humains et difficiles à interroger. Les Journaux structurés utilisent des champs sur lesquels une machine peut filtrer :
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
Avec le deuxième formulaire, vous pouvez immédiatement demander « combien de pannes par fournisseur au cours de la dernière heure ? » Le champ trace_id est particulièrement précieux, car il relie une ligne de journal à l’ensemble de la requête, pour chaque service touché.
N’enregistrez jamais de mots de passe, de jetons ou de numéros de carte et faites attention aux données personnelles. Comme l’explique notre guide, les JWT peuvent être réutilisés par toute personne qui les lit à partir d’un journal.
Conseil : Ajoutez le contexte souhaité lors d’un incident, tel que la version, la région, le niveau client et l’état de l’indicateur de fonctionnalité. Pouvoir dire « uniquement la version 2.14 dans une région » résout souvent le problème à lui seul.
Les signaux d’or
Vous ne savez pas quoi surveiller ? Le livre Site Reliability Engineering de Google suggère quatre signaux pour les systèmes destinés aux utilisateurs :
| Signal | Question | Exemple |
|---|---|---|
| Latence | Combien de temps prennent les demandes ? | temps de réponse p95 et p99 |
| Trafic | Quelle est la demande ? | Requêtes par seconde |
| Erreurs | Combien de requêtes échouent ? | Taux de réponses 5xx |
| Saturation | Quel est le niveau de remplissage du système ? | Utilisation du processeur, de la mémoire et du pool de connexions |
Utilisez des percentiles pour la latence, car les moyennes masquent les requêtes lentes, comme nous l’avons montré dans tests de charge vs tests de stress.
Alerte les gens en qui ils ont confiance
Si les alertes se déclenchent en permanence, les gens arrêtent de les lire. Les bons suivent quelques règles :
- Alerte sur les symptômes ressentis par les utilisateurs. « Erreurs de paiement supérieures à 2 % » bat « CPU à 85 % ». Un processeur élevé qui ne nuit à personne ne devrait réveiller personne.
- Rendez chaque alerte exploitable. Si personne n’a besoin de faire quoi que ce soit, faites-en un élément du tableau de bord ou supprimez-le.
- Lien vers un runbook. Dites au répondeur où chercher et quoi essayer.
- Examinez-les régulièrement. Supprimez ou corrigez toute alerte qui a été ignorée le mois dernier.
Objectifs de niveau de service
Un SLO transforme « le site doit être rapide et fiable » en un objectif mesurable, comme « 99,9 % des demandes de paiement aboutissent sur 30 jours ». Cela permet d’éviter environ 0,1 % d’échecs, ce que l’on appelle un budget d’erreur. S’il vous en reste suffisamment, vous pouvez expédier plus rapidement, et s’il est presque épuisé, vous pouvez donner la priorité à la fiabilité. C’est un moyen utile de régler les différends entre rapidité de livraison et stabilité.
OpenTelemetry et outils
OpenTelemetry est une norme open source et indépendante du fournisseur pour générer et exporter des données de télémétrie. Il s’agit d’un projet de la Cloud Native Computing Foundation. Instrumenter avec cela signifie que vous pouvez modifier votre backend plus tard sans réécrire votre code. Il ne s’agit pas d’un produit de stockage ou de tableau de bord en soi, vous l’associez donc à un :
| Objectif | Exemples open source | Exemples commerciaux |
|---|---|---|
| Métriques | Prométhée | Datadog, nouvelle relique |
| Tableaux de bord | Grafana | Datadog, Dynatrace |
| Journaux | Loki, Recherche Ouverte | Splunk, Élastique |
| Traces | Jaeger, Tempo | Nid d’abeille, Datadog |
Vérifiez vous-même les fonctionnalités et les tarifs actuels, car ces produits changent souvent. Les coûts peuvent augmenter rapidement avec le volume de données, utilisez donc l’échantillonnage et définissez des limites de conservation.
Comment commencer
- Commencez par les signaux en or pour votre service le plus important.
- Ajoutez une ou deux alertes sur les symptômes remarqués par les utilisateurs.
- Passez aux journaux structurés avec un ID de demande dans chaque ligne.
- Ajoutez le traçage à votre parcours utilisateur principal avec OpenTelemetry, car l’auto-instrumentation peut couvrir de nombreux frameworks courants.
- Liez les déploiements à vos graphiques afin que vous puissiez voir si une version de votre pipeline CI/CD a provoqué un changement.
- Apprenez de chaque incident. Après chacun d’entre eux, demandez quelles données auraient permis une résolution plus rapide et ajoutez-les.
Une petite équipe avec un seul service n’a pas besoin d’une immense plateforme. Des mesures de base, de bons journaux et quelques alertes peuvent suffire. Le traçage gagne sa place à mesure que le nombre de services augmente.
Erreurs courantes
- Acheter un outil et l’appeler observabilité. La valeur vient d’une bonne instrumentation et de la façon dont vous utilisez les données.
- Traiter trois piliers comme une liste de contrôle. Séparer les données sans aucun moyen de les relier vous oblige à parcourir les onglets. Les identifiants partagés sont importants.
- Tout collecter. La télémétrie non filtrée coûte cher et ajoute du bruit.
- Trop de tableaux de bord. Quelques vues fiables dépassent une centaine que personne n’ouvre.
- Je pense que cela remplace les tests. Vous avez toujours besoin de tests avant la sortie. Cependant, les versions Canary se marient bien avec ces signaux.
Pour conclure
La surveillance vous indique que quelque chose s’est mal passé et l’observabilité vous donne les moyens de découvrir pourquoi. Le test pratique est simple : lorsqu’un problème inconnu apparaît, pouvez-vous en trouver la cause sans envoyer de nouveau code ? La prochaine fois que vous serez confronté à un incident, notez toutes les questions auxquelles vous n’avez pas pu répondre. Cette liste est votre feuille de route.
Questions fréquentes
Quelle est la différence entre surveillance et observabilité ?
La surveillance suit les métriques prédéfinies et les alertes sur les problèmes connus. L’observabilité est la capacité de comprendre l’état d’un système à partir de ses résultats, y compris en cas de problèmes inattendus.
Quels sont les trois piliers de l’observabilité ?
Ce sont des journaux, des métriques et des traces. Les journaux enregistrent les événements, les métriques mesurent les valeurs au fil du temps et les traces suivent une seule requête sur tous les services.
Ai-je besoin d’observabilité si j’ai une surveillance ?
Pour un système petit et simple, une bonne surveillance et des journaux peuvent suffire. À mesure que les systèmes deviennent distribués et que les pannes sont moins prévisibles, l’observabilité devient plus précieuse.
Qu’est-ce qu’OpenTelemetry ?
Il s’agit d’un standard open source et d’un ensemble d’outils permettant de produire et d’exporter des journaux, des métriques et des traces, vous n’êtes donc pas lié à l’agent d’un seul fournisseur.
Quels sont les quatre signaux d’or ?
Ce sont la latence, le trafic, les erreurs et la saturation. Les directives SRE de Google les recommandent comme point de départ pour surveiller les systèmes destinés aux utilisateurs.
Continuez à apprendre
Besoin d’aide pour les tests, WordPress ou le référencement ?
Nous aidons les équipes à proposer de meilleurs logiciels et à développer leurs sites. Dites-nous sur quoi vous travaillez et nous vous proposerons une prochaine étape claire.
Plus de guides sur tests, IA et développement moderne
Vous avez apprécié cet article ? Choisissez un sujet et accédez directement à nos nouveaux didacticiels.
Les hallucinations de l'IA expliquées : pourquoi les modèles de langage inventent les choses et comment les réduire
Les hallucinations de l'IA ont expliqué : ce qu'elles sont, pourquoi les modèles de langage les produisent, les types courants, comment les réduire …
Lire l'article →DevOpsVariables d'environnement expliquées : fichiers .env, secrets et configuration correctement effectués
Variables d'environnement expliquées avec des exemples Python que nous avons exécutés : lecture et définition, pourquoi chaque valeur est une chaîne…
Lire l'article →Développement logicielLimitation du débit de l'API expliquée : algorithmes, en-têtes et gestion des erreurs 429
Limitation du débit de l'API expliquée avec une simulation que nous avons exécutée : compartiment de jetons, fenêtre fixe, fenêtre glissante, 429 ré…
Lire l'article →Automatisation des testsSe moquer en Python : unittest.mock, patch et les erreurs qui font mentir les tests
Moquerie en Python avec unittest.mock, testée : Mock et return_value, side_effect, correctifs où un nom est utilisé, spec et autospec, dates moqueus…
Lire l'article →Tests logicielsCouverture du code expliquée : couverture des lignes par rapport aux branches et ce que signifie réellement 100 %
Couverture du code expliquée avec une véritable exécution de cover.py : couverture des lignes, des branches et des conditions, lecture d'un rapport,…
Lire l'article →Bases de données et SQLDELETE vs TRUNCATE vs DROP dans SQL : différences, restauration et quand les utiliser
DELETE vs TRUNCATE vs DROP expliqué avec SQL testé : ce que chacun supprime, restauration, déclencheurs, réinitialisation d'identité, vitesse et en …
Lire l'article →Bases de données et SQLVues SQL expliquées : créez, utilisez et évitez les pièges, avec des exemples
Vues SQL expliquées avec les requêtes que nous avons exécutées : création d'une vue, résultats en direct, masquage des colonnes, performances, vues …
Lire l'article →Développement logicielInterface TypeScript vs Type : différences réelles, testées avec le compilateur
Interface TypeScript vs type, vérifiée avec le vrai compilateur : ce que les deux peuvent faire, ce qu'un seul peut faire, la fusion des déclaration…
Lire l'article →Développement logicielPython *args et **kwargs expliqués : fonctions flexibles avec des exemples clairs
Python *args et **kwargs expliqués avec le code que nous avons exécuté : emballage et déballage, ordre des paramètres, arguments de mot-clé uniqueme…
Lire l'article →Développement logicielFonctions Python Lambda : syntaxe, utilisations réelles et quand ne pas les utiliser
Fonctions Python lambda expliquées avec le code que nous avons exécuté : syntaxe, tri avec clé, carte et filtre, fermetures, piège de liaison tardiv…
Lire l'article →Intelligence artificielleQue sont les agents IA ? Comment ils fonctionnent, avec une simple boucle d'agent que vous pouvez exécuter
Que sont les agents IA ? Un guide simple sur la boucle d'agent, les outils, la mémoire et les garde-fous, avec une petite boucle Python que nous avo…
Lire l'article →DevOpsSurveillance vs observabilité : la vraie différence, avec les journaux, les métriques et les traces
Surveillance et observabilité expliquées : échecs connus et inconnus, journaux, métriques et traces, présentation pas à pas des incidents de paiemen…
Lire l'article →DevOpsVolumes Docker vs montages Bind : conserver les données du conteneur de la bonne manière
Volumes Docker et montages de liaison expliqués : pourquoi les données du conteneur disparaissent, volumes nommés, montages de liaison, tmpfs, exemp…
Lire l'article →Automatisation des testsTDD vs BDD : principales différences, une fonctionnalité conçue dans les deux sens et quand les utiliser
TDD vs BDD expliqué avec une fonctionnalité de remise construite dans les deux sens : refactor rouge-vert avec le code que nous avons exécuté, scéna…
Lire l'article →Développement logicielGit merge vs rebase : différences, exemples et quand utiliser chacun
Git merge vs rebase expliqué avec de vraies sorties de log, un tableau comparatif, la règle d'or du rebase et un flux de travail sûr pour les équipes.
Lire l'article →Développement logicielList comprehension Python : syntaxe, exemples et cas à éviter
La list comprehension Python expliquée : syntaxe, filtres, if-else, boucles imbriquées, temps mesurés et cas où une boucle for classique est préféra…
Lire l'article →Bases de données et SQLJointures SQL expliquées avec exemples (Inner, Left, Right, Full)
Comprenez les jointures SQL pas à pas avec des tables et requêtes d'exemple : INNER, LEFT, RIGHT, FULL, CROSS et SELF, plus erreurs courantes et con…
Lire l'article →