L'art de la traçabilité

Une production ça s'observe

L'art de la traçabilité

Dans le développement d’applications web modernes, la traçabilité est un élément incontournable pour garantir la fiabilité, la sécurité et la performance des systèmes.

Chez Butterfly Therapeutics, nous avons une stack web Golang/PostgreSQL et Vue 3 (le tout Dockerisé), mais aussi des applications dans des casque de réalité virtuelle (sous Android), des applications Android et iOS. Pour monitorer l'ensemble, j'ai mis en place un stack Prometheus, Loki et Grafana.

Cela nous permet de nous assurer une visibilité robuste et complète sur l’état et le fonctionnement de nos applications.


Pourquoi la traçabilité est-elle essentielle ?

La traçabilité consiste à suivre chaque action, événement ou interaction dans une application web, qu'il s'agisse d'une requête utilisateur, d'un appel à une API ou d'une erreur inattendue. Voici pourquoi elle est si importante :

  1. Détection des problèmes en temps réel
    Une application qui plante sans explication peut frustrer les utilisateurs et causer des pertes de revenus. La traçabilité permet d’identifier rapidement la cause d’un problème, comme une requête mal formée ou un service externe défaillant.
  2. Amélioration continue
    En suivant les performances et les interactions, nous pouvons optimiser les parties critiques de nos applications et améliorer l’expérience utilisateur.
  3. Conformité et sécurité
    Travaillant dans le secteur de la santé chez Butterfly Therapeutics, il nous est obligatoire de tracer les actions pour des raisons de conformité légale. La traçabilité permet également de détecter et d’enquêter sur des activités suspectes ou des failles de sécurité.
  4. Collaboration inter-équipes
    Enfin des logs et métriques centralisés facilitent la communication entre développeurs, DevOps et autres parties prenantes, réduisant ainsi le temps de résolution des incidents.

Les fondamentaux de la traçabilité dans une application web

La traçabilité repose sur trois piliers :

Logging : Collecter et enregistrer les événements significatifs.

Monitoring : Suivre les performances et l’état de santé du système.

Tracing : Analyser les flux de données à travers les différents services pour surveiller le cheminement des requêtes.


Mise en œuvre

  1. Logging avec Loki

Loki est une solution de gestion de logs optimisée pour Kubernetes et Docker et qui s'intègre a la perfection avec Grafana (bon vous allez me dire c'est la même maison, mais quand même...)

Nous allons donc pouvoir intégrer des mécanismes de logging structurés, comme des logs JSON, pour capturer des informations précises sur :

  • Les erreurs (exceptions, échecs d’API, etc.)
  • Les événements métier (création d’un utilisateur, validation d’une commande, etc.)
  • Les diagnostics système (temps de réponse, charge serveur, etc.)

Pour intégrer Loki :

J'ai commencé par configurez Docker pour rediriger les logs de conteneurs vers Loki.

Puis j'ai ajouté un middleware de logging dans notre backend. Ainsi tout les logs applicatifs sont redirigé vers Loki

Visualisez et filtrez les logs dans Grafana.

  1. Monitoring avec Prometheus et Grafana

Prometheus est idéal pour collecter des métriques, tandis que Grafana excelle dans leur visualisation. Vous pouvez surveiller :

Les métriques backend : temps de réponse, erreurs HTTP, consommation mémoire.

Les métriques frontend : temps de chargement des composants Vue 3, nombre de sessions actives.

Exemple :
Instrumentez votre application Golang avec des bibliothèques comme prometheus/client_golang pour exporter des métriques. Ces métriques seront collectées par Prometheus et affichées dans des tableaux de bord Grafana.

  1. Tracing avec OpenTelemetry

Le tracing distribué est essentiel dans une architecture microservices. OpenTelemetry, compatible avec votre stack, peut tracer le parcours d’une requête à travers vos services Dockerisés.

Configurez votre backend Golang pour envoyer des traces détaillées (par exemple, une requête entrante suivie de son appel à une API externe).

Ajoutez un identifiant unique à chaque requête pour corréler les logs, métriques et traces.


Bonnes pratiques pour une traçabilité optimale

  1. Adoptez une approche standardisée
    Utilisez des formats de logs et de métriques cohérents (comme JSON pour les logs et PromQL pour les métriques) pour faciliter leur analyse.
  2. Centralisez vos données
    Concentrez vos logs, métriques et traces dans un seul endroit pour une visibilité totale. Grafana peut agréger Loki, Prometheus et OpenTelemetry dans des tableaux de bord unifiés.
  3. Automatisez les alertes
    Configurez Prometheus pour déclencher des alertes en cas d’anomalies, comme un taux d’erreurs élevé ou une latence excessive.
  4. Protégez les données sensibles
    Évitez de stocker des informations sensibles dans les logs. Si nécessaire, anonymisez ou masquez les données.

Conclusion

La traçabilité est bien plus qu’un simple luxe dans une application web moderne ; c’est un impératif pour garantir des systèmes fiables, sécurisés et performants. Avec une stack technique combinant Golang, Vue 3, Docker, et des outils puissants comme Grafana, Prometheus, et Loki, vous avez tous les outils nécessaires pour mettre en place une traçabilité efficace.

Investir du temps dans la traçabilité vous permettra non seulement de résoudre les problèmes plus rapidement, mais aussi de construire une application qui inspire confiance à vos utilisateurs et à vos équipes. Alors, n’attendez pas pour intégrer la traçabilité dès la phase de développement !


Si cet article vous a été utile ou si vous avez des suggestions, n’hésitez pas à partager votre expérience dans les commentaires !