Docker monitoring on a budget: free and cheap options
Honest roundup of free and cheap Docker monitoring options in 2025. cAdvisor, Beszel, Netdata, Kernus free tier — what each actually gives you and when to upgrade.
Not every Docker setup needs a $500/month monitoring tool. If you're running a personal project, a startup pre-revenue, or a homelab, you need something that works well enough without eating your cloud budget. This is an honest roundup of free Docker monitoring options and cheap paid alternatives — including what each tool actually does, what it doesn't do, and when it makes sense to upgrade.
cAdvisor: Google's free container monitoring
cAdvisor (Container Advisor) is a standalone container from Google that reads Docker's stats API and exposes them via a web UI and a Prometheus-compatible metrics endpoint.
Setup
docker run -d \
--name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:latest
Visit http://your-server:8080 and you'll see a basic dashboard with per-container CPU, memory, and network metrics.
What cAdvisor gives you
- CPU usage per container (real-time graph)
- Memory usage per container
- Network I/O per container
- Filesystem I/O
- Per-container and host-level summaries
- Prometheus metrics endpoint at
/metrics
What cAdvisor doesn't give you
- No alerts — it's purely a metrics collector and viewer, no notification system
- No persistent history — refreshing the page or restarting cAdvisor loses all history
- No multi-host support — one cAdvisor per host, no central dashboard
- No OOM kill detection — doesn't track exit codes or restart causes
- No authentication — anyone with network access to port 8080 sees your metrics
Best for: Dev environments, quick one-off inspection, feeding metrics into Prometheus/Grafana if you're building that stack.
Not suitable for: Production monitoring where you need alerts, history, or multi-host visibility.
Beszel: self-hosted, genuinely good, free
Beszel is the best free multi-host monitoring tool for Docker as of early 2025. It has a clean UI, Docker container monitoring, multi-server support, and a small resource footprint.
Architecture
Beszel runs as:
- Hub — a central server (usually a Docker container on a dedicated monitoring machine or one of your existing servers) that provides the web UI and stores data
- Agent — a lightweight process on each monitored server
# docker-compose.yml for the hub
services:
beszel:
image: henrygd/beszel
restart: unless-stopped
ports:
- 8090:8090
volumes:
- ./beszel_data:/beszel_data
# On each server to monitor — add to existing docker-compose.yml
services:
beszel-agent:
image: henrygd/beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
PORT: 45876
KEY: "paste_public_key_from_hub_here"
What Beszel gives you (free)
- Per-server CPU, memory, network I/O, disk usage
- Per-container resource usage
- Multi-host dashboard (all servers in one view)
- Basic alerting (email, Telegram, Slack, Discord)
- Configurable data retention
Beszel's real limitations
- You host it — the hub can go down, and when it does, you have no visibility. Your monitoring system needs to be more reliable than what it monitors.
- No OOM kill detection — doesn't classify why containers stopped
- No status pages or uptime badges
- Limited alert context — alerts don't include log snapshots
- Maintenance — you own updates, backups, and recovery
For a homelab or side project where zero-cost is the constraint and the stakes are low, Beszel is excellent. For production infrastructure where monitoring needs to be reliable, self-hosting your monitoring system creates a circular dependency problem.
Netdata: high-resolution metrics, some cloud features
Netdata is a mature open-source monitoring agent with per-second metric resolution and beautiful built-in dashboards. The agent is free and runs on each host. The Cloud product provides multi-host visibility and some additional features.
Free tier (self-hosted)
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh
Visit http://your-server:19999 for a gorgeous real-time dashboard. Docker metrics are automatic.
What the free installed agent gives you:
- Per-second metrics (impressive granularity)
- Beautiful, information-dense dashboards
- CPU, memory, disk, network per container
- Basic alerts via email
Netdata Cloud free tier: 5 nodes, 3-day retention, 3 users. After that, paid plans.
Netdata's limitations for Docker monitoring
- No exit code tracking or OOM classification
- No status pages
- Discord/Telegram alerts require custom setup (Netdata's built-in channels are email, Slack, PagerDuty, some others — not Discord natively)
- The free cloud tier's 3-day retention means you can't investigate an incident that happened 4 days ago
Best for: Teams that want detailed per-second metrics and are comfortable with the self-hosted model.
Kernus free tier: what it includes
Kernus has a genuine free tier, not a trial:
| Feature | Kernus Free |
|---|---|
| Hosts | 1 |
| Containers | Up to 6 on that host |
| Metric collection | Every 5 minutes |
| Metric retention | 1 day |
| Alerts | 10 per day |
| Alert channels | Email only |
| OOM kill detection | ✅ |
| Exit code classification | ✅ |
| TUI (terminal UI) | ✅ |
| Status page | ❌ (Pro+) |
| README uptime badge (SVG) | ✅ |
The 1-day retention is a real limitation — you can see what's happening now and what happened in the last day, but not last week's incident. And the single-host restriction means if you have more than one server, you're choosing which one to monitor.
That said: the free tier is genuinely useful for a single VPS or personal project. OOM kill detection and exit code classification work on the free plan, which is more than most free monitoring tools offer.
When to upgrade from free to paid
Here's a practical decision framework:
| Situation | Recommendation |
|---|---|
| Side project, 1 server, low stakes | Beszel (free) or Kernus free |
| Side project that's generating revenue | Kernus Pro ($29/mo) — you can afford it and the reliability matters |
| 2-5 servers, startup pre-revenue | Beszel or Kernus free (with 1-host limitation) |
| 2-5 servers, paying customers | Kernus Pro — 5 hosts, all channels, 7-day retention |
| 10+ servers, production critical | Kernus Business ($99/mo) or Grafana Cloud (if you need logs+traces) |
| Enterprise, compliance requirements | Kernus Enterprise or Datadog |
The upgrade trigger is usually: "I just found out about an incident from a user, not from my monitoring." That's the moment where the cost of a paid monitoring tool is obviously worth it.
The free option comparison table
| Tool | Price | Multi-host | Alerts | Retention | OOM detection | Status page |
|---|---|---|---|---|---|---|
| cAdvisor | Free | ❌ | ❌ | None (in-memory) | ❌ | ❌ |
| Beszel | Free (self-host) | ✅ | Basic | Configurable | ❌ | ❌ |
| Netdata Agent | Free (self-host) | ❌ (need Cloud) | Basic | Local only | ❌ | ❌ |
| Netdata Cloud | Free (3 nodes) | ✅ | ✅ | 3 days | ❌ | ❌ |
| Kernus Free | $0 | ❌ (1 host, 6 containers) | Email only | 1 day | ✅ | ❌ (Pro+ URL) |
| Kernus Pro | $29/mo | ✅ (5 hosts, 30 containers) | All channels | 7 days | ✅ | ✅ |
Combining tools
You don't have to pick just one. A common setup for cost-conscious teams:
- Beszel for the multi-host overview dashboard (free)
- Kernus Pro for alerts with rich context (OOM classification, exit codes, log snapshots) and the on-call channel alerts
- cAdvisor on individual servers when you need high-granularity debugging
The monitoring landscape favors composability — use free tools for what they're good at, pay for what they can't do.
For a detailed look at how Kernus compares to paid tools: Kernus vs Datadog and Kernus vs Grafana Cloud.
Start with Kernus free — 1 host, up to 6 containers, no credit card →
Try Kernus free
Set up Docker monitoring in 2 minutes. Free for 1 host — no credit card required.
Start monitoring