Soixante conteneurs sur un seul serveur
Une seule machine bare-metal fait tourner des dizaines à des centaines de conteneurs Hoody. La déduplication KSM et BTRFS rend le coût marginal quasi nul.
Un incendie. Trois ingénieurs veulent les mêmes logs au même instant. Un seul émetteur pipe tail -F dans une URL Hoody Pipe. Quiconque a 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 ligne pipe tail directement dans une URL Hoody Pipe. Les récepteurs font GET sur le même chemin. Le pipe ne stocke rien — les octets passent à travers. Le premier récepteur connecté débloque l'émetteur ; jusqu'à 256 lecteurs peuvent rejoindre le même chemin.
# Sur le conteneur de production — une seule ligne.
# tail -F suit les nouvelles lignes pour toujours ; curl -T - PUT stdin
# directement dans un chemin pipe. ?n=4 dit "attends 4 lecteurs".
tail -F /var/log/app/*.log \
| curl -T - \
"https://prod-pipe.node-us-1.containers.hoody.com/api/v1/pipe/live?n=4"
# [INFO] Waiting for 4 receiver(s) to connect...
# [INFO] Streaming to 4 receiver(s)...# N'importe quel ingénieur avec l'URL — même commande, même chemin.
# Le corps de la réponse EST le stdout live de l'émetteur.
# Jusqu'à 256 lecteurs peuvent se brancher. Le progress SSE est aussi dispo.
curl "https://prod-pipe.node-us-1.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 morceaux de l'API Pipe documentée : PUT /api/v1/pipe/[path] côté émetteur, GET /api/v1/pipe/[path] côté chaque lecteur, tous deux indexés par le même n. Le serveur transmet le Content-Type de l'émetteur, garde la connexion ouverte jusqu'à un TTL de 5 minutes en attendant les lecteurs, et applique du backpressure si un lecteur traîne.
Une URL de logs se comporte autrement qu'un siège Datadog. Ça se lit par URL, pas par login. Ça disparaît quand l'émetteur s'arrête. Et ça scale jusqu'à un canal d'incident entier.
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, le fondateur qui regarde depuis son téléphone — tous tail le même flux en même temps.
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 de logs valide. Les octets sont le corps de la réponse.
Quand l'émetteur se déconnecte, le pipe disparaît. Aucune rétention à configurer, aucun volume de logs à nettoyer, aucun endpoint résiduel exposé sur Internet. L'URL était un chemin, pas un lieu — et le chemin se ferme quand l'incendie s'éteint.
Tirés de la spec de l'API Pipe. Limites et comportements qui font qu'une URL ressemble à de l'infra plutôt qu'à un jouet.
Le plafond documenté pour n. votre canal d'incident ne sera jamais à court de places.
Le pipe est en streaming direct de bout en bout. Pas de disque intermédiaire, pas de 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 faire en sorte que trois ingénieurs regardent le même log de prod. Chacun facture par siège, par agent ou par dashboard. Le pipe, c'est une URL.
L'incendie s'éteint. vous faites ctrl-C sur l'émetteur. Le pipe disparaît. Il n'y a rien à nettoyer.