Skip to main content

Real-Time Homelab Telemetry Without Spawning Shell Scripts

Most dashboards shell out to pvesh or docker stats every few seconds. AMUD Dashboard reads /proc and talks to APIs natively in Rust.

By Youssef Boubli · Creator of AMUD Dashboard

Here's a pattern I've seen in a lot of homelab monitoring glue:

while true; do
pvesh get /nodes/$(hostname)/lxc --output-format json
sleep 5
done

It works until you realize you're forking a process every five seconds for a dashboard that sits on a wall tablet 99% of the time. On a busy host that's just noise.

What AMUD Dashboard does instead

amud-agent reads host metrics straight from /proc and /sys. No subprocess. For Proxmox it uses native HTTPS to the PVE API on port 8006 (hyper + rustls). For Docker it reads the daemon over the Unix socket (hyperlocal) — no docker stats CLI.

Data goes to amud-server over a Unix domain socket (TCP fallback on Windows). Server serializes once per poll tick and fans out to browsers via WebSockets using a tokio::sync::watch channel.

Result: CPU/RAM/disk bars actually move smoothly. The UI doesn't stutter when you've got twenty containers.

Agent auth isn't an afterthought

Random processes can't connect and inject fake "everything is fine" metrics. The agent does challenge-response with AMUD_AGENT_SECRET before the server accepts payloads.

Architecture deep dive: /docs/ARCHITECTURE

What you see

  • Host CPU, RAM, disk, network — live
  • Per-app RUNNING/STOPPED when linked to CTID or Docker name
  • Integration badges (Plex streams, HA stats, etc.) polled on Tokio green threads alongside everything else

If your graphs are frozen at 0%, you're probably behind a reverse proxy that isn't forwarding WebSocket upgrades. Fix that before blaming the agent.

More on that in a later post.