Quaranta macchine. Una pagina.
I tuoi server si scansionano da soli e inviano i dati. Il disco che si riempie per primo è in cima. L'hub non tocca mai le macchine che osserva.
docker pull ghcr.io/unalcakir28/spacetrace-hub:main| Host | Radice | Libero | Crescita | Ultimi 14 giorni | Si riempie in |
|---|---|---|---|---|---|
| db-02 | /var/lib/postgresql | 18.2 GiB / 500 GiB | +3.1 GiB/day | 6 giorni | |
| nas | /volume1/backups | 402 GiB / 8.0 TiB | +41 GiB/day | 10 giorni | |
| srv-01 | /srv | 120 GiB / 400 GiB | +1.4 GiB/day | 85 giorni | |
| ci-runner-1 | /var/lib/docker | 96 GiB / 250 GiB | −2.0 GiB/day | — r² 0.11 | |
| build-03 | /home | 1.1 TiB / 2.0 TiB | — | — 2 istantanee | |
| /var/mail | — capacità non registrata | +180 MiB/day | — |
Disegnata, non uno screenshot. La dashboard reale è HTML generato dal server: uno strumento self-hosted che ha bisogno di un npm install prima di mostrarti una pagina è uno strumento peggiore.
Come configurarlo
Due credenziali, un file di configurazione e una riga aggiunta a ogni agente. Non c'è altro da mettere in piedi.
Crea un token di amministrazione e una configurazione
head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n' > admin-tokendb = "/var/lib/spacetrace-hub/hub.sqlite" listen = "0.0.0.0:8080" admin_token_file = "/run/secrets/admin-token" keep_per_target = 90
Salvala come hub.toml, poi docker compose up -d — oppure esegui il binario direttamente e valida la configurazione prima di servire.
Accedi e crea un token per l'agente
Apri l'hub, accedi con il contenuto di admin-token e crea un token nella pagina Agents. O fallo dalla riga di comando.
spacetrace-hub --config hub.toml token nasPunta ogni agente verso di lui
spacetrace-agent --config /etc/spacetrace/agent.toml push https://hub.example.com --token <agent token>Aggiungilo alla pianificazione dell'agente e la flotta si popola da sola. Rinviare è innocuo: un'istantanea già presente con lo stesso host, radice e ora di inizio viene saltata.
Mettici davanti il TLS
Prima di esporre l'hub fuori dalla tua rete, termina il TLS in un reverse proxy. Il cookie di sessione è HttpOnly e SameSite=Strict; il flag Secure arriva servendolo via HTTPS.
Due credenziali, di proposito
Un token che sta in un file di configurazione su un NAS non deve essere la chiave dell'inventario di tutta la flotta. Per questo un token di agente non è una credenziale per la dashboard — e vale anche il contrario.
I token degli agenti sono conservati come hash SHA-256, quindi una copia del database non è un insieme di credenziali funzionanti. Revocare conserva la traccia e blocca il token immediatamente.
Entrambe le direzioni sono coperte da test.
| Credenziale | Può | Non può |
|---|---|---|
| Token agente | Inviare un'istantanea | Leggere la dashboard o l'API |
| Token amministratore | Leggere tutto, gestire token e regole | Inviare istantanee |
La previsione è la funzione trattenuta più a lungo
È quella con più probabilità di essere sbagliata, quindi è quella che più spesso si rifiuta di rispondere. “Si riempie in N giorni” compare solo se valgono tutte queste condizioni.
Almeno tre istantanee, su almeno un giorno
Due punti formano sempre una retta perfetta. Un giorno è l'intervallo più breve in cui un andamento quotidiano possa emergere.
Un fit lineare con r² ≥ 0,5
L'uso del disco spesso non è lineare. Una rotazione dei log o un ripristino occasionale producono volentieri una retta la cui pendenza non significa nulla.
Una capacità davvero misurata
Senza la dimensione reale del filesystem non c'è nulla da riempire. L'hub non la indovina dal totale più grande che ha visto.
Una risposta entro dieci anni
“Si riempie in 4.000 giorni” è aritmetica, non informazione.
Crescita e previsione sono numeri diversi
La crescita è misurata sulla cartella scansionata. La previsione proietta lo spazio restante del filesystem a quel ritmo. Le pagine dicono quale è quale, invece di fonderli in un'unica cifra rassicurante.
Avvisi
Regole di soglia, consegnate via webhook. Tre tipi, ognuno con un periodo di attesa perché un disco che si riempie non diventi un flusso di messaggi identici:
- Spazio libero sotto una percentuale
- Crescita sopra un certo ritmo
- Una previsione che cade entro un orizzonte
La consegna via email non è ancora implementata, e c'è una sola credenziale di amministrazione invece di accessi per persona.
API HTTP
| GET /health | — |
|---|---|
| POST /snapshots | Token agente |
| GET /api/fleet | Token amministratore |
| GET /target?host=&root= | Token amministratore |
| GET /alerts | Token amministratore |
| GET /tokens | Token amministratore |
Perché non esiste una tabella di riepilogo
Le istantanee sono conservate senza modifiche nello stesso archivio usato dalla riga di comando e dall'agente. L'hub non tiene una propria tabella di riepilogo, quindi non c'è nulla che possa disallinearsi dalle istantanee da cui deriva.
Ciò che un agente invia è lo stesso file che conserva localmente: niente viene convertito da nessuna delle due parti, e il confronto nella pagina di un target è calcolato dallo stesso codice che gira sul tuo portatile.