Uptime Kuma: Dead-Simple Homelab Monitoring Before You Touch Grafana

Uptime Kuma is the easiest way to monitor your homelab — know the moment a service goes down, with notifications to your phone. A beginner Docker guide to up/down monitoring and status pages.

On this page
  1. Install it in one command
  2. Add your first monitors
  3. Get notified before your users do
  4. Bonus: a status page for the household
  5. Where it fits in the bigger picture

You will, eventually, have a service go down without noticing. The photo backup silently stops. The media server is dead when guests arrive. A container crashed on Tuesday and you find out Friday. The cloud providers you’re replacing had one thing you don’t yet: someone watching, all the time.

Uptime Kuma is that someone. It’s a self-hosted monitor that pings your services on a schedule and pokes you — on your phone, in Discord, wherever — the second something goes down. It takes about five minutes to set up, and it’s usually the very first monitoring tool people install, long before the heavier Prometheus-and-Grafana stack.

http://monitor.lab:3001Dashboard17 Up1 DownJellyfin100% · 38msProxmox100% · 9msImmichDOWN · 0msPi-hole100% · 4msbuildahomelab.dev

Install it in one command

Uptime Kuma is a single container. Give it a volume so your monitors and history survive restarts, and publish its port.

Run Uptime Kuma with Docker

docker run -d \
--name uptime-kuma \
--restart=unless-stopped \
-p 3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:2

Prefer Compose (recommended, so it lives alongside your other stacks)? Same thing, in a file:

docker-compose.yml

services:
uptime-kuma:
  image: louislam/uptime-kuma:2
  container_name: uptime-kuma
  ports:
    - "3001:3001"
  volumes:
    - uptime-kuma:/app/data
  restart: unless-stopped

volumes:
uptime-kuma:
Why the :2 tag

The louislam/uptime-kuma:2 tag pins the current major version (version 2). Pinning to a major tag means you get bug fixes and minor updates on docker compose pull without being surprised by a future breaking major release. New to compose files? Start with Your First Docker Compose Stack.

Bring it up (docker compose up -d) and open http://YOUR-HOST-IP:3001. The first screen creates your admin account. That’s the entire install — no config files.


Add your first monitors

Everything from here is point-and-click. Hit Add New Monitor and fill in a few fields.

1Monitor a service's web UI (HTTP)

Set the type to HTTP(s) and paste a service URL, e.g. http://192.168.1.30:8096 for Jellyfin. Uptime Kuma checks it every 60 seconds (adjustable) and records whether it responds and how quickly.

2Monitor a host that has no web page (Ping / TCP)

For your Proxmox host, router, or NAS, use a Ping monitor (is it reachable?) or a TCP Port monitor (is port 22 / 445 / 8006 open?). Great for anything that doesn’t serve a webpage.

3Monitor the internet itself

Add a Ping monitor to 1.1.1.1 or 8.8.8.8. Now if your uplink drops, you’ll have a clear record of exactly when — invaluable for arguing with your ISP.

A few monitors later, the dashboard starts earning its keep — every green segment is one successful check, and the moment anything fails you’ll see exactly when the run of green stops:

http://homelab.lan:3001/dashboard
Uptime Kuma dashboard showing four monitors — Cloudflare DNS, Grafana, Homepage, and Prometheus — all at 100% with solid green heartbeat bars and quick stats reading 4 up, 0 down
The demo lab's dashboard: an HTTP monitor each for Homepage, Grafana, and Prometheus, plus a ping to 1.1.1.1. Solid green bars, 100% uptime, and a timestamped event log on the right.
Watch your TLS certificates too

An HTTP(s) monitor on an HTTPS URL also tracks the certificate’s expiry date and can warn you before it lapses. If you set up HTTPS with Traefik, this quietly guards against the classic “the cert expired and everything broke” Saturday.


Get notified before your users do

A dashboard you have to look at isn’t monitoring — it’s a screensaver. The real value is the alert. Go to Settings → Notifications → Setup Notification and pick a channel: Uptime Kuma supports Discord, Telegram, email (SMTP), Slack, ntfy, Gotify, Pushover, and dozens more.

1Create a notification

Choose your channel (Telegram and Discord are the easiest — paste a bot token or a webhook URL), give it a name, and send the test message to confirm it arrives.

2Attach it to your monitors

Enable that notification on each monitor (or set it as default for new ones). Now, the moment a service fails a check, your phone buzzes — and buzzes again when it recovers, so you know it’s back.


Bonus: a status page for the household

Uptime Kuma can publish a status page — a clean, shareable page showing which services are up. Make one for your family (“is the movie server working?”) so they can check for themselves instead of asking you. You choose exactly which monitors appear, and it can be public or kept private on your LAN.


Where it fits in the bigger picture

Uptime Kuma answers “is it up?” brilliantly and instantly. When you later want “why is it slow, and what’s the trend over three months?”, that’s the job of Grafana and Prometheus — deep metrics, not just up/down. The two are complementary, and most mature homelabs run both.

Add your new monitor to your Homepage dashboard (there’s a built-in Uptime Kuma widget), and you’ve got eyes on the whole lab. Back to the roadmap for the next step.


Related posts:

Sources: Uptime Kuma (GitHub), Uptime Kuma wiki.

Comments

Comments are powered by GitHub Discussions — sign in with a GitHub account to join the conversation.