Backpressure and limits

Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. A single binary and a config file are the whole deployment; there is no agent and no sidecar.

Common mistakes

Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. The routing table batches by time and by size, whichever fires first, and both bounds are configurable per stream. Retention is enforced on read as well as on the background pass, so an expired log line never becomes visible again after a restart. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.

{
  "stream": "orders",
  "sequence": 151155,
  "buffer_files": 18,
  "lag_ms": 39,
  "status": "ok"
}

Recovery

At its core Vantage Labs is a single process that owns one directory on disk and one listening socket. Upgrades are in place: stop, replace the binary, start. The on-disk format is forward compatible within a major version.

curl -sS https://test228.apitesttrip.ru/v1/streams \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "orders", "retention": "72h"}'

Defaults

Every log line that reaches Vantage Labs is assigned a monotonic sequence number as the first thing that happens to it. The shipper batches by time and by size, whichever fires first, and both bounds are configurable per stream. An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk. Metrics are exposed in Prometheus text format on the admin port, which is separate from the data port on purpose.

curl -sS https://test228.apitesttrip.ru/v1/streams \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "orders", "retention": "72h"}'

Behaviour under load

Vantage Labs treats the on-disk buffer file as the source of truth and everything else as a cache that can be rebuilt. The parser stage batches by time and by size, whichever fires first, and both bounds are configurable per stream. An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.

KeyMeaningDefault
routerctl.listenAddress the data API binds to0.0.0.0:8080
routerctl.data_dirDirectory holding every buffer file/var/lib/routerctl
limits.max_batchLargest number of log lines per write1024
retention.defaultHow long a log line is kept72h