Quick answer: they're not competitors. Uptime Kuma answers "is it reachable from outside?", Netdata answers "what is this box doing right now?", and Prometheus + Grafana answers "what was it doing at 3am last Tuesday, and alert me next time". Pick Uptime Kuma if you have one question and ten minutes. Pick Netdata if you debug boxes. Pick Prometheus + Grafana if you need history, alerting rules, and more than a handful of hosts. I run all three, on purpose, and each one has caught things the other two missed.
Everyone asks "which monitoring tool should I use" as if there's one answer. Then they install Grafana, spend a weekend on dashboards, and still find out from a player that the server is down. Here's the honest split.
The comparison
| Uptime Kuma | Netdata | Prometheus + Grafana | |
|---|---|---|---|
| Question it answers | Is it up, from outside? | What's this box doing now? | What happened, and when? |
| Setup time | 10 minutes | 5 minutes | An afternoon, minimum |
| Data retention | Ping history | Hours (default), high-res | Months/years, your call |
| Resolution | Per check (60s typical) | Per-second | 15s typical, configurable |
| Alerting | Excellent, built in | Decent, per-node | Powerful, and fiddly |
| Multi-host | Yes, it's the point | Awkward without their cloud | Yes, it's the point |
| RAM cost | ~100 MB | ~150–300 MB per node | ~1 GB+ for the stack |
| Learning curve | None | None | PromQL, and it's real |
| Best at | Blackbox / external view | Live forensics on one box | History, correlation, alert rules |
Uptime Kuma — the one you install first
If you monitor nothing today, install this today. It pings your services from outside and tells you when they stop answering. That's the single most valuable signal in monitoring, and it takes ten minutes.
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "3001:3001"
Add HTTP checks, TCP port checks, a ping. Wire the Discord or Telegram notifier — that part is genuinely two clicks, and it's better at notifications than Alertmanager is after an hour of YAML.
The critical rule: run it somewhere else. On a different box, ideally a different provider. Uptime Kuma on the same host it monitors is a smoke detector wired to the same fuse as the fire. The host dies, the monitor dies with it, and you get no alert at all. I run mine on a small VPS that does nothing else. Full setup in /uptime-kuma-self-hosted-monitoring/.
What it won't tell you: why. It says "down". It doesn't say the disk filled up. Which is where the other two come in.
Netdata — the one you open when something is on fire
Netdata is a per-second, zero-config firehose. Install it, open the page, and you have hundreds of charts you didn't configure — CPU per core, disk I/O per device, network per interface, per-process breakdowns, all live.
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
Its superpower is resolution and immediacy. Prometheus scraping every 15 seconds will smear a 4-second I/O stall into nothing. Netdata shows you the spike, and shows you which process caused it, without you having written a single query. When a box is misbehaving right now and I want to know why, I open Netdata, not Grafana.
Where it disappoints: history and fleet view. Default retention is a few hours of high-res data. Correlating "the same thing happened last month" is not what it's for, and multi-node is where they'd like you to pay for their cloud. Some people are fine with that; I'd rather my monitoring not depend on someone else's SaaS. Setup notes: /netdata-monitoring-ubuntu/.
Also, be honest about the cost — a few hundred MB of RAM and non-trivial CPU on a small box, for data you look at maybe once a week. On a 2 GB VPS running a game server, that's a real trade. I keep it on infrastructure boxes and skip it on the tight ones.
Prometheus + Grafana — the one that takes a weekend and pays it back
This is the heavyweight, and the only one of the three that gives you all of: months of history, arbitrary queries across hosts, and alert rules that express real conditions instead of "is it pinging".
The stack: Prometheus scrapes node_exporter on each host, stores time-series, evaluates alert rules; Alertmanager routes the alerts; Grafana draws it. Compose file and the working config in /prometheus-grafana-monitoring-stack-docker/.
What you actually get for the afternoon you spend:
# alert when a specific service — not the box — is dead
node_systemd_unit_state{name="hytale.service",state="active"} == 0
# disk full in the next 4 hours, based on the current trend
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4*3600) < 0
That second one is the whole argument. No other tool here will wake you before the disk fills. It's the difference between an alert and an autopsy. (And if you'd rather do the autopsy: /linux-disk-full-forensics/.)
The cost is real. PromQL is a language you have to learn — rate() vs increase(), counters vs gauges, why your graph is empty because you forgot [5m]. Alertmanager's routing YAML is genuinely unpleasant. The stack wants ~1 GB of RAM. And Grafana dashboards are a hobby that will eat your weekend if you let it. Import a community dashboard (node_exporter full, ID 1860), delete two-thirds of the panels, and stop.
So what do I actually run
- Uptime Kuma on a separate VPS — external checks on every public service. This is what pages me when something is down.
- Prometheus + Grafana on the monitoring box — scraping every host over WireGuard, months of history, alert rules that page me before things break. See /monitor-gameserver-wireguard-prometheus/ for the no-exposed-ports setup.
- Netdata on the boxes I actually debug — opened only when something is already wrong.
Plus a log watcher, because none of these three read logs, and the most interesting failures are in the logs: /discord-alerts-server-logs-systemd/.
If you only pick one
Uptime Kuma. No contest. Ten minutes, and you'll know when your stuff breaks instead of hearing it from a user. Every other tool in this post is about why — and "why" is a problem you only get to have once you know that.
Then add Prometheus + Grafana when you have more than two hosts, or the first time an incident makes you wish you had last week's graphs. That wish is the signal. Don't build it before you feel it — you'll build the wrong dashboards.