Deploying with systemd

Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Logs go to stderr as structured JSON by default, or as plain lines when the output is a terminal.

Configuration

Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. The sink pool runs on its own goroutine and never blocks the write path, so a slow consumer cannot stall a producer. An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h

Recovery

Writes land in an append-only log segment; the partition planner compacts them in the background on a fixed interval. Retention is enforced on read as well as on the background pass, so an expired event never becomes visible again after a restart. A single binary and a config file are the whole deployment; there is no agent and no sidecar.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h

Behaviour under load

Basalt Field accepts events over HTTP and gRPC and writes them to local storage before acknowledging anything. Writes land in an append-only log segment; the sink pool compacts them in the background on a fixed interval. Nothing is written outside the data directory. Deleting it resets Basalt Field to a clean state.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h

Common mistakes

Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Backpressure is explicit: when the sink pool falls behind, Basalt Field returns 429 rather than buffering without bound. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h