Accueil > Télémétrie : la garantie d’un code qui fonctionne
Mohamed Ben Slimen
25 avril 2023
Read this post in English

Télémétrie : la garantie d’un code qui fonctionne

Télémétrie : la garantie d'un code qui fonctionne

Dans les cercles du développement logiciel, les discussions sur le Craftsmanship – ou l’art de l’artisanat – se concentrent souvent sur des techniques de code telles que “Clean Code“, “Clean Architecture“, “SOLID“, “YAGNI” où, de manière plus abstraite, elles abordent la « Clean Architecture » avec ses couches en oignon ou son architecture hexagonale, etc.

Ces conversations sont fondamentales et révèlent la maturité d’une équipe de développement. Toutefois, en nous concentrant exclusivement sur ces aspects, nous avons tendance à négliger un élément tout aussi essentiel : l’impact du code que nous écrivons sur les attributs de qualité de nos systèmes (voir notre article précédent sur Comment choisir l’architecture logicielle idéale grâce aux Architectural Drivers).

Dans ce cadre, la télémétrie émerge comme un complément important à l’expertise artisanale, en comblant le vide entre la qualité du code et les attributs de qualité du système. La télémétrie offre aux développeurs la possibilité de surveiller, d’analyser, et d’améliorer les performances et la fiabilité de leur code en offrant des informations précieuses sur le comportement du système en temps réel.

Dans cet article, nous examinerons comment l’intégration de la télémétrie dans le processus de développement renforce notre engagement envers les principes de l’artisanat, en garantissant non seulement un code soigné et bien organisé, mais également la qualité nécessaire et une efficacité globale du système.

 

Comprendre la télémétrie

 

La télémétrie est le processus de collecte, de mesure et d’analyse des données sur les performances, l’utilisation et les comportements d’un système logiciel, en temps réel ou en différé.

Les données de télémétrie sont essentielles pour identifier les problèmes, optimiser les fonctionnalités, et prendre des décisions basées sur des données objectives, que votre système soit un monolithe ou sur une architecture distribuée.

 

Comment fonctionne la télémétrie : un processus en 4 étapes

 

La télémétrie repose sur quatre composantes clés :

  1. L’instrumentation du code : L’instrumentation implique l’ajout de points de collecte de données au code source du logiciel, tels que des compteurs de performance, des traceurs d’événements ou des journaux.
  2. La collecte de données : Une fois que le code a été instrumenté, les données générées sont collectées et transmises à un système centralisé pour être stockées et analysées. La collecte de données peut être effectuée en temps réel ou à intervalles réguliers, en fonction des besoins de l’application et des contraintes de performance.
  3. L’agrégation et l’analyse des données : Les données collectées sont ensuite agrégées et analysées pour identifier les tendances, les modèles et les problèmes potentiels, en utilisant des méthodes comme l’analyse statistique, l’analyse des séries temporelles ou l’apprentissage automatique.
  4. La visualisation des résultats : Les résultats de l’analyse des données sont présentés sous forme de graphiques, tableaux de bord et rapports pour faciliter l’interprétation et la compréhension, permettant aux équipes et parties prenantes de prendre des décisions éclairées.

 

Types de données collectées par la télémétrie

 

Trois catégories de données sont généralement collectées grâce à la télémétrie : les traces, les métriques et les logs.

 

Les Traces

 

Les traces illustrent les transactions ou les flux d’exécution à travers les composants d’un système, permettant de comprendre les interactions entre les composants et d’identifier les goulots d’étranglement ou les problèmes de performance. Voici quelques exemples de traces que vous pouvez collecter selon vos besoins :

  • Traçage des requêtes API : Lorsqu’un client envoie une requête à une API, une trace peut être créée pour suivre le parcours de la requête à travers les différents services et composants impliqués. Cela inclut les temps de latence entre les services, les éventuelles erreurs rencontrées, et les temps de réponse globaux.
  • Traçage des transactions de base de données : Les traces peuvent être utilisées pour suivre les requêtes et les transactions effectuées sur une base de données. Cela permet d’identifier les requêtes lentes, les problèmes de verrouillage, et les goulots d’étranglement liés aux performances de la base de données.
  • Traçage des opérations entre microservices : Dans une architecture microservices, les traces peuvent être utilisées pour suivre les interactions entre les différents microservices qui constituent une application. Cela permet d’identifier les problèmes de communication entre les services, les défaillances des services individuels ou les problèmes de performance globale.
  • Traçage des appels de fonction : Les traces peuvent également être utilisées pour suivre les appels de fonction au sein d’une application. Cela peut aider à identifier les zones de code qui prennent beaucoup de temps à s’exécuter ou qui génèrent des erreurs.

 

Les Métriques

 

Les métriques sont des mesures quantitatives offrant un aperçu des aspects spécifiques de la performance, de l’utilisation des ressources ou du fonctionnement d’un logiciel. Les exemples incluent le temps de réponse d’une requête, le taux d’erreur, le taux de consommation de ressources et la latence. Par exemple :

  • Taux de requêtes par seconde (RPS) : Cette métrique mesure le nombre de requêtes traitées par une application ou un service par seconde. Un RPS élevé peut indiquer une charge importante sur le système, et peut nécessiter une optimisation ou une mise à l’échelle.
  • Taux d’erreur : Le taux d’erreur mesure la fréquence à laquelle des erreurs se produisent dans le système, comme des erreurs de connexion ou des erreurs de traitement de données. Un taux d’erreur élevé peut indiquer des problèmes de stabilité ou de performance.
  • Utilisation de la mémoire (RAM) : Cette métrique indique la quantité de mémoire utilisée par une application ou un service. Une utilisation élevée de la mémoire peut entraîner des problèmes de performance ou des plantages du système.
  • Utilisation du processeur (CPU) : Cette métrique mesure le pourcentage d’utilisation du processeur par une application ou un service. Une utilisation élevée du CPU peut indiquer une charge importante sur le système, et peut nécessiter une optimisation ou une mise à l’échelle.
  • Temps de réponse : Le temps de réponse mesure le temps écoulé entre le moment où une requête est envoyée à un système et le moment où la réponse est reçue. Un temps de réponse élevé peut indiquer des problèmes de performance ou des goulots d’étranglement.
  • Taux de disponibilité : Le taux de disponibilité mesure la proportion de temps pendant laquelle un service ou une application est opérationnel et accessible. Un taux de disponibilité élevé est essentiel pour garantir une expérience utilisateur optimale.

 

Les Logs

 

Les logs sont des enregistrements chronologiques d’événements ou d’actions qui se produisent au sein d’un logiciel, généralement utilisés pour le débogage, l’analyse des problèmes et la surveillance préventive de l’activité du système.

  1. Logs d’erreurs : Les logs d’erreurs enregistrent les erreurs rencontrées par une application ou un service, telles que les exceptions non gérées, les erreurs de connexion ou les problèmes d’accès aux ressources. Ces logs peuvent aider à identifier et à résoudre les problèmes.
    [2023-04-20 14:35:12] ERROR: Failed to connect to database - ConnectionTimeoutException

  1. Logs d’information : Les logs d’information fournissent des informations générales sur le fonctionnement normal de l’application ou du service. Ils sont utiles pour suivre l’état du système et les actions des utilisateurs.
    [2023-04-20 14:35:30] INFO: User 'johndoe' successfully logged in

  1. Logs de débogage : Les logs de débogage contiennent des informations détaillées sur le fonctionnement interne d’une application ou d’un service, utiles pour le développement et le débogage de problèmes complexes.
    [2023-04-20 14:35:45] DEBUG: Executing SQL query: SELECT * FROM users WHERE id = 42

  1. Logs d’avertissement : Les logs d’avertissement signalent des situations potentiellement problématiques ou des événements inhabituels qui peuvent nécessiter une attention particulière, bien qu’ils n’entraînent pas nécessairement d’erreurs.
    [2023-04-20 14:36:10] WARNING: Disk usage exceeded 90%, consider cleaning up or expanding storage

  1. Logs d’accès : Les logs d’accès enregistrent les demandes et les réponses envoyées et reçues par un service ou une application, notamment les informations sur les clients, les URL demandées, les codes de statut HTTP et les durées de réponse.
[2023-04-20 14:36:25] ACCESS: 192.168.1.2 - - [20/Apr/2023:14:36:25 +0000] "GET /api/v1/users/42 HTTP/1.1" 200 356

 

La télémétrie au service de la qualité du code

 

Dans cette partie, nous explorerons comment la télémétrie peut être utilisée pour améliorer la qualité du code et garantir que les applications et les services fonctionnent de manière optimale. Nous examinerons également comment la télémétrie peut aider à détecter et résoudre les problèmes avant qu’ils n’affectent les utilisateurs finaux.

 

La télémétrie pour le suivi des attributs de qualité

 

La télémétrie peut être utilisée pour surveiller en continu les attributs de qualité d’un logiciel, tels que la performance, la fiabilité, la sécurité et l’évolutivité. En intégrant la télémétrie dans le processus de développement, les développeurs peuvent rapidement identifier les problèmes potentiels et les corriger avant qu’ils ne deviennent des problèmes majeurs.

Par exemple, la surveillance des métriques de performance, telles que le temps de réponse et la latence, peut aider les développeurs à détecter les goulots d’étranglement, et à optimiser leur code pour améliorer la vitesse et l’efficacité de l’application.

 

La télémétrie pour le débogage et l’analyse des problèmes

 

La télémétrie peut également être utilisée pour faciliter le débogage et l’analyse des problèmes en fournissant des informations détaillées sur le comportement du système et les erreurs rencontrées. Les traces, les métriques et les logs collectés par la télémétrie permettent aux développeurs de comprendre les causes profondes des problèmes, et de résoudre rapidement les erreurs, les problèmes de performance et les problèmes de sécurité.

 

La télémétrie pour la prise de décision basée sur les données

 

En intégrant la télémétrie dans le processus de développement, les équipes de développement peuvent prendre des décisions basées sur des données objectives et mesurables, plutôt que sur des intuitions ou des suppositions. Les données de télémétrie peuvent être utilisées pour évaluer l’efficacité des changements de code, pour déterminer les priorités de développement, et pour guider la prise de décision en matière d’architecture et de conception.

 

La télémétrie pour la surveillance proactive et la maintenance préventive

 

La télémétrie permet une surveillance proactive des applications et des services, ce qui permet aux équipes de développement et d’exploitation de détecter et de résoudre les problèmes avant qu’ils n’affectent les utilisateurs finaux. En surveillant les tendances et les modèles dans les données de télémétrie, les équipes peuvent également planifier et effectuer des actions de maintenance préventive pour éviter les problèmes futurs, et assurer une disponibilité maximale du système.

 

Élaborer une stratégie de télémétrie fiable et efficace

 

Bien que la télémétrie puisse être mise en œuvre par la plupart des développeurs, la création d’une approche solide et bien pensée peut aider à garantir que la télémétrie soit utilisée de manière optimale pour améliorer la qualité du code et la performance du système.

Voici les éléments clés et les étapes nécessaires pour concevoir et mettre en œuvre une stratégie de télémétrie fiable et efficace :

 

Etape 1 : Définir les objectifs de la télémétrie

 

La première étape pour élaborer une stratégie de télémétrie consiste à définir les objectifs que vous souhaitez atteindre. Par exemple :

  • Améliorer la performance et la fiabilité du système
  • Détecter et résoudre rapidement les problèmes
  • Identifier les goulots d’étranglement et les optimiser
  • Prendre des décisions éclairées sur l’architecture et la conception

 

Etape 2 : Identifier les métriques et les données pertinentes

 

Après avoir établi vos objectifs en lien avec la qualité du code, comme vu dans la partie précédente, il est important d’identifier les métriques et les données qui vous permettront de les atteindre. Les types d’informations à considérer incluent :

  • Des traces pour surveiller les transactions et les interactions entre les composants du système, contribuant ainsi à l’optimisation de la qualité du code.
  • Des métriques pour mesurer des aspects spécifiques de la performance, de l’utilisation des ressources et du fonctionnement du logiciel, permettant d’évaluer l’impact de la qualité du code sur l’ensemble du système.
  • Des logs pour enregistrer les événements et les actions qui se produisent au sein du logiciel, fournissant un aperçu du comportement du système en rapport avec la qualité du code, et facilitant l’identification et la résolution des problèmes associés.

 

Etape 3 : Instrumenter le code

 

La prochaine étape consiste à instrumenter le code pour collecter les données nécessaires. Cela implique d’intégrer des points de collecte de données dans le code source, tels que des compteurs de performance, des traceurs d’événements et des journaux.

 

Etape 4 : Collecter, agréger et analyser les données

 

Une fois que le code a été instrumenté, mettez en place des systèmes pour collecter, agréger et analyser les données. Cela peut inclure l’utilisation de services et d’outils de télémétrie pour collecter et stocker les données, ainsi que l’application de méthodes d’analyse pour identifier les tendances, les modèles et les problèmes potentiels :

  1. Prometheus : Prometheus est un système de surveillance et d’alerte open-source qui collecte et stocke les métriques de vos services et applications. Il est conçu pour traiter les données de séries temporelles et est souvent utilisé avec Grafana pour la visualisation des données.
  2. Elasticsearch, Logstash, Kibana (ELK Stack) : ELK Stack est une combinaison de trois outils open-source (Elasticsearch, Logstash et Kibana) qui permettent de collecter, de stocker, d’indexer et de visualiser les données de logs de manière centralisée. Elasticsearch est un moteur de recherche distribué, Logstash est un pipeline de traitement de données et Kibana est un outil de visualisation de données.
  3. Datadog : Datadog est un service de surveillance et d’analyse des performances pour les applications Cloud. Datadog collecte et agrège les données de métriques, de traces et de logs pour vous aider à surveiller, dépanner et optimiser vos applications.
  4. Azure Monitor : Azure Monitor est un service de surveillance et de diagnostic intégré à la plateforme Azure qui vous permet de collecter, analyser et agir sur les données de télémétrie de vos ressources Azure et de vos applications. Azure Monitor prend en charge la collecte de métriques, de logs, et de traces, et offre des fonctionnalités avancées telles que l’alerte, l’analyse des données et l’intégration avec d’autres services Azure pour une surveillance unifiée.

 

Etape 5 : Visualiser et agir sur les résultats

 

Enfin, présentez les résultats de l’analyse des données sous forme de graphiques, de tableaux de bord et de rapports, pour faciliter leur interprétation et leur compréhension. Utilisez ensuite ces informations pour prendre des décisions sur la manière d’améliorer le code et la performance du système, et pour détecter et résoudre les problèmes.

 

Conseils et bonnes pratiques sur la télémétrie

 

La télémétrie est un outil précieux pour les développeurs de logiciels, car elle permet de recueillir des informations sur l’utilisation du logiciel en temps réel. Les données collectées peuvent être utilisées pour identifier les problèmes, améliorer les performances et optimiser l’expérience utilisateur. Cependant, la collecte de données peut également être source de préoccupation pour les utilisateurs, en raison de problèmes de confidentialité et de sécurité.

Voici quelques bonnes pratiques à suivre pour garantir une utilisation responsable et efficace de la télémétrie dans le développement logiciel :

  1. Définir clairement les données à collecter : Avant de commencer à collecter des données, il est important de définir clairement les données à collecter, et de s’assurer qu’elles sont pertinentes pour le développement du logiciel. Il est également capital de déterminer comment les données seront utilisées, et comment elles seront stockées et protégées.
  2. Informer les utilisateurs de la collecte de données : Les utilisateurs doivent être informés de manière claire et concise de la collecte de données. Cela peut être fait en fournissant une politique de confidentialité claire et facilement accessible, ou en incluant un message dans l’interface utilisateur du logiciel.
  3. Obtenir le consentement de l’utilisateur : Les utilisateurs doivent donner leur consentement explicite avant que les données ne soient collectées. Il est également important de donner aux utilisateurs la possibilité de refuser la collecte de données.
  4. Assurer la sécurité des données : Les données collectées doivent être stockées et protégées de manière sécurisée pour éviter tout accès non autorisé. Il est important de suivre les meilleures pratiques en matière de sécurité des données, telles que le chiffrement et la limitation de l’accès aux données.
  5. Utiliser les données de manière responsable : Les données collectées doivent être utilisées de manière responsable et transparente. Les développeurs doivent s’assurer que les données ne sont pas utilisées à des fins malveillantes, et qu’elles ne sont pas partagées avec des tiers sans le consentement de l’utilisateur :
  • Anonymisation des données : Pour préserver la vie privée des utilisateurs, assurez-vous que les données collectées ne contiennent pas d’informations personnelles identifiables (PII) ou anonymisez-les avant de les stocker et de les analyser.
  • Limitation de la collecte des données : Ne collectez que les données nécessaires pour atteindre vos objectifs de télémétrie, en évitant de collecter des informations sensibles ou non pertinentes.
  • Sécurisation des données : Protégez les données collectées en utilisant des méthodes de chiffrement et de stockage sécurisées, et contrôlez l’accès aux données en définissant des autorisations et des rôles appropriés.
  1. Documentation : Documentez les processus de télémétrie, les métriques et les outils utilisés pour faciliter la compréhension et la collaboration au sein de l’équipe.
  2. Dont Repeat Yourself (DRY) : Vous pouvez utiliser comme un point de départ une des approches éprouvées telles que “USE”, “RED” et les “Four Golden Signals”. Ces méthodes fournissent des métriques clés pour surveiller la santé et les performances d’un système, et il est possible d’adopter une ou plusieurs méthodes ou de les combiner en fonction de vos besoins spécifiques.

 

Méthode Objectif Métriques clés
USE Identifier les problèmes de performance des ressources système ·       Utilisation : le pourcentage de temps pendant lequel la ressource est occupée à servir des demandes.

·       Saturation : la quantité de travail en attente pour une ressource, souvent en file d’attente.

·       Erreurs : le nombre d’erreurs générées par la ressource.

RED Identifier les problèmes de performance des services ·       Taux : le nombre de requêtes par seconde traitées par le service.

·       Erreurs : le nombre d’erreurs par seconde générées par le service.

·       Durée : la durée des requêtes traitées par le service.

Four Golden Signals Surveiller la santé et les performances d’un système ·       Latence : le temps nécessaire pour traiter une requête.

·       Trafic : la quantité de demandes reçues par le système.

·       Erreurs : le taux d’erreurs générées par le système.

·       Saturation : l’utilisation des ressources du système et la capacité restante.

 

L’avenir de la télémétrie avec OpenTelemetry

 

OpenTelemetry est un projet open source qui vise à simplifier l’intégration de la télémétrie dans les applications. Il offre une solution complète pour collecter des données de télémétrie à partir de différents types d’applications, de services et de plateformes, en utilisant une API standardisée et des SDK pour différents langages de programmation, ainsi qu’un système de plugins pour une intégration facile avec différents services de télémétrie. Cette approche standardisée et ouverte de la télémétrie devrait permettre aux développeurs de travailler plus efficacement et de tirer pleinement parti de la surveillance et de l’optimisation des systèmes.

Si vous voulez en savoir plus, nous vous invitons à consulter notre précédent article sur OpenTelemétry : instrumentation en .NET dans le futur.

 

Télémétrie : l’essentiel à retenir

 

La télémétrie est un élément essentiel de la boîte à outils des développeurs modernes. En surveillant les performances du système, en identifiant les problèmes de manière proactive, et en prenant des mesures pour les résoudre rapidement, les développeurs peuvent offrir une expérience utilisateur optimale et une qualité supérieure des logiciel développés, ce qui est le sens ultime de la philosophie du Craftsmanship.

Vous souhaitez en savoir plus sur le Craftsmanship ? Retrouvez tous les articles du Mois du Craf de Cellenza :

 

Offres d'emploi consultant Cloud Paris Lyon Nantes Cellenza

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.