Aller au contenu
TYPEDébloqué
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURDevOps et infra
POURÉquipes de devs
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURDevOps et infra
POURÉquipes de devs
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURDevOps et infra
POURÉquipes de devs
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
TYPEDébloqué
ÉTAPEProduction
DIFFICULTÉSimple
MÉTIERSurveiller un service
POURDevOps et infra
POURÉquipes de devs
SERVICESPipe
POURQUOI HOODYHTTP-natif
POURQUOI HOODYMultijoueur par défaut
PIPE · STREAMING DE LOGS LIVE

Tail des logs de prod sur une URL que n'importe qui peut curl

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.

Lire la doc Pipe

Un émetteur. Plein de curls. Aucun agent.

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.

prod-app-7 · /var/log/app
PUT · sender
# 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)...
le pipe ne stocke rien · les octets passent à travers
n'importe quel laptop · sans SSH
GET · readers
# 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/3

Deux 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.

Ce que le pipe vous donne qu'un dashboard ne donne pas

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.

MULTIJOUEUR PAR DÉFAUT

Jusqu'à 256 curls sur un seul flux

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.

HTTP-NATIF

Pas d'agent. Pas de forwarder. Juste curl.

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.

ÉPHÉMÈRE

ctrl-C et le pipe disparaît

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.

Les chiffres derrière l'URL

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.

  1. LECTEURS PAR CHEMIN256

    Le plafond documenté pour n. votre canal d'incident ne sera jamais à court de places.

  2. OCTETS STOCKÉS0

    Le pipe est en streaming direct de bout en bout. Pas de disque intermédiaire, pas de rétention à gérer.

  3. TTL D'ATTENTE5 min

    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.

pas de bastion · pas de siège · pas de forwarderune URL · jusqu'à 256 curls
hierssh bastion → tail -f /var/log/app.log
aujourd'huihttps://prod-pipe.../api/v1/pipe/live
Lire l'API pipe

Ce que ça remplace

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.

  • Sièges Datadog LogsLicence par utilisateur pour voir les mêmes octets
  • Bastion SSH + tail -fHop, ssh, trouver le fichier de log, à refaire par ingénieur
  • Forwarders Loggly / LogtailInstallation d'agent, config, facture de rétention
  • Dashboards ELK / SplunkUn stack lourd pour héberger un tail
  • Partage d'écran Slack du tail -fUne personne tail, les autres plissent les yeux
  • Log groups du cloud providerSiège console plus IAM par lecteur

L'incendie s'éteint. vous faites ctrl-C sur l'émetteur. Le pipe disparaît. Il n'y a rien à nettoyer.

Lire l'API pipe

Lis les autres