← ~/content

Monitor Your Homelab with Uptime Kuma — Part 3: Advanced Features

Tutorial~11 min read
Monitor Your Homelab with Uptime Kuma — Part 3: Advanced Features
beginner~30 min

Prerequisites

  • Parts 1 & 2 complete (Uptime Kuma with 5 monitors and Pushover/Discord notifications)
  • Healthchecks.io account (free tier)
  • Web browser

Tools

  • Web browser
  • Healthchecks.io
  • SSH/Terminal

Software

  • uptime_kuma2.2.0
Watch on YouTube

You have monitors watching your services and notifications telling you when something breaks. That covers the essentials. But Uptime Kuma has a lot more to offer — features that take your monitoring from "it works" to "it works well."

In this final part, we'll organize your dashboard with groups and tags, set up a public status page, create maintenance windows to suppress alerts during planned work, add certificate expiry tracking, and solve the biggest question in monitoring: who watches the watchman?

Prerequisites

Before starting, you'll need:

  • Parts 1 & 2 complete — Uptime Kuma running on CT 150 with 5 monitors and Pushover/Discord notifications working
  • A Healthchecks.io accounthealthchecks.io (free tier gives you 20 checks — we only need 1)
  • A web browser for the Uptime Kuma and Healthchecks.io UIs

Step 1: Organize with Monitor Groups

With 5 monitors, the flat list is manageable. With 20 or 50, it's chaos. Groups let you organize monitors by function and collapse them on the dashboard.

Click Add New Monitor and set Monitor Type to Group. Name it something descriptive — we'll use "Web Server (tut-web)" since all our tut-web monitors logically belong together.

Uptime Kuma monitor edit form showing Group type with name Web Server tut-web

Now edit each tut-web monitor (Ping, HTTP, Keyword, TCP Port), scroll down to Monitor Group, and select the group you just created.

Uptime Kuma monitor edit form showing Monitor Group dropdown with Web Server option

Create a second group — "DNS Server (tut-dns)" — and move the DNS monitor into it.

Uptime Kuma monitor group dropdown showing DNS Server tut-dns selected

Your dashboard now shows collapsible groups instead of a flat list. Click the arrow to expand and see individual monitors.

Uptime Kuma dashboard showing expanded Web Server group with three nested monitors

TIP

Groups don't need their own notifications — the individual monitors inside already have Pushover and Discord enabled from Part 2. Adding notifications to the group itself would just create duplicate alerts.

Step 2: Add Tags

Tags let you visually categorize monitors with colored badges. They're most useful when you have dozens of monitors and want to filter by category.

Edit any monitor, scroll to the Tags section, and click to create a new tag. Give it a name (like "Critical") and a color. The Value field is optional — useful for extra context like a port number, but not required.

Uptime Kuma tag creation form with name color and value fields

Tags are reusable — once created, they appear in the dropdown for any monitor. Apply them to whichever monitors make sense.

Uptime Kuma tag dropdown showing red Critical tag ready to select

Your dashboard now shows tag badges next to monitor groups, making it easy to spot what matters at a glance.

Uptime Kuma dashboard showing monitor groups with Critical and DNS tag badges

Step 3: Certificate Expiry Monitoring

If you run any HTTPS services — and if you use a reverse proxy like Caddy, you do — you should know when certificates are about to expire. Uptime Kuma tracks this automatically for any HTTPS monitor.

Add an HTTPS monitor for a service behind your reverse proxy. We'll use Pi-hole (https://pihole.hake.rodeo/admin/) as the example — substitute any HTTPS service on your network. In the monitor settings under Advanced, check Certificate Expiry Notification.

Uptime Kuma Advanced settings with Certificate Expiry Notification checkbox enabled

To see the feature in action with a public site, add a second HTTPS monitor for https://github.com with the same settings. Compare the two — GitHub shows a clean certificate expiry date:

Uptime Kuma GitHub HTTPS monitor showing Up status with certificate expiry 86 days

Your local service through the reverse proxy shows both certificate expiry and domain expiry:

Uptime Kuma Pi-hole monitor showing certificate expiry 79 days and domain expiry negative 21 days

NOTE

You might see a negative number for Domain Exp. — this is the domain registration expiry, not the TLS certificate. For domains managed by Cloudflare or your registrar, this data may not be meaningful. The Cert Exp. line is what matters for TLS.

WARNING

If your reverse proxy renews a certificate (Caddy does this automatically), Uptime Kuma may cache the old certificate's expiry date. If Cert Exp. shows a suspicious number, toggle the Certificate Expiry Notification checkbox off and back on to force a refresh.

Step 4: Create a Status Page

Status pages give anyone a read-only view of your service health — no login required. Great for family members or roommates who use your homelab services and want to check if things are up without asking you.

Click Status Pages in the top navigation bar (not the sidebar).

Uptime Kuma navigation bar with Status Pages and Dashboard buttons

Click New Status Page. Give it a name and slug — the slug becomes the URL path.

Uptime Kuma new status page form with name Homelab Status and slug homelab

On the editor, add groups and assign monitors to them. You can select individual monitors or entire monitor groups.

Uptime Kuma status page editor with monitor selector dropdown showing available monitors and groups

Click Save and visit your status page at http://<your-kuma-ip>:3001/status/homelab.

When you're logged in, you'll see edit controls:

Uptime Kuma Homelab Status page with edit controls showing All Systems Operational

Open the same URL in a private/incognito tab to see what others see — a clean, read-only status dashboard:

Uptime Kuma Homelab Status page public view showing All Systems Operational without edit controls

Step 5: Maintenance Windows

When you're doing planned work — upgrading a service, rebooting a host, swapping a drive — you don't want your phone blowing up with alerts for downtime you caused. Maintenance windows suppress notifications for selected monitors during planned work.

Click your username and select Maintenance.

Uptime Kuma Maintenance page showing no maintenance windows with Schedule Maintenance button

Click Schedule Maintenance and configure:

  • Title: whatever describes the work
  • Affected Monitors: select all monitors that will be impacted
  • Status Pages: check "All Status Pages" to show a maintenance banner
  • Strategy: "Active/Inactive Manually" — you control when it starts and stops

Uptime Kuma schedule maintenance form with all monitors selected and manual strategy

Once saved and active, you'll see it in the maintenance list with Pause/Edit/Delete controls.

Uptime Kuma maintenance list showing active Test Maintenance Window with manual strategy

And your status page shows a blue banner letting visitors know maintenance is in progress:

Uptime Kuma status page showing blue maintenance banner above All Systems Operational

With maintenance active, monitors still track status but notifications are suppressed. No phone buzzing at 2 AM during planned upgrades. When you're done, just pause or delete the maintenance window and notifications resume.

TIP

The "Manual" strategy is perfect for homelab work where you don't know exactly when you'll start and finish. For recurring maintenance (like weekly backup windows), use the "Recurring" strategy with a cron schedule.

Step 6: Who Watches the Watchman?

There's a fundamental problem with self-hosted monitoring: if Uptime Kuma goes down — or the entire Proxmox host goes down — nobody gets notified. The monitoring tool can't alert you about its own death.

The solution: an external service that expects a heartbeat from Uptime Kuma at regular intervals. If the heartbeat stops, the external service alerts you. Healthchecks.io does exactly this, and the free tier (20 checks) is more than enough.

Create a Healthchecks.io Check

Sign up at healthchecks.io and create a new check.

Healthchecks.io check creation form with name Uptime Kuma Heartbeat

Name it "Uptime Kuma Heartbeat" and save. You'll get a unique ping URL — copy this.

Healthchecks.io How To Ping showing the unique ping URL for the check

Before doing anything else, set the Period and Grace values. Period is how often you expect a heartbeat ping. Grace is how long to wait after a missed ping before alerting. Set both to 5 minutes.

Healthchecks.io period and grace time settings both set to 5 minutes

WARNING

The default Period is 1 day with a 1-hour Grace. If you don't change these before testing, you'll be waiting over 25 hours for an alert. Set them to 5 minutes first.

Add Notification Integrations

Go to Integrations in Healthchecks.io. You'll see a list of available services.

Healthchecks.io integrations page listing Discord Pushover and other notification options

For Discord: Click Add Integration next to Discord. Use the native Discord integration (OAuth-based) — it connects directly to your Discord server.

Healthchecks.io Discord integration with Connect Discord OAuth button

You'll be redirected to Discord to authorize the connection. Select your server and channel.

Discord OAuth authorization for Healthchecks.io with server and channel selection

WARNING

Do NOT use the generic "Webhook" integration with a Discord webhook URL — it sends a different payload format and won't work. Use the native Discord integration (the one with the Discord logo and OAuth).

For Pushover: Click Add Integration next to Pushover. It uses Pushover's native subscription flow — click "Subscribe with Pushover" and it connects automatically.

Healthchecks.io Pushover integration with priority settings and Subscribe button

Once both are connected, your integrations list should show Discord and Pushover ready to deliver:

Healthchecks.io integrations showing Discord and Pushover connected and ready to deliver

Step 7: Wire Up the Heartbeat

Now we'll set up a cron job on the Uptime Kuma container that pings Healthchecks.io every 5 minutes. If Kuma (or the host) goes down, the pings stop, and Healthchecks.io alerts you.

SSH into your Proxmox host and enter the Kuma container:

Enter the Kuma container
pct enter 150

Install the cron job — replace <your-uuid> with the UUID from your Healthchecks.io ping URL:

Install heartbeat cron job
echo "*/5 * * * * curl -fsS -m 10 --retry 5 https://hc-ping.com/<your-uuid> > /dev/null 2>&1" | crontab -

Quick breakdown of the curl flags:

  • -fsS — fail silently on HTTP errors, show errors on stderr
  • -m 10 — 10-second timeout so a hung request doesn't block the next cron run
  • --retry 5 — retry up to 5 times on transient failures
  • > /dev/null 2>&1 — no local logging needed

Verify the cron job is installed:

Verify cron job
crontab -l

Send a manual ping to confirm connectivity:

Send first ping
curl -fsS -m 10 https://hc-ping.com/<your-uuid>

You should see OK. Check Healthchecks.io — your check should flip to green.

Healthchecks.io dashboard showing Uptime Kuma Heartbeat check as up with recent ping

Step 8: Test the Watchman

We need to prove this works. Remove the cron job to simulate Kuma going offline:

Remove cron job to simulate failure
crontab -r
Verify removal
crontab -l

You should see "no crontab for root".

Now wait. After ~10 minutes (5 min period + 5 min grace), Healthchecks.io detects the missing heartbeat. First it goes to a warning state:

Healthchecks.io showing Uptime Kuma Heartbeat in warning state with last ping 8 minutes ago

Then the alerts fire. Discord gets the notification from the Healthchecks.io bot:

Discord alert from Healthchecks.io showing Uptime Kuma Heartbeat is down

And Pushover hits your phone:

iPhone Pushover notification showing Uptime Kuma Heartbeat check is down from Healthchecks.io

That's the watchman working. If your Proxmox host crashes, the container dies, or Uptime Kuma hangs — the heartbeat pings stop and you find out within 10 minutes from an external service that has nothing to do with your infrastructure.

Step 9: Restore the Heartbeat

Reinstall the cron job and send an immediate ping to recover:

Reinstall cron job and recover
echo "*/5 * * * * curl -fsS -m 10 --retry 5 https://hc-ping.com/<your-uuid> > /dev/null 2>&1" | crontab -
curl -fsS -m 10 https://hc-ping.com/<your-uuid>

Healthchecks.io flips back to green and sends recovery notifications on both channels.

Discord alert from Healthchecks.io showing Uptime Kuma Heartbeat is back up

iPhone Pushover notification showing Uptime Kuma Heartbeat check is back up from Healthchecks.io

Reverse Proxy Monitoring Strategy

If you run services behind a reverse proxy like Caddy, there's a monitoring pattern worth adopting. We already set up an HTTPS monitor through Caddy in Step 3 — here's the full picture.

Three layers of monitoring per proxied service:

LayerWhat to monitorWhat it tells you
Caddy itselfHTTP or TCP check on Caddy's IP/port"Is the proxy alive?"
Through CaddyHTTPS monitor on the proxied URL (e.g., https://vault.yourdomain.com)"Is the full chain working?" (DNS, TLS, proxy, service)
Direct IPHTTP or TCP on the service's internal IP/port"Is the service itself alive?"

Why both URL and direct IP? Fault isolation:

Through CaddyDirect IPCaddy monitorDiagnosis
DownDownUpThe service itself is down
DownUpUpBad proxy config or cert issue for that domain
DownUpDownCaddy is down — all proxied services affected
UpUpUpEverything is fine

We already set up the "through Caddy" monitor in Step 3. To complete the pattern, you'd add a direct monitor for the service (e.g., http://10.1.99.100/admin/ for Pi-hole) and a monitor for Caddy itself. This isn't required for the tutorial, but it's how you'd set up production monitoring.

Troubleshooting

Certificate expiry showing wrong or negative numbers? Uptime Kuma caches certificate data. If your reverse proxy renewed the cert, toggle the "Certificate Expiry Notification" checkbox off and back on to force a refresh.

Healthchecks.io "Webhook" integration not working with Discord? The generic Webhook sends a different payload than Discord expects. Use the native Discord integration (OAuth-based), not the generic Webhook option.

Healthchecks.io taking forever to alert? Check your Period and Grace settings. The default is 1 day + 1 hour — set both to 5 minutes for practical homelab use.

Domain Exp. showing negative days? That's domain registration expiry, not TLS certificate expiry. For domains managed by Cloudflare, this is often inaccurate. Focus on Cert Exp. instead.

What We Built

Across all three parts, you now have:

Part 1 — Foundation:

  • Uptime Kuma on a dedicated LXC container with automatic startup
  • Five monitor types covering different failure scenarios
  • Kill tests proving which monitor catches which failure

Part 2 — Notifications:

  • Pushover for instant phone alerts
  • Discord for a persistent alert log
  • Full down/recovery notification cycle verified

Part 3 — Advanced:

  • Monitor groups and tags for dashboard organization
  • Certificate expiry tracking on HTTPS monitors
  • A public status page for household visibility
  • Maintenance windows to suppress alerts during planned work
  • Healthchecks.io heartbeat solving "who watches the watchman"
  • A reverse proxy monitoring strategy for fault isolation

Your homelab monitoring is now more capable than what many small businesses have. Every service is watched, every failure is reported, and even the monitoring tool itself is monitored.

Related Products

Some links are affiliate links. I may earn a small commission at no extra cost to you.