watchtower
ActiveDuring an incident you are tab-hopping between the LibreNMS UI, the Proxmox console, and a Grafana tab, rebuilding the same picture every time. Watchtower folds device status, topology, interface load, VM health, and the alert feed into one live console that already knows what a homelab operator wants to see.
What it does
Watchtower is a self-hosted Network Operations Center dashboard for homelab and small-network operators. It exists because the raw LibreNMS UI is built for engineers who live in it and Grafana makes you hand-wire every panel and query before you see a single device, so Watchtower is the opinionated middle: one console that ships with the NOC view already assembled. It reads LibreNMS and Proxmox through their APIs on a schedule, caches current state in Redis, stores history in InfluxDB, and pushes changes to the browser over WebSockets so device status, interface graphs, topology, and alerts stay current without a page refresh. The frontend is React 18 and TypeScript; the backend is a FastAPI service on Python 3.12 with APScheduler driving the polling loop. It is a read-and-present layer on top of your existing stack, not an SNMP poller or a VM manager, and it runs entirely on a machine you control. It is a work in progress, run from source, and not published to any package registry.
CapabilitiesWhat it watches
Devices & topology
3 viewsReal-time up / down / degraded status, an interactive React Flow map with link and port detail, and CDP / LLDP auto-discovery from LibreNMS.
Interfaces & traffic
3 viewsPer-interface bandwidth, errors, and traffic graphs, port groups aggregated by description, and scheduled WAN speedtests with history.
Alerts & notifications
2 systemsCritical / warning / info feed with an acknowledgment workflow, routed to Discord, Pushover, or email on configurable thresholds.
Proxmox & history
2 sourcesVM / LXC status, resource usage, and node health from Proxmox, plus InfluxDB time-series history with configurable retention.
Administration
3 controlsWeb settings UI for integrations and thresholds, JWT auth with role-based permissions, and admin user management.
Setup
git clone https://github.com/lidless-labs/watchtower.git && cd watchtower
Docker Compose brings up Redis and InfluxDB (set WATCHTOWER_INFLUXDB_PASSWORD and WATCHTOWER_INFLUXDB_ADMIN_TOKEN first). Point config/config.yaml at your LibreNMS and Proxmox instances.
data_sources:
librenms:
url: "http://librenms.example.internal"
api_key: "<your-librenms-api-key>"
proxmox:
url: "https://proxmox.example.internal:8006"
token_id: "watchtower@pam!monitoring"
token_secret: "<your-token-secret>"