Introduction à OpenTelemetry pour les débutants
Explorons OpenTelemetry, une méthode standard et indépendante pour la collecte de données de télémétrie.
Améliorer l'observabilité au sein d'une application représente un défi majeur pour tout développeur. Il doit en effet recueillir des informations télémétriques pertinentes. Selon le dictionnaire de Cambridge, la télémétrie désigne la science ou le processus de collecte d'informations sur des entités distantes, puis leur transmission électronique vers un emplacement défini.
Prenons l'exemple d'un simple clic ou d'une session utilisateur sur un site web. Cet événement génère de nombreuses requêtes et des traces qui circulent à travers divers éléments : réseaux, microservices, bases de données, etc.
OpenTelemetry se présente comme une plateforme d'observabilité. Elle est constituée de composants modulaires pouvant être utilisés conjointement ou individuellement. De plus, les créateurs de frameworks et de bibliothèques couramment utilisés disposent désormais d'une méthode normalisée pour intégrer des données de télémétrie. Cela permet aux utilisateurs finaux d'obtenir des informations pertinentes sur le fonctionnement interne de ces frameworks et bibliothèques.
Pour bien comprendre OpenTelemetry, il est essentiel de saisir le concept de traçage distribué.
Qu'est-ce que le traçage distribué ?
Avec la complexification croissante des applications et la multiplication des services impliqués dans le traitement du trafic utilisateur et l'exécution des transactions, il devient impératif de comprendre le cheminement des requêtes à travers nos services. Il est également crucial de déterminer comment chaque service contribue à la latence globale. C'est précisément le rôle du traçage distribué. Il enregistre la latence des requêtes utilisateurs et le temps nécessaire à chaque microservice pour répondre.
Lorsqu'une requête utilisateur est reçue, nous souhaitons générer une trace. Cette trace constitue l'ensemble des informations qui décrivent comment notre système réagit à cette requête. Les traces sont composées d'étendues. Chaque étendue représente une paire requête-réponse spécifique dans le traitement d'une requête utilisateur. L'étendue parent décrit la latence perçue par l'utilisateur final. L'étendue enfant permet de comprendre comment un service particulier au sein du système distribué a été sollicité et comment il a répondu, en incluant ses informations de latence.
Qu'est-ce qu'OpenTelemetry ?
OpenTelemetry est un projet open-source hébergé par la CNCF qui offre un moyen standard de produire des données de télémétrie. Il est le résultat de la fusion de OpenTracing, une norme pour la création de données de trace, et de OpenCensus, une norme dédiée à la génération de données de métriques.
OpenTelemetry propose un ensemble intégré d'API, d'agents, de services de collecte et de bibliothèques pour capturer les traces et les métriques distribuées de votre application. Il standardise la manière dont nous collectons les données de télémétrie et les envoyons vers le backend de notre choix. Ceci offre une instrumentation indépendante du fournisseur et permet de modifier le backend sans réinstrumenter votre code.
Ainsi, vous pouvez instrumenter vos applications via un agent indépendant du fournisseur tout en envoyant vos métriques et vos traces à un fournisseur SaaS tel que Datadog. Par la suite, si vous souhaitez changer de fournisseur (par exemple, passer de Datadog à Dynatrace), vous pouvez le faire sans modifier le code de votre application.
Le projet OpenTelemetry vise à fournir un ensemble unique de bibliothèques d'API et d'agents pour capturer les métriques et les traces distribuées de vos applications. Ceci est applicable à de nombreux langages et plateformes. Le projet inclut également un service de collecte optionnel et possède un référentiel dédié aux spécifications. Il est important de noter qu'OpenTelemetry n'est pas Jaeger ou Prometheus (qui sont des backends d'observabilité), mais qu'il aide à l'exportation des données vers des backends open source et commerciaux.
Voici les fonctionnalités fournies par OpenTelemetry :
- Normalisation de la collecte de données de télémétrie pour une meilleure traçabilité, facilitant la migration d'un fournisseur à un autre.
- Une convention sémantique standard, ouverte et indépendante du fournisseur, pour le processus de collecte de données.
- Un collecteur pouvant être déployé en tant qu'agent, passerelle, ou via d'autres méthodes.
- Prise en charge de multiples formats de propagation de contexte pour la migration.
- Une solution complète pour générer, émettre, collecter, traiter et exporter des données de télémétrie.
- La possibilité d'envoyer des données vers différentes destinations en parallèle, avec un contrôle total.
Composants OpenTelemetry
Voici les composants fondamentaux d'OpenTelemetry :
- Proto : Ce composant sert à définir les types d'interfaces indépendants du langage pour OpenTelemetry, utilisés par les collecteurs, les bibliothèques d'instrumentation, etc.
- Collecteur : Les collecteurs sont utilisés pour recevoir, traiter et exporter les données de télémétrie. Cette implémentation doit être indépendante du fournisseur. Par défaut, toutes les données de télémétrie sont exportées par les bibliothèques d'instrumentation vers ce point.
- Spécification : Ce composant détaille les exigences et les attentes pour la mise en œuvre dans différents langages, incluant les API, les SDK et les données. L'API génère les données de télémétrie, les capacités de traitement et d'exportation sont fournies par les SDK. Les données ont des conventions sémantiques pour assurer la compatibilité avec tous les types de fournisseurs sans modification du code.
- Bibliothèques d'instrumentation : Elles sont disponibles dans divers langages dans le cadre du projet OpenTelemetry. Ces bibliothèques permettent d'ajouter l'observabilité à d'autres bibliothèques afin de rendre toutes les applications observables en faisant des appels à l'API OpenTelemetry.
Architecture OpenTelemetry
Image de la nouvelle relique
L'architecture d'OpenTelemetry est composée de trois éléments principaux :
- Un ensemble d'API pour instrumenter les applications, les bibliothèques et les frameworks.
- Le SDK, qui implémente les API.
- Un collecteur optionnel pour ingérer, agréger et exporter les données de télémétrie vers l'emplacement souhaité.
L'objectif de l'API est de faciliter la création d'instrumentation pour les bibliothèques et le code applicatif. L'API comprend quatre sections principales : le traçage, les compteurs, un contexte partagé et les conventions sémantiques.
- L'API Tracer permet de créer, d'annoter et de compléter les étendues.
- L'API de compteur est composée de plusieurs instruments métriques, comme les observateurs, les enregistreurs de valeur et les compteurs.
- Vous pouvez suivre et exécuter le contexte d'étendue en activant l'API de contexte et en propageant ce contexte à l'intérieur et à l'extérieur de votre système.
- Les conventions sémantiques contiennent toutes les directives et règles de dénomination (étendues, attributs, étiquettes et instruments métriques). Ces conventions assurent la cohérence entre les différentes implémentations de langage et pour les instrumentations externes.
Dans un contexte partagé, l'implémentation du contexte se situe entre le traceur et le compteur. Ceci permet à tous les enregistrements de métriques non observateurs de se dérouler dans le contexte d'une plage d'exécution. Une fonctionnalité permet aux SDK de capturer des étendues exemplaires pour les valeurs de métrique. Vous pouvez personnaliser le contexte avec des propagateurs, permettant de propager le contexte d'étendue à l'intérieur et à l'extérieur du système, permettant un traçage distribué authentique.
Le collecteur est un élément essentiel de l'architecture OpenTelemetry. Il s'agit d'un service autonome capable de recevoir, traiter et exporter des données de télémétrie depuis différentes sources, incluant OpenCensus, Zipkin, Jaeger et le protocole OpenTelemetry. Grâce aux collecteurs, vous pouvez exporter des étendues et des métriques vers plusieurs fournisseurs et systèmes de télémétrie open source.
L'architecture OpenTelemetry offre une solution complète et prête à l'emploi pour la télémétrie. Vous pouvez également personnaliser l'architecture selon vos besoins, via plusieurs points d'extension.
Comment fonctionne OpenTelemetry ?
Installez le client OpenTelemetry dans chaque service de votre déploiement. Le client correspond au SDK. Le SDK, à son tour, dispose d'une API. Vos frameworks et bibliothèques d'applications utilisent cette API d'instrumentation pour décrire le travail effectué. Le SDK exporte ensuite les observations recueillies vers un service de pipeline de données appelé Collecteur.
OpenTelemetry utilise son propre protocole de données, OTLP, mais le collecteur peut traduire OTLP en différents formats, comme Zipkin, Jaeger et Prométhée. Il est crucial de noter qu'OpenTelemetry ne fournit pas son propre backend ou outil d'analyse. Ceci découle de son objectif de normalisation. L'objectif est de proposer un langage universel pour décrire le fonctionnement des ordinateurs dans un environnement cloud. Il ne s'agit pas de standardiser la manière dont ces données sont analysées. OpenTelemetry vise à faire progresser l'observabilité en permettant à de nouveaux outils d'analyse de démarrer rapidement, sans avoir à reconstruire tout l'écosystème des logiciels de télémétrie.
Lors de l'envoi d'un volume important de données, il y a de nombreux éléments à prendre en compte. Heureusement, OpenTelemetry a anticipé ces questions et propose des solutions. OpenTelemetry est flexible et gère de multiples formats de propagation de contexte. Cela implique que, même avec une norme établie, il existe une possibilité de choix. Si vous utilisez le format de contexte de trace w3c ou la propagation b3, il s'agit de normes différentes au sein de la norme qui permettent à vos services de relier les informations.
Conclusion
OpenTelemetry collecte une diversité d'observations, dont les mesures de traçage distribué et les ressources système. Au lieu de les traiter comme des signaux séparés, OpenTelemetry les intègre et fournit un indexage et un contexte permettant d'agréger et d'indexer tous ces signaux au niveau du backend.
Outre la collecte de données, OpenTelemetry fournit un système de traitement et de pipeline de données. Ce système permet de modifier les formats de données, de manipuler vos données et d'utiliser tous les outils nécessaires pour créer un pipeline de télémétrie robuste dans un système moderne.
Voilà, l'essentiel concernant OpenTelemetry. N'hésitez pas à explorer cet outil.