K U L A Lightweight, self-contained Linux® server monitoring tool. Zero dependencies. No external databases. Single binary. Just deploy and go.
What It Does
Kula collects system metrics every second by reading directly from /proc and /sys , stores them in a built-in tiered ring-buffer storage engine, and serves them through a real-time Web UI dashboard and a terminal TUI.
Metric What's Collected CPU Total usage (user, system, iowait, irq, softirq, steal) + core count Load 1 / 5 / 15 min averages, running & total tasks Memory Total, free, available, used, buffers, cached, shmem Swap Total, free, used Network Per-interface throughput (Mbps), packets/s, errors, drops; TCP errors/s, resets/s, established connections; socket counts Disks Per-device I/O (read/write bytes/s, reads/s, writes/s IOPS); filesystem usage System Uptime, entropy, clock sync, hostname, logged-in user count Processes Running, sleeping, blocked, zombie counts Self Kula's own CPU%, RSS memory, open file descriptors
How It Works
┌──────────────────────────────────────────────┐ │ Linux Kernel │ │ /proc/stat /proc/meminfo /sys/... │ └──────────────────┬───────────────────────────┘ │ read every 1s ▼ ┌──────────────────┐ │ Collectors │ │ (cpu, mem, net, │ │ disk, system) │ └────────┬─────────┘ │ Sample struct ┌────────────┼────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────┐ ┌──────────┐ │ Storage │ │ Web │ │ TUI │ │ Engine │ │ Server │ │ Terminal │ └─────┬──────┘ └───┬────┘ └──────────┘ │ │ ┌──────────┼─────────┐ └───────────┐ HTTP + WebSocket ▼ ▼ ▼ ▼ ┌─────────┬─────────┬─────────┐ ┌───────────────┐ │ Tier 1 │ Tier 2 │ Tier 3 │ │ Dashboard │ │ 1s │ 1m │ 5m │ │ (Browser) │ │ 250 MB │ 150 MB │ 50 MB │ └───────────────┘ └─────────┴─────────┴─────────┘ Ring-buffer binary files with circular overwrites
Storage Engine
Data is persisted in pre-allocated ring-buffer files per tier. Each tier file has a fixed maximum size — when it fills up, new data overwrites the oldest entries. This gives predictable, bounded disk usage with no cleanup needed.
Tier 1 — Raw 1-second samples (default 250 MB)
— Raw 1-second samples (default 250 MB) Tier 2 — 1-minute aggregates: averaged CPU & network, last-value gauges (default 150 MB)
... continue reading