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
| Setting | Default |
|---|---|
| Address | 0.0.0.0 |
| Port | 9090 |
| Path | /metrics |
| Config key | server.metricsPort |
| Config file | config.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']
For the full set of combined-container settings, see the config.yaml.example reference file.
What's emitted
The combined /metrics endpoint returns the union of:
- All Management metrics —
management_*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 exposesactive_peersandmessages_forwarded_total; in the combined container these becomesignal_active_peersandsignal_messages_forwarded_total. - All Relay metrics —
relay_*series. Emitted only when the embedded relay is enabled (norelaysoverride set inconfig.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.

