Homelab container monitoring on the desktop

A recent XDA writeup told a familiar story: a dead container sat in a homelab for 64 days, and the popular monitors did not catch it. The catch is that most homelab monitoring is HTTP-check theatre. It pings the load balancer, gets a 200 back, and calls the whole stack healthy while a background worker crashed a month ago. This roundup covers the best apps for homelab container health monitoring on Windows, macOS, and Linux, with a focus on tools that look at the container itself, not just the port in front of it.

Quick comparison

App Best for Platforms Free plan Starting price Standout
Uptime Kuma HTTP and Docker checks with alert routing Windows, macOS, Linux Yes, self-host free Free Docker health probe, dozens of notifiers
Beszel Lightweight agent-based homelab dashboard Windows, macOS, Linux Yes, self-host free Free Container CPU and memory over time, tiny footprint
Dozzle Live container log tail across hosts Windows, macOS, Linux Yes, self-host free Free Real-time logs with filter and swarm view
Netdata High-frequency metrics with anomaly detection Windows, macOS, Linux Yes, community edition Cloud plan under $10/mo Per-second granularity, ML-based alerts
Glances Terminal-first metric browser with a web UI Windows, macOS, Linux Yes, open source Free One screen for CPU, RAM, disk, containers
Prometheus + Grafana Real metrics pipeline with dashboards Windows, macOS, Linux Yes, both open source Free Alertmanager rules on any metric
Zabbix Full monitoring platform with agents Windows, macOS, Linux Yes, open source Free Templates, escalations, distributed proxies
Autoheal Restart unhealthy containers automatically Windows, macOS, Linux Yes, open source Free Watches HEALTHCHECK and restarts on fail

What to look for in a container monitor

The XDA case is instructive. A container was running, a port was open, and the process inside had wedged. The monitor watched the port, so nothing fired. To avoid that:

1. Uptime Kuma, best for HTTP and Docker checks with alert routing

Uptime Kuma is the default self-hosted uptime monitor for a reason. It runs as a single container, checks HTTP endpoints, and speaks to Docker directly for container status, so a stopped container triggers an alert without a port check needing to fail first.

Where it falls short: monitors are configured one by one in the UI, which is fine for a small homelab and painful past a few dozen services. Historical data is bounded by the SQLite store.

Pricing:

Platforms: Windows, macOS, Linux via Docker.

Download: Site GitHub

Bottom line: the first thing to install when a homelab has more than three services.

2. Beszel, best for a lightweight agent-based dashboard

Beszel is a small Go agent plus a hub that renders a clean dashboard of CPU, RAM, disk, and container stats over time. It runs where Netdata is too heavy and Uptime Kuma is too binary.

Where it falls short: the alert layer is thinner than a Prometheus pipeline, and integrations outside the built-in notifiers require a Webhook stitch.

Pricing:

Platforms: Windows, macOS, Linux native binaries or Docker.

Download: Site GitHub

Bottom line: the right pick when you want history graphs without a Prometheus commitment.

3. Dozzle, best for live log tailing across hosts

Dozzle streams container logs in a browser with filters, log level colors, and a swarm mode that pulls logs from every host in one pane. A dying container often shows the failure in its logs before the health check flips, and Dozzle is the fastest way to see that.

Where it falls short: it is a log viewer, not a full monitor, so pair it with something that alerts on the pattern you spot.

Pricing:

Platforms: Windows, macOS, Linux via Docker.

Download: Site GitHub

Bottom line: the tab you keep open when a container starts misbehaving.

4. Netdata, best for high-frequency metrics with anomaly detection

Netdata samples every metric per second and applies ML models that flag anomalies without you writing alert rules. Container drops, network stalls, and disk latency show up on a live graph within a second or two.

Where it falls short: the agent uses more resources than Beszel or Glances, and the cloud tier is where the multi-node views really shine.

Pricing:

Platforms: Windows, macOS, Linux.

Download: Site GitHub

Bottom line: the option to reach for when a homelab crossed the “big enough that I need real graphs” line.

5. Glances, best for a terminal-first metric browser

Glances shows CPU, memory, disk, network, and Docker container stats in a single terminal view, and it exposes the same view over a web UI when you want a browser tab instead. For a headless server, it is the fastest way to see what is happening right now.

Where it falls short: history is limited to what the process holds in memory, and there is no built-in alert channel beyond stdout.

Pricing:

Platforms: Windows, macOS, Linux.

Download: Site GitHub

Bottom line: the second SSH tab on every homelab admin’s monitor.

6. Prometheus + Grafana, best for a real metrics pipeline

Prometheus scrapes metrics, Grafana renders them, and Alertmanager routes alerts wherever you want them. Point cAdvisor and node-exporter at the same Prometheus and you have per-container CPU, memory, restart count, and health status in one query language.

Where it falls short: three or four moving parts to configure, and PromQL takes a weekend to click. The reward is a monitoring stack that does not outgrow the homelab.

Pricing:

Platforms: Windows, macOS, Linux via Docker or native binaries.

Download: Prometheus Grafana cAdvisor

Bottom line: the endgame if you plan to grow the homelab. Overkill for three containers.

7. Zabbix, best for a full monitoring platform

Zabbix is a mature monitoring server with agents for every OS, templates for hundreds of services, and escalation trees for alerts. It watches the container, the host, and the network from one dashboard.

Where it falls short: the UI shows its age, and a homelab of five containers does not need the operational surface Zabbix brings.

Pricing:

Platforms: Windows, macOS, Linux.

Download: Site GitHub

Bottom line: pick this if you also administer real servers at work and want one tool on both sides of the fence.

8. Autoheal, best for automatic restarts on failed health checks

Autoheal is a single container that watches other containers’ HEALTHCHECK status and restarts anything that reports unhealthy for too long. It does not report, it acts, so a wedged process is dead and reborn before you know anything went wrong.

Where it falls short: it needs a real HEALTHCHECK in each container’s Dockerfile or compose file. A container without one is invisible to Autoheal.

Pricing:

Platforms: Windows, macOS, Linux via Docker.

Download: GitHub

Bottom line: the safety net you add after fixing the health-check definitions.

How to pick the right one

FAQ

Why did my monitoring miss a dead container? The most common cause is a check that watches the port in front of the container while the process behind it hangs. Move the check inside the container using Docker HEALTHCHECK, or pair the HTTP check with a metric like process count or log-line rate.

Do I need Prometheus for a small homelab? No. Uptime Kuma and Beszel cover most of what a small homelab needs. Prometheus becomes worthwhile once you want long history, custom queries, and rule-based alerts on any metric.

What is the best free option? Uptime Kuma, Beszel, Dozzle, Glances, Prometheus, Grafana, Zabbix, and Autoheal are all free and open source. Uptime Kuma is the shortest path from install to first alert.

Can I use these on Windows? Yes. Every option here runs on Windows either natively or via Docker Desktop. Uptime Kuma, Beszel, Dozzle, Prometheus, and Grafana are typically run as containers.

How do I stop the alert-fatigue problem? Route alerts to a channel you actually read, set escalation from warning to page after a delay, and prefer symptom alerts (users cannot log in) over cause alerts (CPU is 85 percent). Every tool above supports this pattern.