Sidecar Prometheus exporter for the mqvpn
multipath QUIC VPN server. Polls mqvpn's JSON control API and exposes
/metrics.
Want monitoring components on container? A pre-wired
docker composestack (exporter + Prometheus + Grafana, datasource and dashboard auto-provisioned) is atexamples/compose/. Linux only.
Pre-built static binaries (amd64 / arm64) are attached to
each GitHub Release.
Pick the archive matching your CPU.
(mqvpn-prometheus-exporter_<version>_linux_<arch>.tar.gz), then:
tar xzf mqvpn-prometheus-exporter_*.tar.gz
sudo install mqvpn-prometheus-exporter /usr/local/bin/
Or build from source:
go install github.com/mp0rta/mqvpn-prometheus-exporter@latest
mqvpn-prometheus-exporter --mqvpn.address 127.0.0.1:9090 --web.listen-address 127.0.0.1:9091
See docs/README.md for the full operator guide (deployment topology, Prometheus + Grafana setup, metric reference, troubleshooting).
docs/README.md— operator guideexamples/compose/— one-command Prometheus + Grafana + exporter stack (Linux only,network_mode: host)examples/systemd/— systemd unit for the exporterexamples/prometheus.yml— sample scrape configdashboards/mqvpn-grafana.json— bundled Grafana dashboard (server overview, per-user / per-path, backup-FEC)
| Exporter | mqvpn |
|---|---|
| 0.1.0 | ≥ 0.5.0 |
| 0.2.0 | ≥ 0.5.0 (reorder metrics ≥ 0.8.0) |
| 0.3.0 | ≥ 0.5.0 (reorder ≥ 0.8.0, hybrid ≥ 0.9.0) |
On mqvpn < 0.8.0 the mqvpn_reorder_* metrics are silently omitted; the
exporter functions normally otherwise. The mqvpn_hybrid_* metrics are
additive get_stats fields, so on mqvpn < 0.9.0 they read 0 rather than being
omitted. See the compatibility notes
for RPC-level detail.
Apache License 2.0
Copyright (c) 2026 mp0rta
The repository ships with an opt-in gitleaks pre-commit hook to prevent accidental secret leaks. To enable:
go install github.com/zricethezav/gitleaks/v8@latest
git config core.hooksPath hooks
Without this, git commit works as usual (the hook is opt-in via core.hooksPath).
With it enabled, every commit is scanned and rejected on a hit.
Run tests locally with:
go vet ./...
go test -race -count=1 ./...
CI runs the same on every push and PR (see .github/workflows/ci.yml).