watchtower

Active

During 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.

$git clone https://github.com/lidless-labs/watchtower.git && cd watchtower
self-hostedLibreNMS + ProxmoxWebSocket liveReact 18 + FastAPIPython 3.12 / Node 20+

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 views

Real-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 views

Per-interface bandwidth, errors, and traffic graphs, port groups aggregated by description, and scheduled WAN speedtests with history.

Alerts & notifications

2 systems

Critical / warning / info feed with an acknowledgment workflow, routed to Discord, Pushover, or email on configurable thresholds.

Proxmox & history

2 sources

VM / LXC status, resource usage, and node health from Proxmox, plus InfluxDB time-series history with configurable retention.

Administration

3 controls

Web settings UI for integrations and thresholds, JWT auth with role-based permissions, and admin user management.

Full tool reference on GitHub →

Setup

01 · install
git clone https://github.com/lidless-labs/watchtower.git && cd watchtower
02 · configure

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.

03 · config/config.yaml
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>"

Safety

how it stays safe
Self-hosted and local-only: everything runs on a machine you control, with no hosted SaaS and nothing leaving the box. It is a read-and-present layer over LibreNMS and Proxmox, so it does not poll SNMP or manage VMs itself. Access is gated by JWT authentication with role-based permissions, and integration credentials live in your own config file.

More in Network5 tools

librenmsctrlPipe LibreNMS devices, ports, and alerts to shells, cron, and agents. Writes gated. n8nctrlDrive n8n workflows from shells, cron, and agents: inspect, validate, run, audit. eero-cliDrive the eero mesh API from the shell: SMS auth, device filtering, bulk block. cutsheetNetwork change intelligence: self-hosted config diff and risk analysis for switches, firewalls, and NetOps. portgridHigh-density port visualizer for LibreNMS, a modern replacement for the legacy SwitchMap.