[PR #6342] [client, relay] Expose relay transport and connection errors in status and metrics #29400

Closed
opened 2026-08-05 08:08:00 -04:00 by saavagebueno · 0 comments
Owner

Original Pull Request: https://github.com/netbirdio/netbird/pull/6342

State: closed
Merged: Yes


Describe your changes

Surfaces which transport (QUIC or WebSocket) each relay connection uses and the real reason a relay is unreachable, both per-client in status and fleet-wide in metrics. Stacked on #6339.

  • Show the negotiated transport per relay connection in netbird status -d (and JSON/YAML), and list the home relay plus any foreign relays.
  • Surface the actual connection error in status instead of a generic "not established", with the underlying cause on a single line.
  • Label the relay server's connected-peers metric by transport so the QUIC vs WebSocket split is visible.
  • Clean up relay dial errors: aggregate per-transport failures in a stable order, drop a duplicate log line, and surface the underlying network error rather than the library's verbose wrapper.

T-840

Stack

Checklist

  • Is it a bug fix
  • Is a typo/documentation fix
  • Is a feature enhancement
  • It is a refactor
  • Created tests that fail without the change (if possible)
  • This change does not modify the public API, gRPC protocols, functionality behavior, CLI / service flags, or introduce a new feature — OR I have discussed it with the NetBird team beforehand (link the issue / Slack thread in the description). See CONTRIBUTING.md.

By submitting this pull request, you confirm that you have read and agree to the terms of the Contributor License Agreement.

Documentation

Select exactly one:

  • I added/updated documentation for this change
  • Documentation is not needed for this change (explain why)

Adds a transport field to relay status output and a metric label; no user-facing config or workflow change.

Docs PR URL (required if "docs added" is checked)

Paste the PR link from https://github.com/netbirdio/docs here:

https://github.com/netbirdio/docs/pull/__

Summary by CodeRabbit

  • New Features

    • Relay status output now includes the negotiated transport protocol (e.g., WebSocket, QUIC) for each relay.
    • Relay state reporting now exposes transport via API/proto, including transport-aware “Available via …” summaries.
  • Improvements

    • Observability: relay connection metrics now record peer events with a transport label.
    • Connection-state and errors are more transparent: enhanced failure tracking, aggregated dial/connect errors, and clearer relay connect error reporting.
  • Bug Fixes

    • Improved relay state fallback behavior when no probe data is available.
**Original Pull Request:** https://github.com/netbirdio/netbird/pull/6342 **State:** closed **Merged:** Yes --- ## Describe your changes Surfaces which transport (QUIC or WebSocket) each relay connection uses and the real reason a relay is unreachable, both per-client in `status` and fleet-wide in metrics. Stacked on #6339. - Show the negotiated transport per relay connection in `netbird status -d` (and JSON/YAML), and list the home relay plus any foreign relays. - Surface the actual connection error in status instead of a generic "not established", with the underlying cause on a single line. - Label the relay server's connected-peers metric by transport so the QUIC vs WebSocket split is visible. - Clean up relay dial errors: aggregate per-transport failures in a stable order, drop a duplicate log line, and surface the underlying network error rather than the library's verbose wrapper. ## Issue ticket number and link T-840 ## Stack <!-- branch-stack --> ### Checklist - [ ] Is it a bug fix - [ ] Is a typo/documentation fix - [x] Is a feature enhancement - [ ] It is a refactor - [x] Created tests that fail without the change (if possible) - [ ] This change does **not** modify the public API, gRPC protocols, functionality behavior, CLI / service flags, or introduce a new feature — **OR** I have discussed it with the NetBird team beforehand (link the issue / Slack thread in the description). See [CONTRIBUTING.md](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTING.md#discuss-changes-with-the-netbird-team-first). > By submitting this pull request, you confirm that you have read and agree to the terms of the [Contributor License Agreement](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT.md). ## Documentation Select exactly one: - [ ] I added/updated documentation for this change - [x] Documentation is **not needed** for this change (explain why) Adds a transport field to relay status output and a metric label; no user-facing config or workflow change. ### Docs PR URL (required if "docs added" is checked) Paste the PR link from https://github.com/netbirdio/docs here: https://github.com/netbirdio/docs/pull/__ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Relay status output now includes the negotiated transport protocol (e.g., WebSocket, QUIC) for each relay. * Relay state reporting now exposes transport via API/proto, including transport-aware “Available via …” summaries. * **Improvements** * Observability: relay connection metrics now record peer events with a `transport` label. * Connection-state and errors are more transparent: enhanced failure tracking, aggregated dial/connect errors, and clearer relay connect error reporting. * **Bug Fixes** * Improved relay state fallback behavior when no probe data is available. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
saavagebueno added the pull-request label 2026-08-05 08:08:00 -04:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#29400