March 19, 20257 min read

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.

dockermonitoringfreebudgetdevops

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:

FeatureKernus Free
Hosts1
ContainersUp to 6 on that host
Metric collectionEvery 5 minutes
Metric retention1 day
Alerts10 per day
Alert channelsEmail 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:

SituationRecommendation
Side project, 1 server, low stakesBeszel (free) or Kernus free
Side project that's generating revenueKernus Pro ($29/mo) — you can afford it and the reliability matters
2-5 servers, startup pre-revenueBeszel or Kernus free (with 1-host limitation)
2-5 servers, paying customersKernus Pro — 5 hosts, all channels, 7-day retention
10+ servers, production criticalKernus Business ($99/mo) or Grafana Cloud (if you need logs+traces)
Enterprise, compliance requirementsKernus 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

ToolPriceMulti-hostAlertsRetentionOOM detectionStatus page
cAdvisorFreeNone (in-memory)
BeszelFree (self-host)BasicConfigurable
Netdata AgentFree (self-host)❌ (need Cloud)BasicLocal only
Netdata CloudFree (3 nodes)3 days
Kernus Free$0❌ (1 host, 6 containers)Email only1 day❌ (Pro+ URL)
Kernus Pro$29/mo✅ (5 hosts, 30 containers)All channels7 days

Combining tools

You don't have to pick just one. A common setup for cost-conscious teams:

  1. Beszel for the multi-host overview dashboard (free)
  2. Kernus Pro for alerts with rich context (OOM classification, exit codes, log snapshots) and the on-call channel alerts
  3. 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