Passa al contenuto principale

Monitoraggio della Flotta

Il monitoraggio è a strati: metriche host e salute container dalla CLI, campionamento di lungo periodo per i trend di capacità, un hub beszel per la cronologia a colpo d'occhio, e avvisi tramite control plane e osservatori di failover.

Hub Beszel e agent​

La flotta riporta a un hub beszel con un agent per host. Hub e quattro agent sono allineati a 0.20.0; Mon è registrato come MON-FR-flo-primary con soglie disco e memoria a 80%. L'hub fornisce le serie temporali di flotta (CPU, memoria, disco, rete) che i comandi CLI campionano su richiesta.

flo vps stats — vista host e container​

flo vps stats # profilo VPS predefinito
flo vps stats production # profilo nominato
flo --json vps stats # formato macchina

Il comando riporta:

  • Host: hostname, uptime, load average, core CPU, memoria (usata/totale/%) disco (usato/totale/%) con livelli di pressione disco (warning ≥ 70%, critical ≥ 80%).
  • Docker: container in esecuzione/totali, container fermi e non sani.
  • Istanze: container raggruppati per tenant con cap CPU/RAM live letti dal demone (docker inspect), stato/salute autorevoli, container blue/green e infra.
  • Volumi di log: dimensione /logs per tenant, roll più vecchio e verdetto di rotazione (prima prod, poi test). Questo è il consueto divoratore di disco — un tenant con roll Serilog senza cap è segnalato qui prima che riempia il disco.

Salute container e istanze​

flo instance health <id> # DB, API, disco, container
flo instance stats <id> # CPU/memoria/stato (-w 5m, -i 15s; watch max 2h)
flo logs errors <id> --hours 6 # errori recenti da blue, green, Traefik
flo logs days <id> # roll Serilog giornalieri
flo logs day <id> 2026-07-20 # log applicativo di un giorno

Gli health check a livello applicativo provengono da Docker Compose: l'app Flo espone /health sulla porta interna 10001 e PostgreSQL usa pg_isready. Nginx dipende dallo stato healthy dell'app ma non ha un health check dedicato (vedi Deploy Singolo-Tenant).

Monitoraggio risorse di lungo periodo​

flo instance monitor start <id> --interval 5m
flo instance monitor status
flo instance monitor report <id> --from 2026-05-10 --to 2026-05-16
flo instance monitor stop <id> --clean

instance monitor installa un cron job che campiona le statistiche container a intervallo fisso (60 s predefinito), le memorizza sull'host e riporta aggregati, trend orari e avvisi di soglia su giorni o settimane. --all punta ogni istanza del VPS.

flo doctor — controlli di sistema​

flo doctor # target locale o --vps
flo doctor --fix # provisiona il toolchain di sviluppo locale mancante
flo doctor --fix --dry-run
flo doctor cache-headers https://api.example.com

I controlli girano contro il target risolto ed escono non-zero se qualcosa fallisce:

CategoriaControlli
Dockerdemone in esecuzione, Compose disponibile, versione server
Traefikcontainer in esecuzione, rete traefik-public esistente
Sicurezzamaster key presente e 0600 (POSIX), scadenza certificato SSL (warn < 30 giorni, fail se scaduto), OpenSSL disponibile
Config~/.flo/config.json valida, directory dati scrivibile
Sistemaspazio disco (fail < 1 GB, warn < 5 GB), memoria, riavvio in sospeso
Tenantregistry valido, container attivo per tenant sano/in avvio/non in esecuzione
Toolchain.NET/Node locali, immagine Postgres, cablaggio PATH per ~/.flo/toolchains (solo locale)

--fix installa il toolchain locale mancante in ~/.flo/toolchains (solo locale; un VPS gira container precompilati). doctor cache-headers <base-url> verifica Cache-Control sugli endpoint critici di flusso (config admin, feature flag) per intercettare bug di cache stantia dopo un deploy.

Journal e igiene disco​

flo vps journal status production
flo vps journal vacuum production --dry-run
flo vps journal vacuum production -y
flo vps cleanup production --dry-run
flo vps cleanup production --logs --older-than 7
flo strapi maintenance docker-cleanup -a
  • flo vps provision installa una policy systemd-journal limitata: SystemMaxUse=500M, RuntimeMaxUse=200M, MaxRetentionSec=30day tramite drop-in /etc/systemd/journald.conf.d/50-flo-journal.conf. journal vacuum ruota e compatta alla policy fissa 500M/30 giorni (nessun limite arbitrario); il registry remoto espone la stessa forma fissa.
  • L'host MON gira inoltre con cap journal a 200M e prune docker settimanale; flo control doctor <vps> legge le righe journald attive (non i default commentati) per triage in sola lettura.
  • flo vps cleanup rimuove container, immagini, volumi e cache di build Docker inutilizzati, e con --logs pota i roll Serilog datati dal volume log di ogni tenant (mai il file live).

Avvisi​

  • Telegram (control plane): il demone valuta le soglie di produzione ogni minuto e invia avvisi in batch con cooldown per issue (predefinito 6 h) e messaggi di recovery. Configura con flo control alerts mon --provision --token-stdin --chat <id> -y; verifica con --test. Vedi Control Plane.
  • Email (failover): flo failover monitor --all --notify -y e flo failover watch --notify inviano email su replica degradata o sospetta interruzione del primario, usando la config notifiche gestita da flo config notify (SMTP o Cloudflare).
  • Backup: flo backup status valuta freschezza e salute cron; la dashboard di controllo espone l'età reale dei backup tramite credenziali R2 in sola lettura.
  • Watchdog auto-deploy: flo watchdog status e flo watchdog logs mostrano lo stato del watchdog auto-deploy guidato da CI.