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.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
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.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
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.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
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.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |