Skip to main content

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-py package 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 / --port to change the listening address (defaults: 0.0.0.0:8000).
  • --no-gpu to skip NVIDIA/NVML probing entirely.
  • --db-path to override the SQLite history database location (monilite_history.db by default).
  • --log-level for verbose debugging output (INFO by 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 psutil every 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/live plus a bundled HTML view that auto-refreshes using the same endpoint.
  • History API/UI: /api/v1/history powers the built-in charts (1h/24h/7d windows) rendered via Canvas elements under the live metrics grid.
  • CLI: monilite serve wires together the collector thread, history store, and HTTP server; the dashboard drives runtime interval updates via the /api/v1/settings endpoint.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monilite-0.1.0.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

monilite-0.1.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file monilite-0.1.0.tar.gz.

File metadata

  • Download URL: monilite-0.1.0.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for monilite-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9e275ac032a28c4a26937641adf3308234000c7b214e966734dccefaa0a12886
MD5 9f40b82ad249043544dd73545c2547d4
BLAKE2b-256 b008fa14866b3a4c07b977e05ae8c048f3f0ede0423b165971e3be4acd57ef11

See more details on using hashes here.

File details

Details for the file monilite-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: monilite-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for monilite-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ffa2d4c0f46f526741498ecc7a5f8e31d7daa5fc11034b0a4f44e3859eefc4da
MD5 dbd5f6422937b71c5c3a4d8c35a99199
BLAKE2b-256 eb645375746101eb8a058bdde23599d00a872d47f3375fea116785ab2a1aadf9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page