Netdata is a lightweight, real-time performance monitoring agent that provides per-second metrics with zero configuration for hundreds of applications and services out of the box. Unlike traditional monitoring solutions that poll at 15- or 60-second intervals, Netdata collects data every second and renders interactive charts in its built-in web dashboard instantly. It is designed to run on any Linux server with minimal resource overhead, making it ideal for quickly understanding what a system is doing right now. This tutorial installs Netdata on RHEL 9, configures its listening address, sets up health alerts, and connects the agent to Netdata Cloud for centralized multi-server monitoring.
Prerequisites
- RHEL 9 server with root or sudo access
- Firewalld running
- curl installed (
dnf install -y curl) - A free Netdata Cloud account (optional, for multi-server dashboards)
Step 1 — Install Netdata
The simplest installation method is the official kickstart script, which detects your distribution, installs dependencies, and sets up the systemd service automatically. Alternatively, use the Netdata RPM repository.
# Option A: Official kickstart script (recommended)
bash /dev/null <<'EOF'
[netdata]
name=Netdata Stable
baseurl=https://packagecloud.io/netdata/netdata/el/9/$basearch
repo_gpgcheck=1
gpgkey=https://packagecloud.io/netdata/netdata/gpgkey
https://packages.netdata.cloud/netdata-repoconfig.gpg
enabled=1
gpgcheck=0
EOF
sudo dnf install -y netdata
sudo systemctl enable --now netdata
Step 2 — Configure the Listening Address and Port
By default Netdata listens on 127.0.0.1:19999. Edit /etc/netdata/netdata.conf to bind to all interfaces so you can reach the dashboard remotely, then open the firewall port.
sudo tee /etc/netdata/netdata.conf > /dev/null <<'EOF'
[global]
run as user = netdata
web files owner = root
web files group = root
# Uncomment and adjust to restrict access by IP in production
# allow connections from = localhost 192.168.1.*
[web]
bind to = 0.0.0.0
default port = 19999
mode = static-threaded
[db]
# How many seconds of metrics to keep in RAM
storage tiers = 3
EOF
sudo systemctl restart netdata
# Open port 19999
sudo firewall-cmd --permanent --add-port=19999/tcp
sudo firewall-cmd --reload
Navigate to http://<your-server-ip>:19999 to see the live dashboard.
Step 3 — Configure Health Alerts
Netdata ships with hundreds of pre-built alert definitions in /etc/netdata/health.d/. You can customize thresholds or add your own. The following example creates a custom alert that triggers when disk usage on the root partition exceeds 85%.
sudo tee /etc/netdata/health.d/custom_disk.conf > /dev/null < 85
crit: $this > 95
info: Root filesystem disk usage warning
to: sysadmin
EOF
# Reload health configuration without restarting
sudo kill -USR2 $(pidof netdata)
# Verify the alarm is loaded
sudo netdatacli reload-health
Step 4 — Set Up Email Notifications
Configure Netdata to send health alert emails by editing the notification configuration file. Netdata uses Sendmail/Postfix for delivery.
# Edit the alarm notification config
sudo /etc/netdata/edit-config health_alarm_notify.conf
# Key settings to set in health_alarm_notify.conf:
# SEND_EMAIL="YES"
# EMAIL_SENDER="[email protected]"
# DEFAULT_RECIPIENT_EMAIL="[email protected]"
# SYSADMIN_EMAIL="[email protected]"
# Test email notification
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test
Ensure Postfix or another MTA is installed and configured on the server (dnf install -y postfix && systemctl enable --now postfix) before testing email delivery.
Step 5 — Connect to Netdata Cloud
Netdata Cloud provides a centralized dashboard where you can view all your Netdata agents in one place without exposing port 19999 publicly. Connectivity uses an encrypted outbound connection from the agent to the Netdata Cloud backend.
# Log in at https://app.netdata.cloud and create a Space
# Then copy the claim token from the UI and run:
sudo netdata-claim.sh
-token=YOUR_CLAIM_TOKEN
-rooms=YOUR_ROOM_ID
-url=https://app.netdata.cloud
# Verify the agent is claimed
sudo systemctl status netdata
grep "CLAIMED" /var/lib/netdata/cloud.d/claimed_id 2>/dev/null ||
echo "Check /var/log/netdata/error.log for claim status"
Step 6 — Enable Auto-Detection of Services
Netdata automatically detects and monitors many services (Nginx, Apache, MySQL, Redis, etc.) if they are running. Verify which plugins are active and review their configuration files.
# List enabled collector plugins
sudo ls /etc/netdata/go.d/
# Example: enable Nginx monitoring (requires stub_status)
sudo tee /etc/netdata/go.d/nginx.conf > /dev/null <<'EOF'
jobs:
- name: local
url: http://127.0.0.1/stub_status
EOF
# Restart to apply
sudo systemctl restart netdata
# Check plugin logs for auto-detected services
sudo journalctl -u netdata --since "5 minutes ago" | grep "registered"
Conclusion
Netdata is now installed on RHEL 9, streaming per-second metrics to its built-in dashboard, sending health alerts by email, and optionally aggregated in Netdata Cloud alongside your other servers. Its zero-configuration auto-detection means that as you install additional services — databases, web servers, message queues — Netdata will begin graphing them automatically. For long-term metric retention beyond the in-memory window, consider configuring Netdata’s multi-tier storage or exporting metrics to Prometheus for permanent storage and cross-server Grafana dashboards.
Next steps: How to Install Prometheus and Grafana on RHEL 9, How to Install Zabbix on RHEL 9, and How to Configure Logrotate for Application Logs on RHEL 9.