Monitoring and Alerting
Uptime Kuma for "is it up," Grafana and Prometheus for "how's it doing," and a notification channel that actually reaches you.
A homelab you can't walk away from for a week isn't done yet, even if everything on it is technically working right now. Monitoring is what turns "I hope it's fine" into "I'd know if it wasn't." This page keeps things practical and scoped to what a solo homelab actually needs - full observability stacks (centralized logging, long-term metrics retention at scale) are covered later in Observability at Scale if you ever outgrow this.
Uptime Kuma: is it up, right now
Uptime Kuma is a self-hosted status page and uptime checker - point it at a URL, a port, a ping target, or a Docker container, and it polls on an interval and tracks response time and downtime history.
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3002:3001"
volumes:
- ./data:/app/data
restart: unless-stopped
Add a monitor per service that matters (your reverse proxy, Pi-hole, Jellyfin, the NAS). This is the single highest-value monitoring tool for a homelab of this size - most outages you'll actually experience are "a service crashed and didn't restart" or "the internet went down," and Kuma catches both immediately.
Resource expectations: light - well under 512MB RAM for a homelab- scale number of monitors.
Grafana + Prometheus: how's it doing over time
Uptime Kuma answers "is it up." Prometheus (a time-series metrics database that scrapes numeric data - CPU, RAM, disk, network - from your hosts and services at regular intervals) and Grafana (a dashboarding tool that visualizes whatever Prometheus has collected) answer "is it trending toward a problem."
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3003:3000"
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
volumes:
prometheus-data:
grafana-data:
Prometheus needs exporters on each thing you want metrics from -
node-exporter for host-level metrics (CPU/RAM/disk) on each VM or
LXC container, cadvisor if you want per-container breakdowns.
Proxmox's own built-in metrics export (Datacenter > Metric Server)
does not speak Prometheus - it only pushes to InfluxDB, Graphite, or
OpenTelemetry. To get Proxmox host and guest metrics into Prometheus,
run the community
prometheus-pve-exporter
instead, which scrapes the Proxmox API and exposes it in Prometheus
format - often the highest-value single source to add first since it
covers every guest's resource usage from one place.
Resource expectations: Prometheus's storage grows with the number of metrics and retention period - a modest homelab setup (a handful of hosts, default retention) is comfortable in a couple GB of RAM and a few GB of disk over time; watch it if you add many exporters or long retention windows.
Honest scoping note: don't set this up until you've actually had a question Uptime Kuma couldn't answer ("was this always slow, or did it get slower after that update?"). It's genuinely useful, but it's also where homelabbers commonly over-invest time relative to what a handful of home services need.
Getting alerts somewhere you'll see them
A monitoring tool nobody looks at is decoration. Both Uptime Kuma and Grafana support outbound notifications on alert conditions; pick a channel you'll actually check:
- ntfy - a simple, self-hostable push
notification service. Send a message to a topic via a plain HTTP
request, subscribe to that topic in the ntfy app on your phone.
Minimal setup, no account required if you use the public instance
(or self-host for privacy).
curl -d "Jellyfin is down" ntfy.sh/your-unique-topic-name - Discord webhook - if you're already using Discord, a webhook URL posts alerts straight into a channel. Zero infrastructure, works from Uptime Kuma and Grafana out of the box.
- Email - the most universal fallback, supported everywhere, but the easiest to silently start ignoring - push-based options above are more likely to actually get seen in time.
Configure at least one notification channel in Uptime Kuma (Settings > Notifications) before you consider monitoring "done" - an uptime checker with no alerting is just a status page you have to remember to check yourself.
Next: Proxmox Backups.