Netdata is a lightweight, real-time performance monitoring agent that collects thousands of system and application metrics with per-second granularity and displays them through a built-in, zero-configuration web dashboard. Unlike heavier stacks, Netdata starts delivering useful insights within minutes of installation and requires virtually no ongoing maintenance. It can also stream metrics to a central parent node, making it suitable for multi-host environments. This tutorial covers installing Netdata on RHEL 8, tuning the core configuration, opening the firewall, exploring the dashboard, and setting up streaming to a parent node.
Prerequisites
- A RHEL 8 server with a non-root sudo user
- EPEL repository enabled (
dnf install -y epel-release) if using the DNF method - Port 19999 accessible through the firewall for dashboard access
- At least 256 MB of free RAM (Netdata’s default memory footprint is under 100 MB)
- Optional: a second RHEL 8 host to act as the parent streaming node
Step 1 — Install Netdata
The official kickstart script is the fastest installation path and automatically detects RHEL 8, installs all dependencies, and registers a systemd service. Alternatively, install from EPEL using dnf if you prefer fully managed packages.
# Method A — official kickstart script (recommended, installs latest stable)
curl -Ss https://my-netdata.io/kickstart.sh | sudo bash
# Method B — EPEL package (older but fully managed by DNF)
sudo dnf install -y epel-release
sudo dnf install -y netdata
# After either method, enable and start the service
sudo systemctl enable --now netdata
sudo systemctl status netdata
Step 2 — Open the Firewall and Access the Dashboard
Netdata listens on port 19999 by default. Add a permanent firewall rule, reload the ruleset, then open the dashboard in your browser to confirm the agent is collecting data.
sudo firewall-cmd --permanent --add-port=19999/tcp
sudo firewall-cmd --reload
# Verify the port is open
sudo firewall-cmd --list-ports
# Test locally
curl -s http://localhost:19999/api/v1/info | python3 -m json.tool | head -20
Open http://<server-ip>:19999 in your browser. The dashboard auto-populates with hundreds of charts covering CPU, memory, disk I/O, network interfaces, system interrupts, IPv4/IPv6 traffic, and any detected applications (MySQL, NGINX, Redis, etc.).
Step 3 — Tune netdata.conf
The main configuration file at /etc/netdata/netdata.conf controls the web listener address, memory mode, history retention, and update frequency. The defaults are safe, but these two adjustments are commonly made on server installations: binding the web server to a specific interface and switching to dbengine for longer on-disk history.
sudo tee -a /etc/netdata/netdata.conf > /dev/null <<'EOF'
[web]
# Bind to all interfaces; change to a specific IP to restrict access
bind to = 0.0.0.0:19999
[global]
# dbengine stores compressed metrics on disk for longer retention
memory mode = dbengine
# Disk space per tier in MiB
dbengine multihost disk space MB = 512
# Update interval in seconds (1 = per-second granularity)
update every = 1
EOF
sudo systemctl restart netdata
Step 4 — Configure Streaming to a Parent Node
Netdata’s streaming feature lets child agents forward all their metrics to a central parent node in real time. On the parent node, enable the stream receiver by editing stream.conf and generating an API key. On each child node, configure it to push to the parent’s address.
# --- On the PARENT node ---
# Generate a random API key
API_KEY=$(cat /proc/sys/kernel/random/uuid)
echo "Parent API key: $API_KEY"
sudo tee -a /etc/netdata/stream.conf > /dev/null < /dev/null <<'EOF'
[stream]
enabled = yes
destination = PARENT_IP:19999
api key = API_KEY
EOF
sudo systemctl restart netdata
Step 5 — Configure Alert Notifications
Netdata ships with hundreds of pre-configured health alerts. The notification system is configured in /etc/netdata/health_alarm_notify.conf. The example below enables email alerts via the local sendmail binary; Netdata also supports Slack, PagerDuty, Telegram, and many other integrations.
# Copy the stock config to make it editable
sudo cp /usr/lib/netdata/conf.d/health_alarm_notify.conf
/etc/netdata/health_alarm_notify.conf
# Enable email alerts
sudo sed -i
-e 's/^#SEND_EMAIL=.*/SEND_EMAIL="YES"/'
-e 's/^#DEFAULT_RECIPIENT_EMAIL=.*/DEFAULT_RECIPIENT_EMAIL="[email protected]"/'
/etc/netdata/health_alarm_notify.conf
sudo systemctl restart netdata
# Test the notification subsystem
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test
Step 6 — Explore Key Built-In Dashboards
The Netdata dashboard is organized into sections that auto-appear when relevant data is detected. Key sections to review on a RHEL 8 server include System Overview (CPU steal time, load, interrupts), Disk (I/O latency, utilization per device), Network Interfaces (bandwidth, packet drops, errors), Applications (per-process CPU and memory via apps.plugin), and systemd Services (per-unit CPU and memory accounting). Use the timeframe selector at the top of the dashboard to pan back through stored history and correlate spikes with deployment events or cron jobs.
# List all available chart IDs via the API
curl -s http://localhost:19999/api/v1/charts
| python3 -c "import sys,json; [print(k) for k in json.load(sys.stdin)['charts']]"
| head -40
# Check current alarms
curl -s http://localhost:19999/api/v1/alarms | python3 -m json.tool | grep '"status"'
Conclusion
Netdata is now running on your RHEL 8 server, delivering real-time per-second metrics through its built-in dashboard with no external database or visualization layer required. The dbengine memory mode keeps weeks of compressed metric history on disk, the streaming configuration allows all child node data to converge on a single parent dashboard, and the notification framework ensures critical alerts reach you promptly. Netdata’s low resource footprint and zero-dependency design make it an excellent first monitoring layer even when heavier tools like Prometheus or Zabbix are also in use for longer-term storage and alerting workflows.
Next steps: Integrating Netdata Alerts with Slack and PagerDuty on RHEL 8, Using Netdata Cloud for Multi-Node Visibility, and Creating Custom Netdata Collectors for Application Metrics.