Skip to content

mrbeandev/monitorix-webui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

monitorix-webui

npm version license node

Interactive web UI for Monitorix — reads RRD files directly, serves a React + Tailwind dashboard with real interactive charts.

npx monitorix-webui

That'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 (including conf.d/ overrides)
  • Reads *.rrd files 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+
  • rrdtool binary in PATH (already installed if you're running Monitorix)
  • Read access to the Monitorix data directory (run as the monitorix user, or as a member of its group)

Default port is 8088. Port 8080 is intentionally avoided — Monitorix's built-in httpd_builtin daemon 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-webui

CLI 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 8088
location /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.target
sudo systemctl daemon-reload
sudo systemctl enable --now monitorix-webui

API

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

Roadmap

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

License

MIT

About

Interactive web UI for Monitorix. Reads RRD files directly, serves a React + Tailwind dashboard with live charts, summary cards, and auto-discovered modules. npx-runnable, zero native deps.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors