Storage settings
Every setting below is read once at startup and requires a restart to change.
Built-in defaults are overridden by nonempty environment values.
Unknown FANOUT_ names fail startup; platform-injected service names are tolerated.
Custom names use FANOUT_ plus a clear name, adding the area only when it clarifies.
Vendor credentials and endpoints keep the vendor’s documented names.
| Environment variable | Type | Default |
|---|---|---|
FANOUT_DATA_DIR | string | ./data |
FANOUT_DUCKDB_MAX_CONNECTIONS | integer | 0 |
FANOUT_DUCKDB_MEMORY | string | — |
FANOUT_DUCKDB_THREADS | integer | 0 |
FANOUT_MAINTENANCE_INTERVAL | duration | 1h |
FANOUT_RETENTION_DAYS | integer | 30 |
FANOUT_ROLLUP_INTERVAL | duration | 1m |
FANOUT_ROLLUP_SKIP_TO_LATEST | boolean | false |
FANOUT_DATA_DIR
Section titled “FANOUT_DATA_DIR”Stores telemetry, query state, and the control database.
FANOUT_DUCKDB_MAX_CONNECTIONS
Section titled “FANOUT_DUCKDB_MAX_CONNECTIONS”Caps the DuckDB connection pool. Reads scan immutable Parquet concurrently; rollup-cache writes are serialized by the query write gate. Zero means “size it from the machine” — the same spelling DuckDBThreads uses for deferring to a default. Resolution happens in resolveSizing and is reported in the startup configuration log.
FANOUT_DUCKDB_MEMORY
Section titled “FANOUT_DUCKDB_MEMORY”Caps DuckDB’s memory (e.g. “8GB”). Empty means Fanout sizes it from detected memory, reserving headroom for the Go runtime; see resolveSizing. DuckDB’s own default is 80% of detected RAM, which is calculated as though DuckDB owned the machine and has been observed to get the process OOM-killed once the Go heap is added on top.
FANOUT_DUCKDB_THREADS
Section titled “FANOUT_DUCKDB_THREADS”Caps DuckDB’s global query worker pool. Zero leaves DuckDB’s own default in place (one worker per core). Set it to leave cores free for ingest on a query-heavy co-tenant host.
FANOUT_MAINTENANCE_INTERVAL
Section titled “FANOUT_MAINTENANCE_INTERVAL”Controls Parquet retention and compaction, and query-cache checkpointing.
FANOUT_RETENTION_DAYS
Section titled “FANOUT_RETENTION_DAYS”Sets telemetry retention in days; zero disables expiry.
FANOUT_ROLLUP_INTERVAL
Section titled “FANOUT_ROLLUP_INTERVAL”Schedules analytical rollups; use a Go duration of at least 1s.
FANOUT_ROLLUP_SKIP_TO_LATEST
Section titled “FANOUT_ROLLUP_SKIP_TO_LATEST”RollupSkipToLatest, set once at boot, advances the service and edge rollup watermarks to the current max ingested timestamp. Existing history is not aggregated into those analytical rollups. Completed-batch trace caches still rebuild all retained history in bounded passes; uncached files remain immediately queryable. Useful for large pre-seeded datasets (benchmarks, restores); off in normal operation.