Le traçage distribué est une méthode de suivi des demandes de service dans les systèmes distribués, qui offre une visibilité sur la latence, les goulets d’étranglement de performances, etc.
Les exigences des entreprises modernes ont entraîné une explosion des technologies de l’information, et les systèmes informatiques hérités et centralisés se transforment peu à peu en environnements IT distribués, puissants et complexes. Mais avec l’amélioration des options des actuels réseaux basés sur le cloud et du traitement des données à distance, cette complexité accrue a également entraîné des risques plus importants.
En raison de leurs interdépendances, les systèmes complexes sont plus susceptibles de rencontrer des problèmes. La défaillance d’une partie du système peut se répercuter sur l’ensemble du système, et identifier et résoudre les problèmes est souvent beaucoup plus difficile que dans les systèmes centralisés. En outre, plus le système est complexe, plus il est difficile de prévoir comment les changements apportés à une de ses parties affecteront les autres, entraînant des conséquences inattendues, même dans le cas d’ajustements mineurs. Et surtout, tester minutieusement un système complexe est exponentiellement plus difficile, les problèmes sont donc plus susceptibles de passer inaperçus à mesure que le niveau de complexité augmente. Le traçage distribué fournit une solution.
Le concept de traçage distribué a vu le jour avec le document Dapper, présenté par Google en 2010, qui a établi les bases de l’infrastructure de traçage des systèmes distribués à grande échelle. D’ailleurs, sachez que Ben Sigelman, fondateur de Lightstep (qui deviendra plus tard ServiceNow Cloud Observability), a joué un rôle déterminant dans la création de Dapper. Après Dapper, Twitter a lancé Zipkin en 2012, le premier projet open source de traçage distribué. Puis, en 2015, Uber a lancé Jaeger, lui-même inspiré de Dapper.
En 2016, Sigelman a écrit un article de blog (« Toward Turnkey Distributed Tracing »), qui deviendra le Manifeste de l’OpenTracing. Ce texte essentiel présente l’OpenTracing comme une norme unique, qui permet de standardiser l’écosystème de traçage et établit les bases qui permettront à l’OpenTracing de rejoindre le giron de la Cloud Native Computing Foundation (CNCF) et, finalement, de fusionner avec OpenTelemetry en 2019.
La version 1.0 d’OpenTelemetry a été lancée en 2021 et est depuis devenue la norme de facto pour le traçage, les mesures et la journalisation. De Dapper en 2010 aux options OpenTelemetry actuelles, le traçage distribué est passé, en un peu plus de 10 ans, d’un système back-end unique à une solution de bout en bout largement utilisée, ouvrant la voie à des pratiques modernes d’observabilité exhaustive.
Le traçage distribué permet aux entreprises de créer des profils et de surveiller l’ensemble de leurs applications, en particulier celles créées à l’aide d’une architecture de microservices. Cette méthode permet de voir comment les services d’un système distribué interagissent les uns avec les autres, et d’obtenir une image précise de toutes les demandes à mesure qu’elles circulent dans le système.
En suivant le parcours des demandes et en mesurant le temps nécessaire à chaque étape de leur traitement, le traçage distribué aide à identifier les goulets d’étranglement dans les performances, les problèmes de latence et les défaillances potentielles. Le traçage distribué est donc un outil essentiel pour les équipes DevOps et IT, car il leur permet d’optimiser, de dépanner et de gérer leurs systèmes plus efficacement.
Le traçage distribué s’articule autour de trois composants principaux :
- Span
Un span est une unité de travail unique, exécutée par un service au sein du système, caractérisé par un intervalle de temps entre l’entrée et la sortie, et incluant éventuellement des métadonnées telles que des journaux ou des balises. Les spans forment une trace, qui représente différentes parties du workflow. Les spans racines (également appelés spans parents) peuvent avoir leurs propres spans (les spans enfants), qui peuvent eux aussi avoir des spans. - Trace
Une trace se compose d’un ou plusieurs spans qui, ensemble, représentent le chemin d’exécution complet de la demande de service à mesure qu’elle se déplace dans le système distribué. Les traces sont souvent représentées sous forme d’arborescences, où le nœud racine représente l’action de l’utilisateur et les autres nœuds représentent les différents microservices impliqués dans le traitement de la demande et la préparation de la réponse. - Balises
Les balises sont des éléments de métadonnées associés aux spans. Elles fournissent un contexte et une classification.
La structure de trace/span offre une vue centrée sur les demandes, ce qui permet de combler les écarts entre les microservices indépendants et fournit une vue unifiée des performances du système. Grâce à ces informations, les entreprises sont mieux préparées pour comprendre et améliorer l’expérience utilisateur.
Le traçage, la journalisation et les mesures jouent un rôle essentiel dans l’observabilité, mais ce ne sont pas les mêmes concepts. Chacun de ces concepts a des objectifs distincts, et il est essentiel de comprendre leurs différences et en quoi ils sont complémentaires pour une surveillance et un débogage complets du système :
- Traçage
Le traçage distribué fournit une vue détaillée des demandes à mesure qu’elles passent par les composants d’un système distribué. Il capture le flux de la demande via les divers services et joue également un rôle dans le réglage et le dépannage des performances. Contrairement à la journalisation et aux mesures, le traçage distribué se concentre sur le parcours de demandes spécifiques, ce qui permet d’obtenir une image claire des interactions entre les microservices. - Journalisation
La journalisation consiste à enregistrer chaque événement spécifique d’un système : actions de l’utilisateur, erreurs système ou autres. Les journaux horodatés fournissent des informations détaillées sur ce qui s’est passé dans le système à un moment donné, ce qui est souvent essentiel pour le débogage et l’audit. Alors que le traçage distribué suit le flux des demandes, la journalisation offre un instantané plus statique des événements, sans nécessairement montrer les relations entre les différentes parties du système.
Les mesures, exprimées en chiffres, reflètent l’état d’un système à un instant précis ou sur une période définie. Elles englobent des éléments tels que les temps de réponse, les taux d’erreur et l’utilisation des ressources système. Dans le contexte du traçage distribué, ces mesures sont cruciales. Elles offrent une méthode quantifiée pour surveiller et évaluer les performances de différents services d’un système distribué. Ces données chiffrées sont dérivées des traces et des journaux. Elles permettent une vue d’ensemble rapide, tout en fournissant des rapports approfondis sur des éléments spécifiques, comme les délais de réponse, le taux d’erreur ou le débit du système.
En examinant les traces et les données de journalisation via ces mesures qui résument les indicateurs clés de performance, les entreprises peuvent acquérir une compréhension complète de leur architecture distribuée, ce qui permet de réaliser des diagnostics rapides, d’obtenir des insights exploitables, et facilite l’optimisation du système.
Les microservices sont une conception architecturale logicielle dans laquelle une application est structurée comme un ensemble de services faiblement couplés et déployables indépendamment. Chaque microservice se concentre sur un domaine fonctionnel spécifique et s’exécute comme un composant individuel au sein d’un système plus large. Cette approche modulaire favorise la flexibilité, la capacité d’adaptation et peut accélérer le développement. Dans le contexte du traçage distribué, les microservices jouent un rôle important, car ils représentent les nœuds que traverse chaque demande.
Lorsqu’une demande passe d’un microservice à un autre, le traçage distribué capture les détails de ces interactions, y compris le temps nécessaire à chaque étape. Ces informations permettent de connaître en détail la façon dont la demande circule dans les nombreux services, et d’identifier les goulets d’étranglement, les latences et les défaillances potentielles.
Comprendre comment les microservices interagissent au sein d’un système distribué peut être complexe. Le traçage distribué fournit des informations précieuses sur ces interactions, ce qui permet aux entreprises de visualiser les chemins, de surveiller les performances du système et de résoudre les problèmes susceptibles de survenir afin d’améliorer l’architecture système pour qu’elle soit plus robuste et plus efficace.
Le traçage distribué est devenu un outil indispensable pour les entreprises travaillant avec des systèmes distribués, en particulier dans le contexte des microservices et des architectures dynamiques. En suivant et en enregistrant de manière exhaustive toutes les interactions des demandes avec chaque service, le traçage distribué fournit des informations cruciales pour la surveillance, le débogage et l’optimisation des performances. Des attributs peuvent être ajoutés aux traces pour plus de précision, et chaque span est enregistré avec des métadonnées détaillées, incluant les relations entre les spans parents et enfants, ce qui permet de comprendre parfaitement comment les demandes transitent entre les services.
Ainsi, de plus en plus d’entreprises se tournent vers le traçage distribué pour gérer la complexité de leurs environnements d’applications modernes. Aujourd’hui, avec de nombreux points de défaillance potentiels dans les piles d’applications complexes, identifier les causes premières des problèmes peut être difficile, chronophage et source d’erreurs. Le traçage distribué rationalise ce processus en permettant d’identifier les problèmes plus rapidement et plus précisément, ce qui améliore la capacité de l’entreprise à fournir une excellente expérience utilisateur.
En outre, le traçage distribué est une réponse efficace au problème de la cardinalité, les volumes de données augmentant au point que leur stockage et la puissance de calcul deviennent difficiles à gérer.
Les avantages du traçage distribué incluent une meilleure compréhension des performances des microservices, la résolution rapide des problèmes et l’amélioration de la satisfaction des clients. En fournissant une vue détaillée des performances de chaque microservice, les entreprises ont la garantie de sources de revenus stables tout en consacrant plus de temps à la stratégie et à l’innovation.
Les données fournies par le traçage distribué sont cruciales, mais en fin de compte, il ne s’agit que de données. Sans une compréhension claire de ce que représentent ces données, celles-ci n’ont pas d’effet vraiment positif sur le processus de prise de décision. La véritable valeur des données réside dans les insights exploitables qui peuvent être dérivés de chiffres, à condition que ceux-ci soient récents, pertinents et fiables.
C’est grâce à l’analyse intelligente et à la compréhension contextuelle de ces données que les entreprises peuvent identifier les problèmes, identifier les causes et mettre en œuvre des solutions efficaces. Comment le traçage distribué permet-il, au-delà de la simple collecte de données, de fournir des insights approfondis sur divers scénarios ? Tenez compte des points suivants :
Le traçage distribué joue un rôle essentiel dans la reconnaissance des symptômes d’un problème d’intégrité des logiciels, tels que la latence ou un faible débit. Il sert d’outil de diagnostic en connectant les effets observables à leurs causes sous-jacentes, ce qui permet de valider les hypothèses sur ce qui a pu déclencher le changement observé.
Lorsqu’un service devient indisponible, il faut pouvoir en expliquer la cause. Le traçage aide les entreprises à déterminer quels changements, internes ou externes, ont été apportés avant une panne. Que la variation résulte de bugs dans le logiciel, de changements provoqués par les utilisateurs ou de modifications de l’infrastructure entraînant des problèmes de performances, le traçage distribué permet de déterminer l’état du système avant et après la panne et d’identifier clairement ce qui peut l’avoir causée.
Il est essentiel de comprendre les changements intervenus au sein de chaque service. Qu’il s’agisse de déploiements ou de mises à jour de version, le traçage distribué détaille les performances des différentes étapes, en indiquant pour chaque span les informations de version. Cette vue détaillée aide à diagnostiquer les changements qui affectent les performances d’un service.
Les systèmes ne sont pas statiques, et les utilisateurs qui utilisent ces systèmes ne le sont pas non plus. Des facteurs externes tels que les changements de comportement des utilisateurs peuvent entraîner des modifications dans les performances des services. Un traçage pertinent utilise des balises pour capturer les parties essentielles des demandes et des fonctionnalités utilisateur, afin de mieux comprendre la façon dont les utilisateurs interagissent avec l’application et la manière dont ces interactions peuvent créer des demandes inattendues.
Les ressources sont limitées et parfois elles ne suffisent tout simplement pas. La concurrence entre les ressources dans les réseaux distribués peut affecter considérablement les performances. Le traçage distribué offre des informations sur la façon dont les ressources partagées, telles que les processeurs, les conteneurs ou les bases de données, sont utilisées. Les traces correctement balisées permettent d’effectuer une analyse globale, ce qui permet de découvrir quand et où des performances plus lentes sont corrélées à l’utilisation de ressources spécifiques, ce qui facilite ensuite la planification des ressources et la résolution des conflits.
La nature dynamique des dépendances signifie que les changements en amont peuvent avoir un impact sur les performances de votre service. Avec un traçage distribué pertinent, incluant le balisage des opérations de sortie et des numéros de version, vous pouvez mieux comprendre comment les services en amont affectent les performances. La compréhension de ces relations permet de s’adapter à ces changements ou d’en atténuer les impacts.
Les normes de traçage distribué open source sont des cadres de travail essentiels qui guident la collecte, la gestion et l’analyse des données de traçage dans différents services, de manière standardisée. Elles favorisent l’interopérabilité et réduisent la dépendance vis-à-vis d’un seul fournisseur, ce qui permet aux développeurs de basculer entre différents back-ends et outils de traçage avec un minimum d’ajustements. Elles fournissent également une base commune pour l’intégration d’une série de plateformes, langages et applications au sein de systèmes distribués complexes.
Parmi les normes de traçage distribué open source les plus largement utilisées, on trouve :
Intégrée à la Cloud Native Computing Foundation (CNCF), OpenTracing fait partie des premières normes open source de suivi distribué. Ce cadre de travail inclut des API qui prennent en charge la propagation distribuée du contexte et permettent aux développeurs d’ajouter une instrumentation au code de leur application (sans dépendre d’un fournisseur spécifique). OpenTracing a fourni une sémantique de traçage cohérente sur différentes plateformes, mais a depuis été archivée. Le CNCF ne fournit plus de support pour le projet.
OpenCensus est conçu pour prendre en charge plusieurs exportateurs, ce qui permet aux utilisateurs d’envoyer des données de suivi à différents back-ends pour analyse. Ce cadre de travail (établi par Google) fournit un ensemble clair d’API et de bibliothèques qui permettent de collecter automatiquement et manuellement des traces et des mesures distribuées. En offrant une solution unifiée d’observabilité, OpenCensus rationalise le processus de collecte et de gestion des données statistiques essentielles. OpenCensus a été également abandonné.
OpenTelemetry est un projet fusionnant OpenTracing et OpenCensus, qui combine les meilleures fonctionnalités des deux normes. Cofondé par Lightstep, OpenTelemetry offre un ensemble unifié et plus étendu d’API, de bibliothèques, d’agents et d’instrumentations, pour fournir un cadre d’observabilité complet pour les logiciels cloud natifs. OpenTelemetry simplifie l’instrumentation des applications en offrant une prise en charge intégrée de divers cadres et bibliothèques populaires. L’objectif est qu’elle devienne une norme d’observabilité pour les traces distribuées, la journalisation et les mesures. Elle bénéficie d’ailleurs d’une communauté croissante et d’un large soutien du secteur.
Diverses fonctionnalités interviennent dans le fonctionnement et la réussite du traçage distribué. Voici le rôle joué par chacune de ces fonctionnalités :
Les mécanismes d’alerte du back-end d’observabilité permettent aux équipes de définir des seuils pour des mesures ou des comportements spécifiques susceptibles d’indiquer un problème. Lorsque ces seuils sont atteints, des alertes peuvent être envoyées au personnel concerné, ce qui permet d’identifier et de résoudre rapidement les problèmes potentiels, améliorant ainsi la fiabilité du système.
Le traçage distribué offre une visibilité complète sur l’ensemble du parcours d’une demande au travers des différents services et composants. Ces informations de bout en bout permettent d’identifier les goulets d’étranglement, les inefficacités et les anomalies au sein du système, et fournissent un contexte détaillé pour le réglage des performances et l’analyse des erreurs.
En fournissant des informations précises sur le comportement du système, le traçage distribué réduit considérablement le temps consacré au débogage et à l’identification des problèmes. Ce gain d’efficacité permet de réaliser des économies, les équipes étant en mesure de consacrer plus de temps au développement de fonctionnalités et à l’innovation au lieu de travailler sur du dépannage.
Avec l’essor de l’informatique distribuée sur plusieurs sites géographiques et fournisseurs de cloud, les environnements se sont complexifiés. Le traçage distribué facilite l’intégration dans ces environnements. Il permet d’obtenir une vue cohérente des performances du système dans les différentes régions et plateformes cloud, garantissant la cohérence de la surveillance et des analyses.
Le traçage distribué permet de surveiller et de suivre en temps réel les performances de chaque service, de comprendre comment ces services interagissent et d’identifier les points qui peuvent nécessiter une optimisation.
Le collecteur est un composant essentiel dans la collecte, le traitement et l’exportation des données de télémétrie (les traces, les mesures et les journaux). Il fournit une option unifiée, indépendante du fournisseur, pour la collecte et la transmission des données, ce qui permet une intégration transparente avec différents back-ends d’observabilité. La flexibilité du collecteur permet d’adapter le traçage à différents environnements sans modifier le code d’instrumentation.
L’échantillonnage est une fonctionnalité qui permet de collecter un sous-ensemble de demandes (plutôt que de collecter toutes les demandes) afin de réduire le volume total de données envoyées au back-end de traçage. Cela permet aux systèmes de traçage distribué de fonctionner à grande échelle sans nécessiter de trop importantes ressources, tout en fournissant de précieux insights.
À mesure que les systèmes se développent, le traçage distribué doit s’adapter à la complexité et au volume croissants des données. Les fonctionnalités de capacité d’adaptation garantissent que le traçage peut s’adapter à des environnements à grande échelle, fournissant ainsi des informations cohérentes sur les performances, quelle que soit la taille du système. Bien sûr, la capture des données n’est que la première étape. Pour comprendre les données, les entreprises doivent pouvoir accéder à une plateforme, capable d’évoluer parallèlement au traçage distribué à mesure que les systèmes se développent et évoluent.
Les applications modernes sont composées de différents langages, cadres de travail, technologies et clients (Web et mobiles). La capacité du traçage distribué à fonctionner dans des environnements hétérogènes complets garantit que les développeurs disposent des informations dont ils ont besoin sur l’ensemble de la pile technologique, quelle que soit sa diversité.
Comme indiqué précédemment, le traçage distribué offre une meilleure visibilité sur les systèmes distribués d’une entreprise. Mais la visibilité en elle-même n’est utile que lorsqu’elle permet d’obtenir d’autres avantages. Les principaux avantages du traçage distribué incluent :
L’un des principaux avantages du traçage distribué est qu’il permet de mesurer la durée nécessaire pour effectuer des actions utilisateur essentielles, par exemple, des achats. Le fait de pouvoir tracer le chemin des demandes permet de localiser et de corriger les obstacles en back-end qui pourraient avoir un impact négatif sur l’expérience de l’utilisateur.
La plupart des entreprises opèrent dans les limites des accords de niveau de service (SLA), qui formalisent les engagements de performance envers les clients ou d’autres départements en interne. Les outils de traçage distribué compilent les données de performances des différents départements, ce qui permet aux équipes de vérifier facilement si leurs SLA sont respectés.
Les objectifs de niveau de service (SLO) sont des cibles spécifiques et mesurables qui définissent les performances et la disponibilité attendues d’un service. Ils sont soutenus par des indicateurs de niveau de service (SLI) qui aident les entreprises à mesurer leurs niveaux de service. Correctement déployé, le traçage distribué permet de suivre et de respecter les SLO en choisissant les signaux spécifiques à surveiller et en définissant des alertes dès qu’une erreur ou une donnée hors d’une plage prédéterminée est détectée. Cela permet de traiter rapidement et efficacement tous les incidents associés.
Le traçage distribué fournit des insights sur les relations complexes de cause à effet entre les différents services associés. Cela aide les entreprises à optimiser les performances globales de leur système.
Dans les environnements où différentes équipes supervisent les divers services impliqués dans le traitement d’une demande, le traçage distribué permet de savoir clairement où une erreur s’est produite et quelle équipe doit la résoudre. Cette visibilité améliore la collaboration entre les équipes, réduit considérablement le temps passé à chercher d’où vient le problème et augmente la productivité globale de l’entreprise.
Lorsque des problèmes de performances des applications surviennent, les équipes d’assistance peuvent utiliser des traces distribuées pour déterminer si le problème se situe au niveau du back-end. En analysant les traces du service affecté, les ingénieurs peuvent identifier et résoudre le problème. Les outils de traçage distribué de bout en bout permettent même d’enquêter sur les problèmes de performances front-end au sein de la plateforme concernée, réduisant ainsi à la fois le temps moyen de détection (MTTD) et le temps moyen de résolution (MTTR) des problèmes potentiellement problématiques.
Bien que le traçage distribué présente de nombreux avantages, il peut également se heurter à certains obstacles susceptibles d’entraver son fonctionnement. Pour les entreprises qui souhaitent mettre en œuvre efficacement le traçage distribué, il est essentiel de comprendre ces défis. Vous trouverez ci-dessous quelques-uns des défis les plus importants :
L’un des obstacles que présentent certaines plateformes de traçage distribué est la nécessité d’une instrumentation manuelle. Cela signifie que l’entreprise doit parfois modifier son code pour lancer le traçage des demandes. Non seulement ce type d’interventions manuelles nécessite des ressources d’ingénierie précieuses, mais la révision du code peut également introduire des erreurs dans les applications.
Le traçage distribué se concentre principalement sur les services back-end, générant un ID de trace uniquement quand la demande touche le premier service de ce type. En l’absence d’un traçage distribué complet, de bout en bout, la clarté sur la session utilisateur côté front-end est restreinte. Cette restriction rend difficile la détermination de l’origine de certaines demandes problématiques. Elle entrave également la capacité à déterminer si le souci doit être adressé par l’équipe front-end ou back-end.
Heureusement, l’utilisation de cadres de travail tels qu’OpenTelemetry atténue ou élimine les défis liés à la visibilité limitée sur les transactions front-end, ainsi que les problèmes associés à l’instrumentation. Ces défis et bien d’autres sont inhérents à de nombreuses technologies du secteur (telles que Kubernetes) qui intègrent OpenTelemetry dans leurs bases de code principales.
Alors que la taille et la complexité du paysage IT des entreprises modernes continuent d’augmenter, les avantages du traçage distribué sont de plus en plus évidents. ServiceNow Cloud Observability, basée sur la Now Platform® primée, est une solution de traçage sans pareille, qui offre une visibilité complète sur les demandes dans les systèmes distribués.
Intégrez dans les outils existants. Reliez les mesures et le traçage pour créer une télémétrie unifiée. Réduisez considérablement le MTTR de votre entreprise. Et, surtout, alignez le tarif sur les résultats business, pour une valeur améliorée, sans coûts supplémentaires si vous l’utilisez plus.
Cloud Observability révolutionne le traçage distribué de façon très avantageuse pour votre entreprise. Contactez ServiceNow pour en savoir plus.