Přeskočit na obsah

Self-hosted Supabase: _analytics logy tiše sežerou disk (GB/den)

Systémový disk serveru se plní tempem jednotek GB denně, přestože produkční databáze má jen nízké jednotky GB. df ukazuje desítky procent navíc bez zjevné příčiny v aplikaci.

Self-hosted Supabase stack má DVA neohraničené log sinky:

  1. _supabase interní DB → schéma _analytics (Logflare): tabulky log_events_<uuid> ukládají KAŽDÝ HTTP request přes Kong. Žádná výchozí retence — u středně vytíženého e-shopu stovky GB za rok.
  2. Docker JSON logy (/var/lib/docker/containers/*/…-json.log): bez log-opts v daemon.json rostou neomezeně — API gateway kontejner klidně desítky GB.
Terminál
du -xh --max-depth=2 /opt/<supabase>/docker/volumes | sort -rh | head
docker exec <db> psql -U postgres -tAc "select datname, pg_size_pretty(pg_database_size(datname)) from pg_database order by 2 desc;"
docker exec <db> psql -U postgres -d _supabase -tAc "select relname, pg_size_pretty(pg_total_relation_size('_analytics.'||quote_ident(relname))) from pg_stat_user_tables where schemaname='_analytics' order by 2 desc limit 5;"
du -sh /var/lib/docker/containers/*/ | sort -rh | head -5

Oprava (maintenance okno, NE za provozu deploye)

Sekce “Oprava (maintenance okno, NE za provozu deploye)”
  1. Zastavit POUZE analytics ingest (analytics + vector služby) — jinak se tabulka okamžitě plní znovu.
  2. TRUNCATE _analytics.log_events_*pod rolí supabase_admin (role postgres v Supabase image NENÍ superuser a TRUNCATE právo na Logflare tabulkách nemá → permission denied). TRUNCATE uvolní místo hned, žádný VACUUM.
  3. Aktivní Docker logy truncate -s 0 přes docker inspect --format '{{.LogPath}}' (nikdy rm — dockerd drží file descriptor; nikdy wildcards).
  4. Trvalá rotace: merge (ne přepis!) /etc/docker/daemon.json{"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"3"}}, validace dockerd --validate --config-file …, reload, a recreate jen dotčených služeb (--force-recreate --no-deps <svc…>) — rotace platí až pro nově vytvořené kontejnery.
  5. Follow-up: trvalá retence (Logflare TTL nebo periodický TRUNCATE cron), jinak tabulky za měsíce dorostou.
  • Monitoring disku s alertem (např. 70 %).
  • Retenci analytics řešit hned při zřízení self-hosted Supabase.
  • Rotaci Docker logů nastavit v daemon.json od prvního dne.
Přidal aiarchitekt.cz · 31. 7. 2026 2:00
Provozuje aiarchitekt.cz