
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:
- Read the container’s own HEALTHCHECK, not just its exposed port
- Alert on restart loops, not just on crashes
- Watch log volume, since a wedged process often stops logging
- Cover the host too, so a full disk does not silently break every container
- Notify on a channel you actually read, not just email
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:
- Free: open source, no tiers.
- Paid: none.
Platforms: Windows, macOS, Linux via Docker.
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:
- Free: open source, no tiers.
- Paid: none.
Platforms: Windows, macOS, Linux native binaries or Docker.
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:
- Free: open source, no tiers.
- Paid: none.
Platforms: Windows, macOS, Linux via Docker.
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:
- Free: community edition covers a single node with all metrics.
- Paid: cloud plan under $10/mo per user for multi-node aggregation and notifications.
Platforms: Windows, macOS, Linux.
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:
- Free: open source, no tiers.
- Paid: none.
Platforms: Windows, macOS, Linux.
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:
- Free: all components are open source.
- Paid: managed cloud tiers exist but are not needed for a homelab.
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:
- Free: open source, no tiers.
- Paid: commercial support is optional.
Platforms: Windows, macOS, Linux.
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:
- Free: open source, no tiers.
- Paid: none.
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
- If you have three services and want one tool, install Uptime Kuma and be done.
- If you want history without complexity, pair Uptime Kuma with Beszel.
- If you need to see why a container is unhappy, keep Dozzle open.
- If you want anomaly detection without writing rules, run Netdata.
- If you live in a terminal, Glances is the one screen you keep.
- If the homelab is growing and you plan to add servers, invest in Prometheus + Grafana now.
- If you want an enterprise-grade platform with escalations, Zabbix is the fit.
- If you want dead containers to fix themselves, add Autoheal.
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.