Combined deployment metrics

The combined container (the default for new installations via getting-started.sh) runs Management, Signal, and Relay in a single process. All three services share one OpenTelemetry meter provider and emit to a single /metrics endpoint.

Endpoint

SettingDefault
Address0.0.0.0
Port9090
Path/metrics
Config keyserver.metricsPort
Config fileconfig.yaml

Set it in config.yaml:

server:
  metricsPort: 9090

Then restart the container:

docker compose restart netbird-server

A single Prometheus job scrapes all three services:

scrape_configs:
  - job_name: 'netbird'
    static_configs:
      - targets: ['netbird.example.com:9090']

What's emitted

The combined /metrics endpoint returns the union of:

  • All Management metricsmanagement_* series.
  • All Signal metrics, each one rewritten with a signal_ prefix so it doesn't collide with the rest of the endpoint. For example, standalone Signal exposes active_peers and messages_forwarded_total; in the combined container these become signal_active_peers and signal_messages_forwarded_total.
  • All Relay metricsrelay_* series. Emitted only when the embedded relay is enabled (no relays override set in config.yaml).

If you point the combined server at an external Signal (server.signalUri) or external Relay (server.relays), the corresponding local service is disabled and its metrics will not appear on this endpoint — scrape the external service directly instead.

Health endpoint

The combined container also exposes a separate healthcheck server on :9000 by default (server.healthcheckAddress). The healthcheck endpoint does not expose metrics.