Netdata: Real-Time Server Monitoring Without the Complexity
You want to monitor your server — CPU, RAM, disk, network, Docker containers, temperatures. You look into Grafana + Prometheus + node_exporter and realize you need three separate tools, PromQL queries, and hours of dashboard building before you see a single graph.
Netdata gives you a complete monitoring dashboard with zero configuration. Install it, open the web UI, and you immediately get 2,000+ metrics visualized in real time. No query language, no dashboard setup, no separate database.
What Netdata Does
- 2,000+ metrics out of the box: CPU, memory, disk, network, processes, containers, and more
- Per-second granularity: Real-time charts that update every second
- Zero configuration: Auto-detects services (Nginx, MySQL, Docker, etc.) and starts collecting
- Built-in alerting: Pre-configured alerts for common issues (disk space, RAM, CPU)
- Lightweight: ~1-2% CPU overhead, uses a custom time-series database
- Web dashboard: Beautiful, interactive charts — no Grafana needed
Netdata vs. Grafana + Prometheus
| Feature | Netdata | Grafana + Prometheus |
|---|---|---|
| Setup time | 1 minute | 30+ minutes |
| Configuration needed | None | Extensive |
| Metrics out of the box | 2,000+ | You build it |
| Query language | None needed | PromQL |
| Dashboard building | Pre-built | Manual |
| Per-second metrics | Yes (default) | 15s typical |
| Long-term storage | Days-weeks (local) | Unlimited |
| Multi-server | Netdata Cloud (free) | Prometheus federation |
| Custom dashboards | Limited | Unlimited |
| Resource usage | ~100 MB RAM | ~500 MB+ RAM |
| Best for | Real-time ops | Historical analysis |
The honest answer: They serve different purposes. Netdata excels at real-time operational monitoring — "is my server healthy right now?" Grafana + Prometheus excels at historical analysis — "what happened last week at 3 AM?" Many people run both.
Installation
Option 1: One-line install (recommended)
curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh
sh /tmp/netdata-kickstart.sh --no-updates
This installs Netdata as a system service. It auto-detects your OS and installs via your package manager. The --no-updates flag prevents auto-updates (manage updates yourself).
Option 2: Docker
services:
netdata:
image: netdata/netdata:stable
restart: unless-stopped
hostname: myserver
ports:
- 19999:19999
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdata_config:/etc/netdata
- netdata_lib:/var/lib/netdata
- netdata_cache:/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
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
netdata_config:
netdata_lib:
netdata_cache:
The Docker setup needs host access for full metrics. The capabilities and volume mounts give Netdata read-only access to system information.
Option 3: Package manager
# Debian/Ubuntu
sudo apt install netdata
# Fedora
sudo dnf install netdata
# Arch
sudo pacman -S netdata
After installation, open http://your-server:19999.
What You Get Immediately
With zero configuration, Netdata starts collecting:
System metrics:
- CPU usage (per core, per type: user/system/iowait/steal)
- Memory (used, cached, buffers, swap)
- Disk I/O (reads, writes, latency per disk)
- Network (bandwidth, packets, errors per interface)
- Process counts, context switches, interrupts
- Temperature sensors, fan speeds, voltage
Container metrics (if Docker is running):
- Per-container CPU, memory, network, disk I/O
- Container health status
- Image and runtime information
Auto-detected services:
- Nginx/Apache request rates and response times
- MySQL/PostgreSQL query rates, connections, slow queries
- Redis operations, memory, keyspace
- Docker container statistics
- systemd service states
- And dozens more
The Dashboard
Netdata's web UI is one of the best monitoring interfaces available:
- Responsive charts: Hover over any chart and all other charts sync to the same time
- Zoom and pan: Click and drag to zoom into any time range
- Chart grouping: Metrics are organized into sections (System, CPU, Memory, Disk, etc.)
- Anomaly detection: Highlights metrics that are behaving unusually
The dashboard works well on mobile too — useful for checking server health from your phone.
Alerting
Netdata ships with hundreds of pre-configured alerts:
# Example built-in alerts:
- Disk space < 10% remaining
- RAM usage > 90%
- CPU usage > 85% for 10 minutes
- Disk I/O latency > 100ms
- Network interface errors
- Swap usage > 50%
- Process count anomalies
Notification Channels
Configure in /etc/netdata/health_alarm_notify.conf:
Email:
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"
Slack:
SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxx"
DEFAULT_RECIPIENT_SLACK="#monitoring"
Discord:
SEND_DISCORD="YES"
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/xxx"
DEFAULT_RECIPIENT_DISCORD="#monitoring"
Also supports: PagerDuty, Telegram, ntfy, Gotify, Pushover, and more.
Custom Alerts
Create /etc/netdata/health.d/custom.conf:
alarm: docker_container_down
on: docker.container_state
lookup: average -1m of running
every: 30s
warn: $this < 1
info: Docker container is not running
to: sysadmin
Multi-Server Monitoring
Netdata Cloud (Free Tier)
The easiest way to monitor multiple servers. Each server runs its own Netdata agent, and Netdata Cloud provides a unified dashboard.
- Sign up at app.netdata.cloud
- Create a "Space" for your infrastructure
- Run the claim command on each server
Important: Netdata Cloud doesn't store your metrics — it queries your agents directly. Your data stays on your servers.
Streaming (Self-Hosted)
If you don't want cloud, set up parent-child streaming:
Child (sends metrics) — /etc/netdata/stream.conf:
[stream]
enabled = yes
destination = parent-server:19999
api key = your-uuid-here
Parent (receives metrics) — /etc/netdata/stream.conf:
[your-uuid-here]
enabled = yes
default memory mode = dbengine
The parent server shows metrics from all children in its dashboard.
Data Retention
Netdata uses its own time-series database (dbengine):
# /etc/netdata/netdata.conf
[db]
mode = dbengine
storage tiers = 3
dbengine multihost disk space MB = 1024
dbengine tier 1 multihost disk space MB = 256
dbengine tier 2 multihost disk space MB = 64
The tiered system keeps per-second data for recent metrics and downsamples older data:
- Tier 0: Per-second (days to weeks)
- Tier 1: Per-minute (weeks to months)
- Tier 2: Per-hour (months to year+)
With 1 GB of disk, expect roughly 2-4 weeks of per-second data for 2,000 metrics.
Exporting to Prometheus/Grafana
If you want Grafana dashboards too, Netdata can export to Prometheus:
# /etc/netdata/exporting.conf
[prometheus:remote_write]
enabled = yes
destination = http://prometheus:9090/api/v1/write
remote write URL path = /api/v1/write
Or expose a Prometheus-compatible endpoint at /api/v1/allmetrics?format=prometheus for Prometheus to scrape. Best of both worlds: Netdata for real-time, Grafana for historical.
Common Pitfalls
- Port exposure: Don't expose port 19999 to the internet without authentication. Use a reverse proxy with Authelia/Keycloak, or restrict to your VPN.
- Docker socket access: Mounting the Docker socket gives Netdata broad access. If you're security-conscious, use the socket proxy pattern.
- Disk usage: The dbengine stores a lot of data. Monitor its disk usage and adjust retention if needed.
- Alert fatigue: The default alerts are good but aggressive. Tune thresholds for your environment before adding notification channels.
The Bottom Line
Netdata is the fastest path from "I want monitoring" to "I have monitoring." One command, zero configuration, instant results. The dashboard is genuinely excellent — better than most Grafana dashboards you'd spend hours building.
It doesn't replace Grafana + Prometheus for teams that need custom dashboards, long-term retention, and complex queries. But for most self-hosters monitoring 1-5 servers, Netdata gives you everything you need with a fraction of the setup effort.