These pages cover the self-hosted distribution. Managed accounts share the same API surface; only the ingest hostname differs.
The server ships as a single container with an embedded store. A 4 GB node handles roughly 400k active series before you need to shard.
docker run -d --name halden \ -p 9080:9080 \ -v /var/lib/halden:/data \ haldenmetrics/server:2.14
Four write paths are accepted on the same port. All of them are additive: you can mix agents without reconciling naming schemes first.
| Protocol | Endpoint | Notes |
|---|---|---|
| Prometheus remote-write | /api/v1/write | Snappy-framed protobuf |
| OpenTelemetry | /v1/metrics | OTLP over HTTP |
| StatsD | udp/8125 | Counters and timers |
| Line protocol | /api/v1/lines | Plain text, one sample per line |
Write tokens are scoped to a namespace and carry an optional series-count ceiling. Rotate them without a restart; the server reloads the token file on change.
haldenctl token create --namespace edge --max-series 250000
Downsampling happens on write rather than as a nightly job, so a query over two years touches the same number of blocks as a query over two weeks.
Rules are evaluated with two windows so a brief spike does not page anyone, while a sustained burn does so quickly.
- alert: CheckoutLatency
expr: |
burn_rate(slo="checkout", window="1h") > 14
and burn_rate(slo="checkout", window="5m") > 14
for: 2m
labels: { severity: page }
Nodes gossip over a single port and shard by series hash. Adding a node moves ownership incrementally; no rebalance window is required.