Client libraries
Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Upgrades are in place: stop, replace the binary, start. The on-disk format is forward compatible within a major version.
Overview
At its core Vantage Labs is a single process that owns one directory on disk and one listening socket. Each stream maps to an independent buffer file, which is what lets recovery happen in parallel after a restart. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.
| Key | Meaning | Default |
|---|---|---|
routerctl.listen | Address the data API binds to | 0.0.0.0:8080 |
routerctl.data_dir | Directory holding every buffer file | /var/lib/routerctl |
limits.max_batch | Largest number of log lines per write | 1024 |
retention.default | How long a log line is kept | 72h |
What to watch
Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Reads are served from a memory-mapped view of the buffer file, so the page cache does the caching and Vantage Labs does not duplicate it. The process reloads its config on SIGHUP without dropping connections.
$ routerctl serve --config /etc/routerctl/routerctl.toml
$ routerctl stream create orders --retention 72h
$ routerctl status
uptime 4d 11h
streams 6
throughput 37k lines/sWhat to watch
Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Duplicate delivery is possible after a crash. Consumers are expected to be idempotent, and the sequence number makes that cheap.
Behaviour under load
Vantage Labs was written for the case where a full cluster is more operational surface than the workload deserves. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.
| Key | Meaning | Default |
|---|---|---|
routerctl.listen | Address the data API binds to | 0.0.0.0:8080 |
routerctl.data_dir | Directory holding every buffer file | /var/lib/routerctl |
limits.max_batch | Largest number of log lines per write | 1024 |
retention.default | How long a log line is kept | 72h |