Lightweight system monitoring daemon and dashboard for Linux
Project description
MONILite
MONILite is a lightweight system monitoring daemon for Linux that collects CPU, memory, disk, and optional NVIDIA GPU metrics, retains tiered history in SQLite (5-second, 1-minute, and 5-minute buckets), and serves both a JSON API and a bundled dashboard over HTTP. Released under the MIT License.
Quickstart
python -m venv .venv
source .venv/bin/activate
pip install monilite
monilite serve
# Visit http://localhost:8000 for the dashboard, history charts, and JSON API
Installation
- Python 3.10 or newer is required.
- Linux (Ubuntu tested) is the primary target; other OSes are currently unsupported.
- NVIDIA GPU data is optional and depends on NVML bindings (the
nvidia-ml-pypackage is installed automatically, but the NVIDIA driver/NVML libraries still need to be present on the system).
Install MONILite directly from PyPI:
pip install monilite
Usage
Start the collector + HTTP server with default options:
monilite serve
Common flags:
--host/--portto change the listening address (defaults:0.0.0.0:8000).--no-gputo skip NVIDIA/NVML probing entirely.--db-pathto override the SQLite history database location (monilite_history.dbby default).--log-levelfor verbose debugging output (INFOby default).
Change the sampling interval at any time from the dashboard's drop-down selector—no restart required. Historical CPU, memory, disk, and GPU utilization trends are displayed below the live metrics with 1h/24h/7d windows backed by the SQLite tiers.
Configuration
MONILite keeps configuration intentionally small. Runtime options are exposed through CLI flags. Persistent configuration can later be provided via a simple .toml file, but that mechanism is not implemented yet.
History is stored in monilite_history.db (SQLite) by default; pass --db-path /path/to/file to relocate it (for example, to a tmpfs or persistent mount).
HTTP API
The built-in HTTP server exposes:
GET /api/v1/live– returns the latest CPU, memory, disk, and GPU snapshot collected in the background loop.GET /api/v1/history?window=1h|24h|7d– returns down-sampled CPU/memory/disk/GPU series sourced from the SQLite tiers so the dashboard can render trend charts.GET /api/v1/settings– reads the active sampling interval (used for the dashboard selector).POST /api/v1/settings– updates the sampling interval in real time.GET /– serves a lightweight HTML page that polls/api/v1/live, renders history charts, and exposes the interval selector.
Additional history endpoints (/api/v1/metrics, /api/v1/history, etc.) will come online once the SQLite storage layer lands.
See docs/http-api.md for full payload samples.
Architecture
- Collector daemon: samples CPU, memory, and disk usage via
psutilevery few seconds. If NVML bindings are available, GPU utilization, memory, temperature, and power draw are collected in the same cadence. - Storage: uses SQLite with tiered retention tables (5-second for ~1h, 1-minute for ~24h, 5-minute for longer history). Background jobs promote data from one tier to the next and prune old rows automatically.
- HTTP Service: a small Flask app serves
/api/v1/liveplus a bundled HTML view that auto-refreshes using the same endpoint. - History API/UI:
/api/v1/historypowers the built-in charts (1h/24h/7d windows) rendered via Canvas elements under the live metrics grid. - CLI:
monilite servewires together the collector thread, history store, and HTTP server; the dashboard drives runtime interval updates via the/api/v1/settingsendpoint.
More detail: docs/architecture.md.
FAQ
Does it support Windows or macOS?
Linux first. Other operating systems are explicitly out-of-scope for the initial releases.
Can I plug it into Prometheus, Grafana, or external TSDBs?
No. MONILite is intentionally self-contained and stores metrics only in its bundled SQLite database.
Live dashboard
The dashboard shows live cards plus interactive history charts (CPU, memory, disk, GPU). Hover over any point to see the timestamp/value, adjust the sampling interval from the selector, and use the smoothing slider to tame noisy hosts. Everything is bundled directly in the Flask app so there are no external assets or build steps yet.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file monilite-0.1.2.tar.gz.
File metadata
- Download URL: monilite-0.1.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b51897c4fd83d4cfb652a63421b724a37748d01b971c23ddfabd45d3a5c773f6
|
|
| MD5 |
81bf397fb9ddd3d742594b74fb0464d2
|
|
| BLAKE2b-256 |
a130c5c568a86eb9630f27888a8ecee87225d73fe8dfa63230ce6a2b6032105a
|
File details
Details for the file monilite-0.1.2-py3-none-any.whl.
File metadata
- Download URL: monilite-0.1.2-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c6c64d9fb71ca02dabd8a504ef15dae973ab5b09ec082c2cb8ed96cb938cfcd
|
|
| MD5 |
c1c5faa9223cc9e4ff89d3ea49a90e60
|
|
| BLAKE2b-256 |
5ebf98f7c1f0e94118b5e840ba5f1aaf8731602c8cc4e302e3e50ef0acbcc65f
|