- Un outil qui permet de suivre toutes les requêtes réseau émises depuis des conteneurs Docker
- Il applique les capacités de Wireshark à l’environnement des conteneurs
- Cela permet d’analyser en temps réel le trafic réseau des serveurs backend et de résoudre plus rapidement les problèmes en production
Fonctionnalités principales
- Utilisable immédiatement, sans configuration supplémentaire
- Il suffit d’ajouter
subtrace run devant la commande de lancement du serveur backend
- Aucune modification du code nécessaire
- Compatible avec tous les langages de programmation (Python, Node.js, Go, etc.)
- Permet de consulter la charge utile complète des requêtes, les en-têtes, les codes d’état et la latence
- Surcharge de performance inférieure à 100µs
- Basé sur Clickhouse
- Open source
Comment fonctionne Subtrace
- Intercepte tous les appels système Linux (
syscall) liés au réseau à l’aide de Seccomp BPF
- Proxyfie les connexions TCP pour analyser les requêtes HTTP, puis les envoie au navigateur via WebSocket
- Permet de visualiser les requêtes via l’onglet réseau de Chrome DevTools
- Contrairement aux approches fondées sur les logs comme Sentry ou OpenTelemetry, il permet de voir toutes les requêtes telles quelles en temps réel
À propos des contributions au code
- Subtrace est open source, mais n’accepte actuellement pas de Pull Requests
- En raison de la nature startup du projet, il est exploité par une petite équipe qui n’a pas la capacité de gérer efficacement une communauté open source
- Cette politique pourra évoluer à l’avenir, et les demandes de fonctionnalités comme les rapports de bugs sont toujours les bienvenus
2 commentaires
On dirait qu’il suffirait de repérer le problème avec Falco ou linkerd, puis de l’analyser avec subtrace si nécessaire~ :)
Commentaires sur Hacker News
subtraceenvoie toutes les données au serveur. Je ne voudrais pas faire ça dans un environnement de production qui manipule des clés d’API et des données personnellessubtracea besoin d’une connexion réseau ? Tout cela devrait s’exécuter localement, et ce type de détails de connexion ne devrait jamais quitter l’hôteBPF_PROG_TYPE_CGROUP_SOCK, mais cela ne fonctionne pas du tout dans les conteneurs. C’est impressionnant de voir que l’interception de tous les appels système concernés fonctionne bien