18 points par GN⁺ 2025-02-21 | 2 commentaires | Partager sur WhatsApp
  • 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

 
codemasterkimc 2025-02-21

On dirait qu’il suffirait de repérer le problème avec Falco ou linkerd, puis de l’analyser avec subtrace si nécessaire~ :)

 
GN⁺ 2025-02-21
Commentaires sur Hacker News
  • En lisant la documentation, on a l'impression que le processus subtrace envoie 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 personnelles
    • Je me demande s’il existe un moyen de l’exécuter entièrement en auto-hébergement. Sinon, est-ce prévu ? Je me demande aussi comment vous comptez monétiser une option auto-hébergée
  • La comparaison avec Wireshark est un peu trompeuse. C’est plus proche d’un « inspecteur réseau » comme l’onglet réseau du navigateur
    • Ça a l’air vraiment utile, et je vais certainement l’essayer pour voir si ça mérite une place dans ma boîte à outils
  • Cela semble ne concerner que les requêtes HTTP. Si c’est le cas, la comparaison avec Wireshark n’est pas appropriée
  • Dans le réseau Docker, les scénarios de débogage les plus pénibles concernent toujours le trafic non-TCP. Cela dit, ça a l’air utile. Ce que je ne comprends pas, c’est pourquoi un jeton de compte est nécessaire. Est-ce que subtrace a 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ôte
  • Félicitations pour l’interception basée sur seccomp. C’est une façon vraiment élégante de résoudre ce problème. Nous avons fait un travail intéressant dans mitmproxy avec l’eBPF BPF_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
  • Je me demande s’il peut déchiffrer le TLS. Ce serait probablement possible en accrochant les appels de bibliothèques courants
  • En regardant la vidéo, on dirait que le tableau de bord est hébergé sur sibtrace.dev. Je me demande si mes données y sont envoyées. Hors de question
  • Je ne l’ai pas essayé, mais je me demande comment on peut déboguer une requête ou une session spécifique en production. Je me demande s’il est possible de filtrer avec quelque chose comme un identifiant de traçage de requête
  • J’ai toujours voulu un outil comme celui-ci. Je l’essaierai la prochaine fois que j’aurai besoin d’inspecter le trafic d’un conteneur Docker