Fleet Management
7 minute read
Overview
Fleet management lets you monitor and control multiple Exaviz boards from a single dashboard. Boards on the same network discover each other automatically, and after a secure pairing process, you can view all your boards in one place.
Enabling Fleet Management
Fleet management is opt-in and must be enabled in the management config before pairing or the Fleet view will work. On a freshly deployed board, edit /etc/exaviz/management.json:
{
"fleet": {
"enabled": true,
"board_name": "Top Of Rack"
}
}
board_name is the friendly name other boards see when they discover this one. Restart the management service to pick up the change:
sudo systemctl restart exaviz-mgmt
If the dashboard header shows an “N boards” pill but clicking it does nothing and there is no Fleet view tab, fleet is disabled in management.json. mDNS discovery runs unconditionally (which is why the pill counts peers), but the Fleet aggregator and pairing UI are gated on fleet.enabled.
Verifying
After restart, the dashboard header shows a Fleet view tab in addition to “N boards”. You can also confirm via the API:
curl -sk https://<board-ip>/api/v1/fleet/peers | jq .enabled
# expected: true
How Discovery Works
Each board announces itself on the local network using mDNS (multicast DNS) on the _exaviz._tcp.local. service type. When you open the fleet view, any boards on the same network segment appear automatically in the discovery list.
Boards announce every 30 seconds. A board that has not been seen for 120 seconds is removed from the discovered list.
Each announcement includes:
- Board serial number
- Board type (Cruiser, Interceptor, etc.)
- Firmware version
- User-defined board name (if set)
Pairing Boards
Pairing establishes a secure trust relationship between two boards using Ed25519 cryptography. Both boards must confirm the pairing.
Step-by-Step
- Open the dashboard on Board A
- Switch to Fleet view (toggle in the header bar)
- Find Board B in the discovered boards list
- Click Pair next to Board B
- Both boards display a 6-digit confirmation code
- Verify the codes match on both screens (this prevents man-in-the-middle attacks)
- On Board A, click Confirm
- On Board B, a pairing notification appears. Click Accept
Trust is now mutual. Board A can see Board B’s status, and Board B can see Board A’s status.
Trust Rules
- Trust is bilateral - each pairing connects exactly two boards
- Trust is not transitive - if Board A pairs with B and C, Boards B and C do not automatically trust each other
- For B to see C, B must pair with C directly
- A full-mesh fleet of N boards requires N*(N-1)/2 pairings (3 pairings for 3 boards, 6 for 4 boards)
This is intentional. Non-transitive trust means compromising one board does not compromise the entire fleet.
Fleet Dashboard
Once boards are paired, the fleet view shows all trusted boards:
Grid View (Default)
Board cards in a 4-across grid. Each card shows:
- Board name and serial number
- Hostname, in smaller text under the name (shown once the board has reported its hostname in a health poll; long hostnames are shortened with an ellipsis, and the full hostname is on the expanded card)
- Board type and firmware version
- Online/offline status
- Total PoE power draw
- Number of active ports
- CPU temperature and memory usage
Table View
Toggle to a comparative table with columns for serial, name, type, CPU temp, total power, memory, and status. Useful for quickly scanning a large fleet.
Quick Expand
Click a board card to expand it inline, showing a 2x2 grid of its PoE ports with real-time status. Lets you check port details without leaving the fleet view.
An expanded card also shows an identity line with the board’s full hostname (once reported), the IP address this dashboard uses to reach it, and its serial number. The serial identifies the board even if its name or IP changes. The card for the board you are signed in to has no IP entry.
Filter
The Filter box at the top of the fleet view narrows the grid and the table as you type. It matches the board name, serial number, hostname, board type, and the words online or offline. Press / to jump to the box.
Drag-and-Drop Reorder
Drag board cards to arrange them in the order that makes sense for your deployment (e.g., by building, floor, or rack). The order is saved and persists across sessions.
Problematic Boards Float to Top
Boards with active alerts, PoE faults, config drift, or offline status automatically move to the top of the grid. This can be toggled on or off.
Fleet Status Bar
A summary bar at the top of the fleet view shows:
- Total boards in the fleet
- Number currently online
- Total power draw across all boards
- Total active PoE ports
Fleet-Wide Alerts
Alerts from all boards are aggregated. For example: “3 PoE faults across 2 boards” or “Board offline 5 minutes ago.”
Config Drift
Boards in a fleet should agree on a few security and monitoring settings. Each board compares these settings with every paired board it can reach and shows any difference on the Fleet view.
| Setting | What it controls | Fixed from the Fleet view? |
|---|---|---|
tls.hsts_max_age_seconds | How long browsers insist on HTTPS | Yes, but a value above 0 is refused while the board has the HTTP to HTTPS redirect off |
tls.redirect_http | Redirect HTTP to HTTPS | No, needs a restart of the management service |
tls.mode | Self-signed, ACME or uploaded certificate | No, each board has its own certificate |
metrics.basic_auth | Login on the /metrics endpoint turned on or off | No, the password stays on each board |
metrics.basic_auth_user | The /metrics login user, when login is on for both boards | No, change it on that board |
metrics.basic_auth_pass | The /metrics login password, when login is on for both boards (shown only as set or differs) | No, the password stays on each board |
fleet.enabled | Whether fleet management is turned on for the board | No, change it on that board |
The comparison is always between the board you are signed in to and each peer. There is no fleet master value. Board name, branding, certificate files and network settings are per board and never compared. Passwords are never shown or sent between boards in readable form.
Reading the Panel
The header reads “Config drift: N issue(s) across M peer(s) (K finding(s))”. An issue is one setting; a finding is one setting on one board. “cannot verify N peer(s)” means those boards did not answer; they are listed by serial under “Unreachable peers:”. A board with fleet management turned off cannot answer, so it shows here rather than as drift. “Config drift check failed” means the check itself did not complete. Boards with drift also get a DRIFT badge on their card and in the table view.
Fixing Drift
- Click the panel header to expand it.
- For each row choose the correct value: This board’s value or Peer’s value. Choosing the peer’s value also updates any other reachable board that had this board’s old value.
- Click Fix drift for one row or Fix all for every fixable row.
- Check the list of changes (board, setting, from, to) and click Apply.
The check runs again right away and the panel shows what is left. For settings that cannot be fixed from the Fleet view, the row shows why and the steps to change it on that board. Each board whose setting changed records it in Recent Activity. The board you used also records each change it sent to another board, with the result.
Remote Operations
From the fleet view, you can perform operations on any paired board:
| Action | Description |
|---|---|
| Reboot | Reboot an individual board (with confirmation dialog) |
| Enable all ports | Turn on all PoE ports on a specific board |
| Disable all ports | Cut power to all PoE ports on a specific board |
| Reset all ports | Power-cycle all PoE ports |
| Bulk fleet reboot | Reboot all boards (staggered timing to avoid power surges) |
Removing a Paired Board
To unpair a board:
- Open the fleet view
- Find the board you want to remove
- Click the remove/unpair option
- Confirm
The trust relationship is removed from both boards. The board will still appear in the mDNS discovery list but will no longer share status data.
Network Requirements
- Boards must be on the same network subnet for mDNS discovery
- Port 5353 (UDP) must be open for mDNS multicast
- HTTPS must be accessible between boards for status polling
- Fleet polling occurs every 5 seconds via HTTPS with Ed25519 signature authentication
Last modified October 18, 2026