← All Guides
beginner

Netdata Setup: Real-Time System Monitoring in Minutes

Netdata gives you per-second system metrics, automatic anomaly detection, and 2,000+ pre-built charts, all without writing a single config file.

Budget Homelab ·
dockermonitoringnetdatabeginner

This post contains affiliate links. If you buy through them, I earn a small commission at no extra cost to you.

Prometheus and Grafana are excellent for long-term metrics and custom dashboards. But the setup takes time, and sometimes you just want to know right now what’s happening on your server. Netdata answers that question in about 5 minutes.

It installs as a single agent, auto-detects virtually everything running on your system, and starts displaying per-second metrics immediately — no configuration required for the basics.

What Makes Netdata Different

Most monitoring tools operate at 15-60 second intervals. Netdata collects data every second. That’s the difference between seeing a CPU spike as a blip on a graph and seeing exactly what caused it, which container triggered it, and when it resolved.

Auto-detection means Netdata automatically finds and monitors:

For a homelab, this usually means you get full coverage of your stack without touching a config file.

Install with Docker Compose

version: "3.8"

services:
  netdata:
    image: netdata/netdata:latest
    container_name: netdata
    pid: host
    network_mode: host
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /etc/localtime:/etc/localtime:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/log:/host/var/log:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - NETDATA_CLAIM_TOKEN=
      - NETDATA_CLAIM_URL=https://app.netdata.cloud
      - NETDATA_CLAIM_ROOMS=

volumes:
  netdataconfig:
  netdatalib:
  netdatacache:

Note the network_mode: host — Netdata needs host networking to monitor all network interfaces accurately. This also means it doesn’t need a separate port mapping; it runs on port 19999 on the host.

Leave NETDATA_CLAIM_TOKEN empty to run fully local. You can optionally claim your node to Netdata Cloud (free account) for remote access and multi-node views.

Start it:

docker compose up -d

Access at http://your-server-ip:19999. The dashboard loads immediately with live data.

Alternative: Direct Installation

If you prefer installing directly on the host (without Docker):

wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --dont-wait

This installs Netdata as a systemd service. Some people prefer this for lower overhead, since Dockerized Netdata has additional container layers.

The left sidebar organizes metrics by category:

Each chart is interactive — hover to see exact values, drag to zoom, click to pin a time range.

Setting Up Alerts

Netdata ships with hundreds of pre-configured alerts. They’re off by default for notifications — configure where alerts go in netdata.conf.

Access the config:

docker exec -it netdata netdata.conf -c > /etc/netdata/netdata.conf

Or edit via Docker exec:

docker exec -it netdata /bin/bash
cd /etc/netdata

Configure email alerts by editing /etc/netdata/health_alarm_notify.conf:

SEND_EMAIL="YES"
SEND_SLACK="YES"

DEFAULT_RECIPIENT_EMAIL="[email protected]"
SEND_EMAIL="YES"
EMAIL_SENDER="[email protected]"

# SMTP settings
SMTP_SERVER="smtp.gmail.com"
SMTP_PORT="587"
SMTP_TLS="YES"
SMTP_USER="[email protected]"
SMTP_PASS="your-app-password"

Configure Slack or Discord in the same file:

SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
DEFAULT_RECIPIENT_SLACK="#homelab-alerts"

For Discord, Netdata can send to a Discord webhook URL via the Slack integration (Discord supports Slack-compatible webhooks).

Custom Alert Rules

Netdata’s default alerts are sensible but you may want to adjust thresholds. Alert rules live in /etc/netdata/health.d/.

To add a custom alert — for example, warning when a specific container uses too much CPU:

Create /etc/netdata/health.d/custom.conf:

alarm: my_container_cpu
on: cgroup_my_container.cpu_limit
lookup: average -1m unaligned
units: %
every: 10s
warn: $this > 80
crit: $this > 95
info: CPU usage for my_container is high

Restart Netdata to apply: docker restart netdata.

Multi-Node Monitoring with Netdata Cloud

Netdata Cloud’s free tier lets you add multiple nodes and view them from a single dashboard. Create an account at netdata.cloud, create a Space, then claim your node:

Get your claim token from the Cloud UI, then:

docker exec -it netdata netdata-claim.sh \
  -token=YOUR_TOKEN \
  -rooms=YOUR_ROOM_ID \
  -url=https://app.netdata.cloud

All your nodes show up in a unified view with cross-node comparisons.

Retention and Storage

By default, Netdata stores per-second data for the last hour, per-minute data for the last day, and hourly data for longer. This is stored in the netdatalib volume.

For a typical homelab, this uses 200-500MB of disk. You can adjust retention in netdata.conf under [db].

Netdata vs. Prometheus + Grafana

These tools solve overlapping but different problems:

NetdataPrometheus + Grafana
Setup time5 minutes30-60 minutes
ResolutionPer second15-60 seconds
Auto-detectionYesRequires exporters
Long-term storageLimitedConfigurable
Custom dashboardsLimitedExtensive
Alert flexibilityGoodExcellent

Many homelab users run both: Netdata for real-time troubleshooting and immediate visibility, Prometheus + Grafana for trend analysis and custom dashboards. The memory footprint for Netdata is around 100-200MB — reasonable to run alongside a full monitoring stack.

A 16GB RAM mini PC handles both Netdata and Prometheus + Grafana alongside a full Docker stack without resource pressure.