Netdata collects thousands of metrics every second with almost no setup and shows them in a live web dashboard. It auto-detects Nginx, MySQL, Redis, Docker and more, which makes it a fast way to add server monitoring to a VPS and see exactly when and why load spikes.
Before you start
- Root or sudo access to a Linux VPS (Ubuntu, Debian, AlmaLinux, Rocky).
- Around 100–200 MB of free RAM for the agent.
- A plan to keep the dashboard private: it shows details about your server.
Install Netdata
The official kickstart script detects your distro and installs native packages where available. Read it first if you like, then run:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.shsh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetryNetdata starts automatically and listens on port 19999. Check it with systemctl status netdata.
Keep the dashboard private
The safest option is to bind Netdata to localhost and reach it through an SSH tunnel. Edit /etc/netdata/netdata.conf (run /etc/netdata/edit-config netdata.conf if it does not exist):
[web]
bind to = 127.0.0.1Restart with systemctl restart netdata, then from your computer open a tunnel:
ssh -L 19999:127.0.0.1:19999 root@203.0.113.10Browse to http://localhost:19999. Alternatives: put Netdata behind Nginx with basic auth and HTTPS, or allow port 19999 only from your IP in the firewall.
Warning: do not leave port 19999 open to the whole internet. The dashboard reveals running services, users and traffic patterns.
Read the key charts
| Section | What to look for |
|---|---|
| System Overview → CPU | iowait high = disk bottleneck; steal high = busy host node |
| Memory → RAM / Swap | Little available RAM and rising swap = memory pressure |
| Disks | Utilisation near 100% and long backlog = I/O saturation |
| Networking | Bandwidth spikes, dropped packets, TCP resets |
| Applications | Which process group (php-fpm, mysqld) uses the resources |
Drag across a chart to zoom in on a spike; all charts follow the same time window, so you can correlate a CPU peak with a traffic burst.
Monitor services
Netdata's collectors pick up most services automatically. Some need access: for MySQL/MariaDB create a read-only user:
CREATE USER 'netdata'@'localhost';
GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';For Nginx, enable stub_status on 127.0.0.1. Collector configs live in /etc/netdata/go.d/; edit them with /etc/netdata/edit-config go.d/mysql.conf.
Set up alerts
Netdata ships with sensible health alerts (disk almost full, RAM low, high load). To get them by email, edit health_alarm_notify.conf:
/etc/netdata/edit-config health_alarm_notify.confSet DEFAULT_RECIPIENT_EMAIL="you@example.com" (the server needs working outbound mail), or configure Slack, Discord or Telegram in the same file. Test with:
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh testThe path may be /usr/lib/netdata/plugins.d/ on some distros.
Troubleshooting
- Dashboard does not load: check
ss -ltnp | grep 19999, the bind address and your firewall or tunnel. - A service has no charts: the collector cannot access it. Look at
journalctl -u netdata | grep -i mysql(or the service name). - Netdata uses too much RAM or disk: lower retention under
[db]innetdata.conf, or raiseupdate everyto 2–5 seconds.
Netdata FAQ
Is Netdata free?
The agent is open source and free. Netdata Cloud, an optional hosted dashboard for many servers, has free and paid tiers.
Netdata vs htop?
htop shows the current moment in a terminal. Netdata keeps history, covers services and sends alerts.
Does Netdata replace uptime monitoring?
No. If the server goes down, so does Netdata. Use an external uptime check alongside it.
