Odigos (YC W23) – traçage distribué instantané pour les clusters Kubernetes
(github.com/keyval-dev)Bonjour, nous sommes Eden et Ari, cofondateurs d’Odigos (https://github.com/keyval-dev/odigos). Odigos est un projet open source qui génère instantanément des traces distribuées (distributed trace) pour les applications afin que les utilisateurs puissent les exploiter facilement. Odigos est compatible avec les outils de monitoring existants et ne nécessite aucune modification du code source.
Nos expériences passées avec les anciens outils de monitoring étaient très décevantes. En surveillant des systèmes distribués composés de plusieurs microservices, nous avons constaté que nous passions beaucoup trop de temps à identifier le microservice à l’origine d’un problème. Par exemple, il nous est arrivé de passer des heures à déboguer une application que nous soupçonnions de provoquer de la latence, avant de découvrir bien trop tard que la cause venait en réalité d’une autre application liée.
Nous nous sommes alors penchés sur le traçage distribué (distributed tracing), mieux adapté à ce type de problème. Contrairement aux métriques ou aux logs, qui capturent des données à un instant donné dans une application unique, le traçage distribué attribue un identifiant unique à chaque requête pour suivre sa propagation dans un environnement distribué. Cela permet aux développeurs de comprendre le contexte de chaque requête et la manière dont les applications distribuées se comportent.
Cette approche a toutefois un inconvénient : elle est difficile à mettre en œuvre. Contrairement aux métriques ou aux logs d’une application unique, le traçage distribué doit être implémenté à travers plusieurs applications. S’il existe ne serait-ce qu’une seule application qui ne génère pas de traces distribuées, la propagation du contexte est interrompue et la valeur de cette trace diminue fortement.
D’après notre expérience de mise en œuvre manuelle du traçage distribué pour plusieurs entreprises, il est très difficile de coordonner toutes les équipes de développement afin qu’elles instrumentent chaque application pour obtenir un traçage distribué complet. Une fois l’implémentation terminée, la valeur était énorme, car les incidents en production pouvaient être résolus beaucoup plus rapidement. En revanche, une implémentation partielle apportait peu de valeur.
Nous avons donc commencé à automatiser ce processus. Nous savions déjà comment traiter la plus grande partie du problème, mais la partie la plus délicate consistait à instrumenter automatiquement des programmes écrits dans des langages compilés, comme Go. Nous pensions que si nous pouvions automatiser cette seule partie, il deviendrait possible d’automatiser tout le processus de génération de traces distribuées. Au cours de nos recherches, nous avons compris qu’en utilisant eBPF (une technologie permettant au noyau Linux de charger des programmes externes et de les exécuter dans le noyau), il devenait possible d’automatiser l’instrumentation des langages compilés. C’était la dernière pièce du puzzle, et cela nous a permis de développer Odigos.
Odigos commence par analyser toutes les applications en cours d’exécution, puis utilise eBPF et OpenTelemetry pour reconnaître le langage de programmation de chaque application et l’instrumenter automatiquement en conséquence. Il déploie également des collecteurs qui mettent les données en tampon, les filtrent et les transmettent à l’outil de monitoring choisi, tout en effectuant un auto scaling en fonction du volume de trafic. Grâce à cette automatisation, les développeurs peuvent exploiter le traçage distribué en quelques minutes seulement, au lieu de tâches manuelles pouvant nécessiter plusieurs mois d’implémentation.
L’instrumentation automatique à travers différents langages n’est pas une tâche simple, surtout lorsqu’il faut prendre en compte des binaires statiques, comme ceux générés par le compilateur Go. Nous avons introduit divers mécanismes permettant d’injecter les en-têtes nécessaires de manière sûre et fiable, et nous avons développé un système capable de suivre les fonctions et structures de différentes versions de bibliothèques open source. Nous avons également développé un système de gestion de la mémoire en espace utilisateur (userspace) dans eBPF. En conséquence, Odigos est devenu la seule solution capable de générer automatiquement des traces distribuées pour des langages compilés comme Go et Rust. Là où d’autres solutions exigent que les utilisateurs deviennent experts en OpenTelemetry ou en eBPF, notre solution ne requiert aucune connaissance préalable des technologies d’observability.
Notre solution peut être installée sur un cluster Kubernetes avec une seule commande. Une fois installée, elle détecte le langage de programmation de toutes les applications en cours d’exécution et applique l’instrumentation appropriée. Pour les langages JIT (Java et .NET) ou interprétés (JavaScript et Python), elle déploie des instrumentations OpenTelemetry. Pour les langages compilés (Go, Rust, C), elle déploie des instrumentations basées sur eBPF. Tout cela est abstrait pour l’utilisateur : il lui suffit de (1) sélectionner tout ou partie des applications cibles, puis (2) choisir le backend auquel envoyer les données de monitoring.
En mai 2022, nous avons publié notre premier projet open source : un instrumenteur automatique pour applications Go basé sur eBPF. Par la suite, nous avons donné ce projet à la communauté OpenTelemetry, où il est désormais développé au sein du Go Automatic Instrumentation SIG.
Nous croyons fermement aux standards ouverts, c’est pourquoi l’instrumentation et les collecteurs utilisés par Odigos reposent tous sur des projets open source développés par la communauté OpenTelemetry. Cela nous permet d’éviter toute dépendance à un fournisseur particulier.
Nous nous concentrons actuellement sur la construction du projet open source. Il n’existe pas encore de tarification ni de fonctionnalités payantes, mais nous prévoyons à l’avenir de proposer également une version managée d’Odigos incluant des fonctionnalités enterprise.
Vous trouverez plus d’informations ci-dessous.
- Documentation : https://docs.odigos.io
- Vidéo (démo) : https://www.youtube.com/watch?v=9d36AmVtuGU
- Site web : https://odigos.io
Nous aimerions beaucoup connaître vos expériences et échanger autour du traçage et du monitoring des applications distribuées !
1 commentaires
Bonjour, c’est la première fois que nous publions ici. Nous aimerions recevoir les retours de la communauté. N’hésitez pas à rejoindre le canal Slack.
https://join.slack.com/t/odigos/…
Merci !