Halden Metrics
Getting started InstallationIngest protocolsAuthentication Operating RetentionAlert rulesClustering

Documentation

These pages cover the self-hosted distribution. Managed accounts share the same API surface; only the ingest hostname differs.

Installation

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

Ingest protocols

Four write paths are accepted on the same port. All of them are additive: you can mix agents without reconciling naming schemes first.

ProtocolEndpointNotes
Prometheus remote-write/api/v1/writeSnappy-framed protobuf
OpenTelemetry/v1/metricsOTLP over HTTP
StatsDudp/8125Counters and timers
Line protocol/api/v1/linesPlain text, one sample per line

Authentication

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

Retention

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.

Alert rules

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 }

Clustering

Nodes gossip over a single port and shard by series hash. Adding a node moves ownership incrementally; no rebalance window is required.