A charming system monitor

Monitor your Linux machines
from the terminal.

bewitch is a monitoring daemon and terminal UI for homelab servers, Raspberry Pis and VPSes. It stores CPU, memory, disk, network and hardware metrics in a local DuckDB database, so you can chart them, query them in SQL and alert on them.

$ curl -fsSL https://bewitch.dev/install.sh | sudo sh

Install guide · Debian, Ubuntu & any systemd Linux · amd64 / arm64 · Open source

01

Hardware health

SMART data for NVMe, SATA and ZFS pool disks, plus temperatures, ECC memory errors, RAPL power draw, and Intel, NVIDIA and AMD GPUs.

What it collects →
02

History

Every sample is stored in DuckDB. The TUI charts any time range, old data can be archived to Parquet, and bewitch repl runs SQL queries against all of it.

The SQL console →
03

Alerts

Threshold, predictive, variance and process rules, created in the TUI. Notifications go to email, Discord, Telegram, ntfy, Slack or a shell command, and again when the alert resolves.

Alerting →

Query your metrics in SQL

bewitch repl has tab completion, multi-line editing and .export to CSV, Parquet or JSON. The all_* views include archived Parquet data alongside the live database.

bewitch repl
bewitch> SELECT d.value AS mount,
...> round(avg(m.used_bytes * 100.0 / m.total_bytes), 1) AS pct
...> FROM disk_metrics m JOIN dimension_values d ON d.id = m.mount_id
...> WHERE m.ts > now() - INTERVAL '30 days'
...> GROUP BY mount;
mount | pct
-------+------
/ | 62.3
/home | 41.2

One URL per notification service

Chat and push services are configured with a Shoutrrr URL each, so there's no relay to run. Email goes through SMTP or the host's local mail system.

/etc/bewitch.toml
[alerts]
shoutrrr_urls = [
"discord://token@channel",
"ntfy://ntfy.sh/basement-rack",
]
[[alerts.email]]
use_mail_cmd = true

Other features

Designed for a few machines, not a fleet.

Each machine runs its own daemon and keeps its own data; there's no central server, cloud account or subscription. The TUI connects to any of them, locally or over TLS. The packaged daemon runs as an unprivileged, sandboxed systemd service, and DuckDB's memory use is capped at 512 MB by default.

Get started

# install the daemon + TUI (APT repo on Debian/Ubuntu)
$ curl -fsSL https://bewitch.dev/install.sh | sudo sh
# open the TUI
$ bewitch
Read the install guide Browse the docs