← 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. You’ll need Docker on the host first, which Docker Compose basics covers.

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.

If you haven’t set up a mail path from your homelab yet, homelab email notifications walks through an SMTP relay that every service on the box can share, which saves repeating the credentials below in each tool.

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="your@email.com"
SEND_EMAIL="YES"
EMAIL_SENDER="netdata@yourdomain.com"

# SMTP settings
SMTP_SERVER="smtp.gmail.com"
SMTP_PORT="587"
SMTP_TLS="YES"
SMTP_USER="your@gmail.com"
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.

Neither one replaces uptime checking. Netdata tells you a service is struggling; it doesn’t tell you a service is down and page you about it. Uptime Kuma fills that gap, and advanced alerting covers routing those notifications somewhere you’ll actually see them.

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