
Sechzig Container auf einem Server
Eine Bare-Metal-Box führt Dutzende bis Hunderte von Hoody-Containern aus. KSM und BTRFS-Dedup machen die Marginalkosten nahezu null.
Ein Feuer bricht aus. Drei Engineers wollen dieselben Logs zur selben Zeit. Ein Sender pipet tail -F in eine Hoody-Pipe-URL. Jeder mit dem Link führt curl aus und sieht die Bytes in Echtzeit vorbeiziehen. Keine Bastion, keine Agent-Installation, kein Dashboard-Sitz.
Auf dem Prod-Container pipet eine einzige Zeile tail direkt in eine Hoody-Pipe-URL. Empfänger machen GET auf denselben Pfad. Die Pipe hält nichts — Bytes streamen hindurch. Sobald der erste Empfänger verbindet, wird der Sender entblockt; bis zu 256 Leser können denselben Pfad teilen.
# 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/3Zwei Teile der dokumentierten Pipe-API: PUT /api/v1/pipe/[path] auf dem Sender, GET /api/v1/pipe/[path] auf jedem Leser, beide über dasselbe n verknüpft. Der Server leitet den Content-Type des Senders weiter, hält die Verbindung bis zu 5 Minuten TTL offen, während er auf Leser wartet, und wendet Backpressure an, falls ein einzelner Leser zu langsam ist.
Eine Logs-URL verhält sich anders als ein Datadog-Sitz. Sie wird über die URL gelesen, nicht über Login. Sie verschwindet, wenn der Sender stoppt. Und sie skaliert auf einen ganzen Incident-Channel.
n=N ist in der Pipe-API dokumentiert: jeder Leser, der demselben Pfad mit demselben n beitritt, bekommt eine identische Fan-out-Kopie. SREs, On-Call, der Founder, der vom Handy zuschaut — alle verfolgen denselben Stream gleichzeitig.
Auf der Empfängerseite gibt es nichts zu installieren. Alles, was HTTP spricht — curl, fetch, ein Browser-Tab, ein Slack-Incident-Channel mit URL-Vorschau — ist ein gültiger Log-Tail. Die Bytes sind der Response-Body.
Wenn der Sender die Verbindung trennt, verschwindet die Pipe. Keine Retention zu konfigurieren, kein Log-Volumen aufzuräumen, kein verwaister Endpoint, der ans Internet hängt. Die URL war ein Pfad, kein Ort — und der Pfad schließt, wenn das Feuer endet.
Aus der Pipe-API-Spec. Limits und Verhalten, die eine URL wie Infrastruktur wirken lassen statt wie Spielzeug.
Das dokumentierte Limit für n. Deinem Incident-Channel gehen die Plätze nicht aus.
Die Pipe wird Ende-zu-Ende direkt gestreamt. Keine Zwischen-Disk, keine Retention zu verwalten.
Empfänger können sich vor dem Sender verbinden; der Server hält den Slot bis zu 5 Minuten.
Quelle: Hoody Pipe API — Limits dokumentiert für /api/v1/pipe/[path], n-Parameter und unestablished Pipe-TTL.
Logs sind kein Ort mehr. Sie sind ein Pfad.
Die Tools und Rituale, die du heute aufrufst, um drei Engineers auf dieselben Prod-Logs starren zu lassen. Jedes davon kostet pro Sitz, pro Agent oder pro Dashboard. Die Pipe ist eine URL.
Das Feuer endet. Du drückst ctrl-C beim Sender. Die Pipe verschwindet. Es gibt nichts aufzuräumen.