monitorix-webui
v0.2.1
Published
Interactive web UI for Monitorix. Reads RRD files directly via rrdtool, serves a React + Tailwind dashboard with live charts, summary cards, and auto-discovered modules.
Downloads
332
Maintainers
Readme
monitorix-webui
Interactive web UI for Monitorix — reads RRD files directly, serves a React + Tailwind dashboard with real interactive charts.
npx monitorix-webuiThat's it. Point it at a host running Monitorix, get a modern dashboard with zoom, pan, time-range filters, summary cards, and live refresh — without touching Monitorix itself.
Why
Monitorix ships static PNG graphs by design. They're great, but you can't zoom, pan, hover, or filter by time. This tool keeps Monitorix's lightweight Perl/RRD backend completely untouched and adds an opt-in interactive UI on top:
- Reads
/etc/monitorix/monitorix.conf(includingconf.d/overrides) - Reads
*.rrdfiles from/var/lib/monitorix/ - Auto-discovers every enabled module — no per-module config required
- Tier 1 (curated):
system,kern,proc,net,fs— polished charts + summary cards - Tier 2 (fallback): every other enabled module — auto-grouped DSes, generic styling
Requirements
- Node.js 20+
rrdtoolbinary inPATH(already installed if you're running Monitorix)- Read access to the Monitorix data directory (run as the
monitorixuser, or as a member of its group)
Default port is 8088. Port 8080 is intentionally avoided — Monitorix's built-in
httpd_builtindaemon listens on 8080 by default.
Install / run
# Run without installing
npx monitorix-webui
# Install globally
npm install -g monitorix-webui
monitorix-webui
# With basic auth + custom port
npx monitorix-webui --port 9000 --auth admin:s3cret
# Custom paths
npx monitorix-webui \
--conf /etc/monitorix/monitorix.conf \
--rrd-path /var/lib/monitorix \
--port 8088
# All env vars
MONITORIX_CONF=/etc/monitorix/monitorix.conf \
MONITORIX_RRD_PATH=/var/lib/monitorix \
PORT=8088 BASIC_AUTH=admin:s3cret \
npx monitorix-webuiCLI flags
| Flag | Env | Default |
|----------------------|----------------------|--------------------------------------|
| --rrd-path <dir> | MONITORIX_RRD_PATH | (read from monitorix.conf base_lib) |
| --conf <file> | MONITORIX_CONF | /etc/monitorix/monitorix.conf |
| --port <n> | PORT | 8088 |
| --host <addr> | HOST | 0.0.0.0 |
| --base-path <p> | BASE_PATH | / |
| --auth <user:pass> | BASIC_AUTH | (none) |
| --refresh <sec> | | 60 |
| --rrdtool <bin> | RRDTOOL_BIN | rrdtool |
| -h, --help | | |
| -v, --version | | |
Reverse proxy
Mount it under a sub-path behind nginx, Caddy, or anything else:
monitorix-webui --base-path /monitorix-ui --port 8088location /monitorix-ui/ {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}systemd unit
# /etc/systemd/system/monitorix-webui.service
[Unit]
Description=Monitorix interactive web UI
After=monitorix.service
Requires=monitorix.service
[Service]
User=monitorix
Group=monitorix
ExecStart=/usr/bin/npx -y monitorix-webui --port 8088 --auth admin:CHANGEME
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now monitorix-webuiAPI
The web UI is just a client over a tiny JSON API. Use it directly if you want to wire metrics into other dashboards.
| Endpoint | Description |
|------------------------------------------|----------------------------------------------|
| GET /api/system | Hostname, rrdtool version, baseLib |
| GET /api/catalog | Discovered modules + chart specs (cached 60s)|
| GET /api/series/:module/:chartId | Time-series JSON for one curated chart |
| GET /api/latest/:module?ds=a,b,c | Most-recent value per DS |
| GET /api/raw/:module | Flat dump of every DS in a module's RRD |
| GET /healthz | Liveness |
from and to query params accept anything rrdtool xport accepts: now, now-6h, now-1d, now-7d, ISO-8601, or unix epoch.
Architecture
┌──────────────────────────────────────┐
│ monitorix-webui (Node 20+, Hono) │
│ ├─ Apache-style monitorix.conf parser
│ ├─ rrdtool xport / info bridge │
│ ├─ 60s catalog cache │
│ └─ static SPA (React + Tailwind v4) │
└──────────────────────────────────────┘
▲ reads
│
┌───────────────┴────────────────┐
│ /etc/monitorix/monitorix.conf │
│ /var/lib/monitorix/*.rrd │
└────────────────────────────────┘
▲ spawns
│
rrdtool (existing system binary)Zero native dependencies. Single Node process. Designed to live alongside Monitorix on the same host.
Development
git clone https://github.com/mrbeandev/monitorix-webui
cd monitorix-webui
npm install
# Backend on :8088
npm run dev:server -- --conf /etc/monitorix/monitorix.conf
# Frontend with HMR on :5173 (proxies /api to :8088)
npm run dev:webui
# Production build (webui → packages/server/static, server → dist/)
npm run build
node packages/server/dist/cli.jsRoadmap
- [ ] More Tier-1 curated metadata (
netstat,disk,process,mail, common services) - [ ] URL-state for time-range + selected module (shareable links)
- [ ] CSV export per chart
- [ ] Multi-host dashboard
- [ ] Dark/light theme toggle (currently dark-only)
- [ ] Per-DS color overrides via config
Contributing
Issues and pull requests welcome. For larger changes, please open an issue first to discuss what you'd like to change.
