Dashboard: Network tab

ProxMenux Monitor · Dashboard~13 min

Every interface the kernel reports — physical NICs, bridges, bonds, VLANs and VM/LXC virtual ports — grouped into three cards. Each row is clickable and opens a drill-in with addressing, traffic counters and historical RRD data.

Live + historical, both included

Live state comes from psutil.net_if_stats() and ip; historical bandwidth from Proxmox's RRD store via /api/network/<interface>/metrics. The page refreshes every ~5 seconds for live counters and pulls fresh RRD data on demand for the chart.

Top row: four stat cards

CardWhat it shows
Network TrafficAggregate RX / TX rate across all interfaces, formatted in the right unit (bps / Kbps / Mbps / Gbps).
Active InterfacesTwo counters: Physical X / Y and Bridges X / Y (active over total). The first counter you watch when something stops working.
Network StatusQuick verdict — Healthy / Warning / Critical based on link state, gateway reachability and bridge integrity. Mirrors the Network Interfaces category of the Health Monitor.
Network LatencyRound-trip time to the gateway with a sparkline. Clicking the card opens the Network Latency modal documented further down — historical view + on-demand ping test against gateway / Cloudflare / Google with a downloadable PDF report.

Three interface groups

Below the top row, three cards split the inventory by role. Each card has its own active-count badge in the header. Interface type is identified at a glance by a coloured badge on every row:

  • Blue Physical — real NIC.
  • Green Bridge — Linux bridge or OVS bridge (vmbr*).
  • Purple Bond — bond / LACP / active-backup aggregator.
  • Cyan VLAN — VLAN sub-interface (vmbr0.10, eno1.42, …).

Every row is clickable — physical, virtual, bridge or bond — and opens the per-interface drill-in described further down (basic info, IPs, traffic counters, historical RX/TX chart from Proxmox's RRD store).

Physical Interfaces

Every NIC the kernel sees as a real device — eno1, enp4s0, eth0, wlp3s0, etc. One row per device with the blue Physical badge and the link state. Bond members (NICs enslaved to a bond) are shown here too, with a hint pointing to the parent bond.

Bridge Interfaces

Linux bridges (vmbr0, vmbr1, …) and the OVS bridges Proxmox manages. Each row shows the green Bridge badge, the underlying physical interface (when it's a single-port bridge), and the bridge state. Bonds visible at this layer get the purple Bond badge; VLAN sub-interfaces get the cyan VLAN badge.

VM / LXC Interfaces

The tap* and veth* interfaces created when guests start — one per virtual NIC. The card header shows X / Y Active; rows are linked to the VM/CT they belong to so you can jump directly to the guest in the VMs & LXCs tab. Inactive entries hang around briefly after a guest stops; they age out within a refresh cycle.

Per-interface drill-in

Clicking any row opens a modal with five blocks:

BlockContents
Basic InformationInterface name, type (physical / bridge / bond / VLAN / vm), MAC address, state (up / down), MTU, and the underlying physical interface for non-physical types.
Bond MembersOnly for bonds. Lists each enslaved NIC with the active / failed flag, the bond mode (active-backup / 802.3ad / balance-alb / …) and the primary interface when configured.
IP AddressesEvery IPv4 / IPv6 address with the prefix length. Auto-configured link-local addresses are listed but greyed out.
Historical chartRX / TX bandwidth over the selected timeframe (1 hour / 24 hours / 7 days / 30 days / 1 year), pulled from /api/network/<interface>/metrics (Proxmox RRD).
Traffic since last bootTotal RX / TX bytes and packets since the host last booted, plus error and drop counters.

Inactive interfaces still open the drill-in

For an interface that is down, the modal renders a small "Interface Inactive" banner and skips the live counters. Configuration (addresses, bond members) and historical data are still shown — useful when diagnosing why something failed and when.

Network Latency modal

Clicking the Network Latency card in the top row opens a dedicated modal. It has two modes (historical and on-demand test), three target options and a downloadable PDF report.

Targets

A target dropdown at the top of the modal selects what gets pinged:

  • Gateway — your LAN router. Tests the local-network leg only; useful when you suspect a switch / cabling issue and want to rule out the WAN.
  • Cloudflare (1.1.1.1) — public DNS resolver, anycast network. Tests the WAN leg.
  • Google (8.8.8.8) — alternative public target, useful as a sanity check or when Cloudflare is regionally degraded.

Mode 1 — Historical view

Network Latency modal in historical mode — Gateway target with a 1-hour timeframe and the past samples plotted
Historical view — Gateway target over the last hour, fed from the latency-history database written every 60 seconds by the temperature/latency collector thread.

The default mode when the modal opens. A second dropdown picks the timeframe (1 Hour / 24 Hours / 7 Days / 30 Days / 1 Year); data resolution drops with the window so the chart stays readable. Headline stats — Current / Min / Avg / Max — render above the chart, with a status pill (Excellent / Good / Fair / Poor) reflecting the current value against the thresholds below.

Source: the same latency samples the Health Monitor uses to detect persistent network slowdowns — sampled every 60 seconds against the gateway by the background _temperature_collector_loop thread, written to a local SQLite history.

Mode 2 — Real-time test

Network Latency modal running a real-time ping test against Cloudflare — progress bar at 50%, live samples accumulating on the chart
Real-time test against Cloudflare — 2-minute run with one reading every 5 seconds, samples plotted as they arrive. Click Stop to end early; Test Again appends more samples to the same dataset.

Switching the target to Cloudflare or Google starts an on-demand ping test. Behaviour:

  • Duration — 2 minutes per run, with a progress bar and a remaining-seconds counter.
  • Cadence — one reading every 5 seconds (24 readings per run).
  • Method — ICMP Echo Request (ping), 3 consecutive pings per sample, latency averaged.
  • Stop — ends the test immediately; partial data is preserved.
  • Test Again — appends new samples to the existing dataset rather than starting fresh, so you can build a longer record across several runs.
  • Live status pill — re-evaluates after every sample using the same Excellent / Good / Fair / Poor thresholds.

Performance thresholds

StatusRangePractical impact
Excellent< 50 msOptimal for real-time apps, gaming and video calls.
Good50 – 100 msAcceptable for most applications with minimal impact.
Fair100 – 200 msNoticeable delay. May affect VoIP and interactive apps.
Poor> 200 msSignificant latency. Investigation recommended.

Network Latency Report (PDF)

Both modes have a Report button next to the target selector. Clicking it generates a PDF with everything you'd send to your ISP if you wanted to make a case for poor service.

First page of the Network Latency Report PDF — Executive Summary with the gauge, latency statistics, the latency graph and the threshold guide
First page of the Network Latency Report — Executive Summary with the gauge dial and headline stats, the per-second latency graph, and the threshold guide. Page 2 onwards has the per-sample table and methodology.

The report has six sections:

  1. Executive Summary — gauge dial (0–300+ ms with green / yellow / red zones), the status verdict (EXCELLENT / GOOD / FAIR / POOR), the target / mode / sample count and a one-line packet-loss summary.
  2. Latency Statistics — Current / Min / Avg / Max as four large tiles, plus Sample Count, Packet Loss (avg) and Test Period.
  3. Latency Graph — area chart of every sample over the test window with a min/avg/max y-axis grid.
  4. Performance Thresholds — the same four-tier scale documented above, with a coloured dot per tier.
  5. Detailed Test Results — numbered table with timestamp, latency, packet loss and status for every sample. Useful for spotting micro-bursts that the headline averages hide.
  6. Methodology — test method (ICMP Echo Request), samples per test (3 consecutive pings), target name, target IP and a final "Performance Assessment" paragraph derived from the verdict.

Use case: claims to your ISP

Run the real-time test against Cloudflare for 2 minutes during a moment of perceived slowness, then click Test Again a few times to extend the dataset, and finally Report. The PDF carries the full per-sample table plus the methodology block — ISPs typically accept this as evidence, especially when correlated with timestamps from a separate complaint.

Excluding noisy interfaces

Like storages, individual interfaces can be excluded from health monitoring — useful for intentionally disabled bridges, test interfaces or NICs that are physically removed but still in the config. The flag is stored in the excluded_interfaces table and respected by the Health Monitor cycle: no warnings, no notifications, no contribution to the header status pill.

From the row's context menu, pick Exclude from monitoring. The interface stays visible in the dashboard with a purple excluded badge, and you can re-enable monitoring from the same menu.

How the data is collected

Section of the tabEndpointSource
Interface inventory/api/networkip -j addr + ip -j link + bond / bridge introspection.
Summary cards/api/network/summaryAggregation over the inventory plus per-interface up/down counts.
Per-interface RX/TX time series/api/network/<iface>/metrics/proc/net/dev sampled by the Health Monitor with byte-rate calculation.
Latency: current/api/network/latency/currentA short ping burst against the configured gateway / target.
Latency: historical/api/network/latency/historyPersisted samples — every 5 min by the Health Monitor cycle.
# Cross-check the interface state seen by the dashboard
ip -br link
ip -br addr

# Verify a current latency probe end-to-end
curl -H "Authorization: Bearer <token>" \
  http://<host>:8008/api/network/latency/current | jq

Where to next