spacetrace
FR
Télécharger

Quarante machines. Une page.

Vos serveurs s'analysent eux-mêmes et envoient leurs résultats. Le disque qui se remplit en premier apparaît en haut. Le hub ne touche jamais aux machines qu'il surveille.

docker pull ghcr.io/unalcakir28/spacetrace-hub:main
Binaires
spacetrace hubfleetAlertesLigne de commande
7 cibles · 6 actives · 1 silencieuse depuis 3 jours
HôteRacineLibreCroissance14 derniers joursPlein dans
db-02/var/lib/postgresql18.2 GiB / 500 GiB+3.1 GiB/day6 jours
nas/volume1/backups402 GiB / 8.0 TiB+41 GiB/day10 jours
srv-01/srv120 GiB / 400 GiB+1.4 GiB/day85 jours
ci-runner-1/var/lib/docker96 GiB / 250 GiB−2.0 GiB/day— r² 0.11
build-03/home1.1 TiB / 2.0 TiB— 2 instantanés
mail/var/mail— capacité non enregistrée+180 MiB/day
Une prévision vide est un refus de deviner, pas un nombre manquant. La page de la cible dit quelle condition n'était pas remplie.

Dessiné plutôt que capturé. Le vrai tableau de bord est du HTML rendu par le serveur — un outil auto-hébergé qui réclame un npm install avant de vous montrer une page est un outil moins bon.

Mise en place

Deux identifiants, un fichier de configuration et une ligne ajoutée à chaque agent. Il n'y a rien d'autre à déployer.

  1. Créez un jeton admin et une configuration

    head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n' > admin-token
    db = "/var/lib/spacetrace-hub/hub.sqlite"
    listen = "0.0.0.0:8080"
    admin_token_file = "/run/secrets/admin-token"
    keep_per_target = 90

    Enregistrez-la sous hub.toml, puis docker compose up -d — ou lancez le binaire directement et validez la configuration avant de servir.

  2. Connectez-vous et créez un jeton d'agent

    Ouvrez le hub, connectez-vous avec le contenu d'admin-token et créez un jeton sur la page Agents. Ou faites-le en ligne de commande.

    spacetrace-hub --config hub.toml token nas
  3. Pointez chaque agent vers lui

    spacetrace-agent --config /etc/spacetrace/agent.toml push https://hub.example.com --token <agent token>

    Ajoutez cela au calendrier de l'agent et la flotte se remplit d'elle-même. Renvoyer est sans effet : un instantané déjà présent avec le même hôte, la même racine et la même heure de début est ignoré.

  4. Mettez du TLS devant

    Avant d'exposer le hub hors de votre réseau, terminez le TLS dans un reverse proxy. Le cookie de session est HttpOnly et SameSite=Strict ; le drapeau Secure vient du fait de le servir en HTTPS.

Deux identifiants, volontairement

Un jeton posé dans un fichier de configuration sur un NAS ne doit pas être la clé de l'inventaire de toute la flotte. Un jeton d'agent n'est donc pas un identifiant de tableau de bord — et l'inverse est vrai aussi.

Les jetons d'agent sont stockés sous forme de hachages SHA-256 : une copie de la base n'est pas un jeu d'identifiants fonctionnels. Révoquer conserve la trace et rend le jeton inopérant immédiatement.

Les deux sens sont couverts par des tests.

IdentifiantPeutNe peut pas
Jeton d'agentEnvoyer un instantanéLire le tableau de bord ou l'API
Jeton adminTout lire, gérer les jetons et les règlesEnvoyer des instantanés

La prévision est la fonction la plus retenue

C'est celle qui a le plus de chances d'être fausse, donc celle qui refuse le plus souvent de répondre. « Plein dans N jours » n'apparaît que si tout ceci est vrai.

  • Au moins trois instantanés, couvrant au moins un jour

    Deux points font toujours une droite parfaite. Un jour est le plus court intervalle où un motif quotidien peut apparaître.

  • Un ajustement linéaire de r² ≥ 0,5

    L'usage disque n'est souvent pas linéaire. Une rotation de journaux ou une restauration ponctuelle produisent volontiers une droite dont la pente ne veut rien dire.

  • Une capacité réellement mesurée

    Sans la taille réelle du système de fichiers, il n'y a rien à remplir. Le hub ne la devine pas à partir du plus grand total qu'il a vu.

  • Une réponse à moins de dix ans

    « Plein dans 4 000 jours » est de l'arithmétique, pas de l'information.

  • La croissance et la prévision sont deux nombres différents

    La croissance est mesurée sur le dossier analysé. La prévision projette l'espace restant du système de fichiers à ce rythme. Les pages disent lequel est lequel plutôt que de les fondre en un seul chiffre rassurant.

Alertes

Des règles de seuil, livrées par webhook. Trois types, chacun avec un délai de repos pour qu'un disque qui se remplit ne devienne pas un flot de messages identiques :

  • Espace libre sous un pourcentage
  • Croissance au-dessus d'un rythme
  • Une prévision qui tombe dans un horizon donné

L'envoi par e-mail n'est pas encore implémenté, et il y a un seul identifiant admin plutôt que des comptes par personne.

API HTTP

GET /health
POST /snapshotsJeton d'agent
GET /api/fleetJeton admin
GET /target?host=&root=Jeton admin
GET /alertsJeton admin
GET /tokensJeton admin

Pourquoi il n'y a pas de table d'agrégats

Les instantanés sont conservés tels quels dans le même stockage que celui utilisé par la ligne de commande et l'agent. Le hub ne tient aucune table de résumé propre : rien ne peut donc dériver par rapport aux instantanés dont il découle.

Ce qu'un agent envoie est le fichier même qu'il conserve localement : rien n'est converti d'un côté ni de l'autre, et la comparaison sur la page d'une cible est calculée par le même code que sur votre portable.