Self-hosted Supabase: _analytics logy tiše sežerou disk (GB/den)
Symptom
Sekce “Symptom”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.
Příčina
Sekce “Příčina”Self-hosted Supabase stack má DVA neohraničené log sinky:
_supabaseinterní DB → schéma_analytics(Logflare): tabulkylog_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.- Docker JSON logy (
/var/lib/docker/containers/*/…-json.log): bezlog-optsvdaemon.jsonrostou neomezeně — API gateway kontejner klidně desítky GB.
Diagnóza
Sekce “Diagnóza”du -xh --max-depth=2 /opt/<supabase>/docker/volumes | sort -rh | headdocker 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 -5Oprava (maintenance okno, NE za provozu deploye)
Sekce “Oprava (maintenance okno, NE za provozu deploye)”- Zastavit POUZE analytics ingest (
analytics+vectorslužby) — jinak se tabulka okamžitě plní znovu. TRUNCATE _analytics.log_events_*— pod rolísupabase_admin(rolepostgresv Supabase image NENÍ superuser a TRUNCATE právo na Logflare tabulkách nemá → permission denied). TRUNCATE uvolní místo hned, žádný VACUUM.- Aktivní Docker logy
truncate -s 0přesdocker inspect --format '{{.LogPath}}'(nikdyrm— dockerd drží file descriptor; nikdy wildcards). - Trvalá rotace: merge (ne přepis!)
/etc/docker/daemon.json→{"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"3"}}, validacedockerd --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. - Follow-up: trvalá retence (Logflare TTL nebo periodický TRUNCATE cron), jinak tabulky za měsíce dorostou.
Prevence
Sekce “Prevence”- 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.