Aller au contenu
use-cases / a-live-metrics-dashboard-no-backend / hero
PIPE · SSE · SANS BACKEND

Un tableau de bord en direct sans backend de métriques

Vingt agents poussent leurs métriques vers une seule URL pipe avec curl -T. Votre tableau de bord lit la même URL avec ?progress et rend le flux SSE directement dans la page. Pas d'InfluxDB, pas de Prometheus, pas d'intervalle de scrape. Juste un câble.

Lire la doc du pipe
use-cases / a-live-metrics-dashboard-no-backend / mechanism

Une URL, deux côtés

Chaque agent envoie sa ligne avec curl dans le même chemin de pipe. Le navigateur du tableau de bord ouvre un EventSource sur ce chemin avec ?progress. Le serveur Hoody Pipe ne retient rien — les octets qui arrivent d'un côté repartent de l'autre.

agent · monitor.sh
PUT · expéditeur
#!/bin/sh
# Agent monitor loop — one line per second.
while true; do
  cpu=$(top -bn1 | awk '/Cpu/ [print $2]')
  mem=$(free | awk '/Mem:/ [printf "%.0f", $3/$2*100]')
  line="cpu=$cpu mem=$mem qps=$(cat /tmp/qps) ts=$(date +%s)"
  echo "$line" | curl -T - https://pipe.hoody.com/api/v1/pipe/metrics-$AGENT_ID
  sleep 1
done
le câble ne retient rien
dashboard.html · dans votre navigateur
GET ?progress · lecteur
// One <script> in one HTML file. No backend.
const tiles = document.querySelectorAll('[data-agent]');

tiles.forEach((tile) => [
  const id = tile.dataset.agent;
  // ?progress turns the pipe path into an SSE stream.
  const sse = new EventSource(
    `https://pipe.hoody.com/api/v1/pipe/metrics-$[id]?progress`,
  );

  sse.addEventListener('metric', (e) => [
    const [ cpu, mem, qps ] = JSON.parse(e.data);
    tile.querySelector('.cpu').textContent = `$[cpu]%`;
    tile.querySelector('.mem').textContent = `$[mem]%`;
    tile.querySelector('.qps').textContent = qps;
  ]);
]);

Les agents font curl. Le navigateur ouvre des EventSource. Le pipe transfère. Il n'y a rien entre les deux à mettre à l'échelle, redémarrer ou payer. Fermez le tableau de bord et les flux s'arrêtent. Rouvrez-le et vous voyez des données en direct dans la seconde.

use-cases / a-live-metrics-dashboard-no-backend / powers

Trois pouvoirs d'un tableau de bord qui s'évapore

Ce que vous abandonnez en supprimant le backend, vous le récupérez sous une forme plus simple.

LATENCE

Sub-seconde par construction

Il n'y a pas d'intervalle de scrape à attendre. La dernière écriture de l'agent est l'image actuelle du tableau de bord. Le pipe transfère directement — aucun flush intermédiaire.

OPÉRATIONS

Rien à conserver, rien à faire échouer

Pas de politique de rétention parce qu'il n'y a pas de stockage. Pas de disque à remplir, pas de fenêtre de compaction, pas d'index de séries temporelles à corrompre. La métrique existe tant qu'un lecteur regarde.

ÉCONOMIE

Un seul fichier HTML statique le livre

Le tableau de bord est un fichier HTML que vous pouvez héberger n'importe où — ou ouvrir depuis le disque. Pas d'agent à installer, pas de daemon à faire tourner, pas de siège DataDog à provisionner. L'URL du pipe est toute la stack.

use-cases / a-live-metrics-dashboard-no-backend / evaporates

Ce qui s'évapore

La stack standard agent-vers-tableau-de-bord a quatre pièces mobiles. Le modèle pipe en a zéro. Même câble, un demi-écran de curl.

AVANT · QUATRE PIÈCES À CHOUCHOUTERla stack typique
  • statsd / telegraf
  • InfluxDB / TimescaleDB
  • Grafana / Datadog
  • fichiers de configuration de scrape
quatre configs · quatre upgrades · quatre factures
APRÈS · UN CÂBLEdeux commandes curl
# Each agent: one line per metric.echo "cpu=64 mem=42" | curl -T - https://pipe.hoody.com/api/v1/pipe/metrics-$ID# Each viewer: one curl, or new EventSource() in HTML.curl -N https://pipe.hoody.com/api/v1/pipe/metrics-$ID?progress
pas de stockage · pas de scraper · pas de daemon

Quand vous sautez la base de données, les choses que vous gériez cessent d'exister. Il n'y a pas de politique de rétention sur un câble.

use-cases / a-live-metrics-dashboard-no-backend / capacity

Ce que le pipe vous donne

Un chemin de pipe est une infrastructure petite mais réelle. Les chiffres viennent des garanties de l'API Hoody Pipe, pas de benchmarks inventés.

  1. DESTINATAIRES PAR CHEMIN256

    Jusqu'à 256 tableaux de bord ou tails curl peuvent s'abonner au même chemin avec ?n. Le lecteur le plus lent applique de la backpressure mais ne bloque jamais les autres.

  2. SPECTATEURS PROGRESS50

    Jusqu'à 50 viewers SSE ?progress par chemin. Ils ne consomment pas de slot de destinataire — vos onglets de tableau de bord et votre terminal peuvent regarder en parallèle.

  3. LATENCE DE STOCKAGE0 ms

    Le serveur n'écrit pas sur disque. Les octets qui arrivent côté expéditeur repartent côté lecteur. Il n'y a aucune fenêtre de flush entre les deux.

Limites selon l'API Hoody Pipe : nombre de destinataires 1–256, spectateurs progress plafonnés à 50 par chemin, TTL de connexion progress de 30 minutes, linger post-transfert de 30 secondes.

use-cases / a-live-metrics-dashboard-no-backend / punchline

Le tableau de bord n'a pas interrogé de base de données. Les octets sont juste arrivés.

regardé en direct · vendrediévaporé · samedi
À QUOI L'ANCIENNE ARCHITECTURE RESSEMBLAITagent → statsd → InfluxDB → Grafanaquatre pièces mobiles · quatre fichiers de config · quatre factures
À QUOI ÇA RESSEMBLE MAINTENANTecho $line | curl -T - pipe/metricsune ligne — et le tableau de bord n'est qu'un fichier HTML
Lire la spec SSE progress
use-cases / a-live-metrics-dashboard-no-backend / replaces

Ce que cela remplace

Les outils standards qu'on attrape quand on veut un tableau de bord de métriques. Chacun vous facture une base de données et un daemon. Le pipe ne vous facture ni l'un ni l'autre.

  • AWS Lambda + CloudWatchFacturation à l'invocation pour ce qui n'est que curl
  • services de routage maisonTout un microservice pour transférer des octets qui avaient déjà une URL
  • Stack Prometheus + GrafanaDeux daemons, une boucle de scrape, et un tableau de bord à auto-héberger
  • InfluxDB + TelegrafUne base de séries temporelles pour des données que vous ne gardez pas après l'écran
  • Collecte de métriques DataDogTarification par hôte pour un nombre que vous vouliez voir une fois
  • pipelines d'ingestion de métriques maisonKafka + consommateur + sink pour une valeur que l'agent pouvait simplement pousser
use-cases / a-live-metrics-dashboard-no-backend / cta

Arrêtez de scraper. Arrêtez de stocker. Regardez le câble — et quand vous arrêtez de regarder, le câble est vide.

Lire la doc du pipe
use-cases / a-live-metrics-dashboard-no-backend / related

Découvrez les autres