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.