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.


Related posts