
Soixante conteneurs sur un seul serveur
Une machine bare-metal exécute des dizaines à des centaines de conteneurs Hoody. La dédupplication KSM et BTRFS rend le coût marginal quasi nul.
Un incident éclate. Trois ingénieurs veulent les mêmes logs en même temps. Un émetteur envoie tail -F dans une URL Hoody Pipe. Toute personne avec le lien lance curl et voit les octets défiler en temps réel. Pas de bastion, pas d'agent à installer, pas de siège dashboard.
Sur le conteneur de prod, une seule ligne envoie tail directement dans une URL Hoody Pipe. Les récepteurs font GET sur le même chemin. Le pipe ne retient rien — les octets traversent. Le premier récepteur à se connecter débloque l'émetteur ; jusqu'à 256 lecteurs peuvent rejoindre le même chemin.
# On the production container — one line.
# tail -F follows new lines forever; curl -T - PUTs stdin
# straight into a pipe path. ?n=4 says "wait for 4 readers".
tail -F /var/log/app/*.log \
| curl -T - \
"https://prod-pipe.containers.hoody.com/api/v1/pipe/live?n=4"
# [INFO] Waiting for 4 receiver(s) to connect...
# [INFO] Streaming to 4 receiver(s)...# Any engineer with the URL — same command, same path.
# The response body IS the live stdout of the sender.
# Up to 256 readers can join. SSE progress is available too.
curl "https://prod-pipe.containers.hoody.com/api/v1/pipe/live?n=4"
# 200 GET /v1/orders/8421 · 18ms
# POST /v1/checkout user=u_28f payload=ok
# 500 POST /v1/checkout · stripe timeout
# retrying charge attempt=2/3Deux pièces de l'API Pipe documentée : PUT /api/v1/pipe/[path] sur l'émetteur, GET /api/v1/pipe/[path] sur chaque lecteur, tous deux indexés par le même n. Le serveur transmet le Content-Type de l'émetteur, maintient la connexion jusqu'à un TTL de 5 minutes en attendant les lecteurs, et applique un backpressure si un lecteur est lent.
Une URL de logs se comporte différemment d'un siège Datadog. Elle se lit par URL, pas par login. Elle disparaît quand l'émetteur s'arrête. Et elle s'étend à tout un canal d'incident.
n=N est documenté dans l'API Pipe : chaque lecteur qui rejoint le même chemin avec le même n reçoit une copie identique en fan-out. SRE, on-call, fondateur sur son téléphone — tous suivent le même flux en même temps.
Il n'y a rien à installer côté lecteurs. Tout ce qui parle HTTP — curl, fetch, un onglet de navigateur, un canal d'incident Slack qui prévisualise l'URL — est un tail valide. Les octets sont le corps de la réponse.
Quand l'émetteur se déconnecte, le pipe disparaît. Pas de rétention à configurer, pas de volume de logs à nettoyer, pas d'endpoint résiduel exposé sur Internet. L'URL était un chemin, pas un lieu — et le chemin se referme quand l'incident est terminé.
Tirés de la spec de l'API Pipe. Limites et comportements qui font qu'une URL ressemble à de l'infrastructure plutôt qu'à un jouet.
Le plafond documenté de n. Votre canal d'incident ne manquera jamais de places.
Le pipe est en streaming direct de bout en bout. Aucun disque intermédiaire, aucune rétention à gérer.
Les récepteurs peuvent se connecter avant l'émetteur ; le serveur garde la place jusqu'à 5 minutes.
Source : API Hoody Pipe — limites documentées pour /api/v1/pipe/[path], paramètre n et TTL des pipes non établis.
Les logs ne sont plus un lieu. Ce sont un chemin.
L'ensemble d'outils et de rituels que vous invoquez aujourd'hui pour avoir trois ingénieurs devant le même log de prod. Chacun facture par siège, par agent ou par dashboard. Le pipe est une seule URL.
L'incident se termine. Vous faites ctrl-C sur l'émetteur. Le pipe disparaît. Il n'y a rien à nettoyer.