Monitoring beginner ⏱ 20 minutes

Netdata: Real-Time System Monitoring with AI Insights

Per-second metrics with zero configuration. AI-powered anomaly detection and troubleshooting.

By homelabbing.io • 2025-12-16
#netdata#monitoring#real-time#ai#anomaly-detection

Introduction

Most monitoring tools show you what happened 15-60 seconds ago. Netdata shows you what’s happening right now, with 1-second granularity, in stunningly beautiful dashboards that make infrastructure comprehensible at a glance.

With 69,000+ GitHub stars and millions of deployments worldwide, Netdata has become the de facto standard for real-time system monitoring. It’s especially beloved in homelabs for its zero-configuration setup—literally install with one command and get instant insights into thousands of metrics.

What you’ll learn:

  • Why Netdata’s real-time approach changes how you monitor
  • One-line installation and zero-config setup
  • Understanding Netdata’s AI-powered anomaly detection
  • Parent-child architecture for centralized multi-host monitoring
  • Netdata Cloud for remote access and team collaboration
  • Advanced features: custom dashboards, alarms, and exporting

Prerequisites:

  • Linux system (Ubuntu, Debian, CentOS, Arch, etc.)
  • Docker for containerized deployment (optional)
  • 512MB+ RAM available
  • Basic command-line knowledge

Why Netdata is Different

The Real-Time Revolution

Traditional monitoring tools collect metrics every 15-60 seconds. This creates several problems:

Problem 1: Spike Blindness

  • CPU spike lasts 5 seconds
  • Prometheus scrapes every 15 seconds
  • Spike happens between scrapes
  • You never see it

Problem 2: Troubleshooting Lag

  • Service starts degrading
  • Metrics update after 30-60 seconds
  • You’re reacting to old information
  • Problem escalates while you investigate

Netdata’s solution: 1-second granularity

  • See spikes the moment they occur
  • Real-time troubleshooting
  • Correlate events accurately
  • Catch transient issues

Feature Highlights

FeatureCapabilityImpact
1-Second MetricsPer-second granularityCatch transient spikes
Auto-Discovery2,000+ integrationsZero configuration
ML Anomaly DetectionAI-trained on YOUR dataPersonalized baselines
Beautiful DashboardsInteractive, responsiveUnderstand at a glance
Parent-Child StreamingCentralize metricsMulti-host monitoring
Netdata CloudRemote access, freeMonitor from anywhere
Low Resource Usage1-5% CPU, 100-200MB RAMLightweight

Resource Comparison

SolutionCPU UsageMemoryDisk/DayRetentionGranularity
Netdata1-3%150MB100-500MBConfigurable1 second
Prometheus + Node Exporter2-5%500MB+50MB15 days15 seconds
Telegraf + InfluxDB3-7%800MB+100MB7 days10 seconds
Zabbix5-10%1GB+200MB30 days60 seconds

Part 1: Installation Methods

The fastest way to get started:

# Automatic installation
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

This script:

  • Detects your OS and installs dependencies
  • Builds and installs Netdata from source
  • Configures automatic updates
  • Starts Netdata service
  • Enables auto-discovery for 2,000+ services

Verify installation:

# Check service status
systemctl status netdata

# Access dashboard
open http://localhost:19999

Unattended installation:

# Skip interactive prompts
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait --dont-start-it

# Start manually
systemctl start netdata

Method 2: Docker Deployment

Single container:

docker run -d --name=netdata   --pid=host   --network=host   -v netdataconfig:/etc/netdata   -v netdatalib:/var/lib/netdata   -v netdatacache:/var/cache/netdata   -v /etc/passwd:/host/etc/passwd:ro   -v /etc/group:/host/etc/group:ro   -v /proc:/host/proc:ro   -v /sys:/host/sys:ro   -v /etc/os-release:/host/etc/os-release:ro   -v /var/run/docker.sock:/var/run/docker.sock:ro   --restart unless-stopped   --cap-add SYS_PTRACE   --cap-add SYS_ADMIN   --security-opt apparmor=unconfined   netdata/netdata

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:
      # Netdata configuration and data
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata

      # Host system access
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro

      # Custom config (optional)
      # - ./netdata.conf:/etc/netdata/netdata.conf

    environment:
      - NETDATA_CLAIM_TOKEN=YOUR_CLAIM_TOKEN  # For Netdata Cloud
      - NETDATA_CLAIM_URL=https://app.netdata.cloud
      - NETDATA_CLAIM_ROOMS=YOUR_ROOM_ID

volumes:
  netdataconfig:
  netdatalib:
  netdatacache:

Start with Docker Compose:

docker compose up -d
docker logs -f netdata

Method 3: Package Manager

Debian/Ubuntu:

# Add repository
curl -Ss https://repo.netdata.cloud/repos/stable/debian/bookworm/netdata.gpg.key | sudo apt-key add -
echo "deb https://repo.netdata.cloud/repos/stable/debian/bookworm/ /" | sudo tee /etc/apt/sources.list.d/netdata.list

# Install
sudo apt update
sudo apt install netdata

RHEL/CentOS:

sudo dnf install netdata
sudo systemctl enable --now netdata

Arch Linux:

sudo pacman -S netdata
sudo systemctl enable --now netdata

Part 2: Understanding the Dashboard

First Login

Navigate to http://YOUR_SERVER_IP:19999

You’ll immediately see:

Top Navigation:

  • Overview: System-wide summary
  • Nodes: All monitored systems (in parent-child setup)
  • Alarms: Active alerts
  • Functions: Administrative tools

Main Dashboard Sections:

  1. System Overview

    • CPU usage (overall + per-core)
    • Memory utilization (RAM, swap, caches)
    • Disk I/O (read/write operations, bandwidth)
    • Network traffic (inbound/outbound)
  2. Applications

    • Auto-discovered services (Docker, Nginx, MySQL, etc.)
    • Per-process metrics
    • Container resource usage
  3. Hardware Sensors

    • CPU temperature
    • Fan speeds
    • Voltage sensors

Dashboard Features

1. Time Travel

  • Click and drag on any chart to zoom
  • Use timeline at bottom to navigate history
  • Jump to specific timestamp

2. Chart Synchronization

  • Hover over one chart, all charts highlight same timestamp
  • Correlate metrics across different sources
  • Identify cascading failures

3. Multi-Dimension Charts

  • Toggle individual metrics on/off
  • Compare CPU cores, disk partitions, network interfaces
  • Isolate specific containers or processes

4. Chart Export

  • Right-click any chart
  • Export as PNG, CSV, or JSON
  • Embed in external dashboards

Key Metrics Explained

CPU Utilization:

  • user: Application code
  • system: Kernel operations
  • iowait: Waiting for disk I/O (high = disk bottleneck)
  • steal: Time stolen by hypervisor (VM performance)

Memory:

  • used: Actively used by processes
  • buffers/cache: Disk cache (reclaimable)
  • available: Actually free for new processes
  • swap: Memory paged to disk (high = RAM pressure)

Disk:

  • util: Percentage of time disk is busy
  • backlog: Queued I/O operations
  • avgsz: Average operation size
  • await: Average wait time

Network:

  • received/sent: Bandwidth usage
  • packets: Packet rate
  • errors/drops: Network issues

Part 3: AI-Powered Anomaly Detection

How ML Works in Netdata

Netdata trains machine learning models on your data:

  1. Training Period: 4 hours minimum, 24 hours ideal
  2. Models: Built per metric based on normal behavior
  3. Scoring: Real-time anomaly scores (0-100%)
  4. Alerting: Trigger alarms when anomaly threshold exceeded

Enable ML (enabled by default):

# Edit netdata.conf
sudo nano /etc/netdata/netdata.conf
[ml]
    enabled = yes
    maximum num samples to train = 21600  # 6 hours at 1-second resolution
    minimum num samples to train = 3600   # 1 hour minimum
    train every = 3600                    # Retrain hourly
    number of models per dimension = 1
    dbengine anomaly rate every = 30      # Calculate rate every 30s

Restart to apply:

sudo systemctl restart netdata

Viewing Anomaly Scores

Dashboard access:

  1. Navigate to Anomaly Advisor in top menu
  2. View system-wide anomaly rate chart
  3. Click on time period with high anomalies
  4. See which metrics are anomalous

Example anomaly detection scenarios:

  • CPU spike due to runaway process
  • Memory leak in application
  • Disk I/O surge from backup job
  • Network traffic DDoS attempt
  • Temperature spike from fan failure

Custom Anomaly Alarms

Create alarm based on anomaly rate:

# Edit health.d/ml.conf
sudo nano /etc/netdata/health.d/ml.conf
# Alert when system-wide anomaly rate exceeds 50%
alarm: ml_anomaly_rate_high
   on: anomaly_detection.anomaly_rate
 lookup: average -1m unaligned of anomaly_rate
  every: 30s
   warn: $this > 50
   crit: $this > 75
   info: High anomaly rate detected across system metrics

Part 4: Parent-Child Architecture

Centralized Multi-Host Monitoring

Instead of accessing each server’s dashboard individually, stream all metrics to a central parent node.

Architecture:

Child Node 1 (Raspberry Pi)  ─┐
Child Node 2 (NAS)           ─┼─→ Parent Node (Central Dashboard)
Child Node 3 (Docker Host)   ─┘       ↓
                                  Netdata Cloud

Configure Parent Node

On central server:

# Edit stream.conf
sudo nano /etc/netdata/stream.conf
[11111111-2222-3333-4444-555555555555]
    # Accept streaming from child nodes
    enabled = yes
    default history = 3600
    default memory mode = dbengine
    health enabled by default = auto
    allow from = *

Generate API key:

# Use any UUID (generate with uuidgen)
uuidgen

Restart parent:

sudo systemctl restart netdata

Configure Child Nodes

On each child node:

# Edit stream.conf
sudo nano /etc/netdata/stream.conf
[stream]
    enabled = yes
    destination = PARENT_IP:19999
    api key = 11111111-2222-3333-4444-555555555555
    timeout seconds = 60
    buffer size bytes = 1048576
    reconnect delay seconds = 5
    initial clock resync iterations = 60

Restart child:

sudo systemctl restart netdata

Verify streaming:

  1. Open parent dashboard: http://PARENT_IP:19999
  2. Click Nodes in top menu
  3. See all child nodes listed
  4. Click any node to view its metrics

Multi-Tier Streaming

Scenario: Edge devices → Regional aggregators → Central dashboard

Edge (RPi) → Regional Parent → Central Parent

Regional parent acts as both child and parent:

# stream.conf on regional parent
[stream]
    # Stream to central parent
    enabled = yes
    destination = CENTRAL_PARENT_IP:19999
    api key = CENTRAL_API_KEY

[REGIONAL_API_KEY]
    # Accept from edge devices
    enabled = yes
    allow from = 192.168.1.0/24

Part 5: Netdata Cloud

Why Use Netdata Cloud

Problems it solves:

  • Accessing homelab dashboards remotely (without exposing ports)
  • Monitoring multiple locations (home, office, cloud VPS)
  • Team collaboration (share access with family/friends)
  • Mobile monitoring (responsive web interface)

It’s free:

  • Unlimited nodes
  • Unlimited users
  • No credit card required
  • Data stays on your infrastructure (Cloud only brokers connections)

Claiming Nodes to Netdata Cloud

1. Create account:

2. Create Space and Room:

  • Space: Top-level organization (e.g., “Homelab”)
  • Room: Logical grouping (e.g., “Production”, “Development”)

3. Get claim token:

  • Navigate to Space Settings → Nodes
  • Click Add Nodes
  • Copy claim token

4. Claim your node:

# Using claim script
sudo netdata-claim.sh -token=YOUR_CLAIM_TOKEN   -rooms=YOUR_ROOM_ID   -url=https://app.netdata.cloud

Or claim during Docker Compose deployment (see earlier docker-compose.yml).

5. Verify:

  • Go to https://app.netdata.cloud
  • Select your Space → Room
  • See your node appear in the list
  • Click node to view live dashboard

Cloud Features

1. Unified Dashboard

  • View all nodes in one interface
  • Switch between nodes seamlessly
  • Create custom composite dashboards

2. Anomaly Advisor

  • Cross-node anomaly detection
  • Identify infrastructure-wide issues
  • Drill down to specific node/metric

3. Alert Notifications

  • Centralized alert management
  • Email, Slack, Discord, PagerDuty integration
  • Custom notification rules

4. Team Collaboration

  • Invite team members
  • Role-based access control
  • Shared dashboards and annotations

5. Mobile Access

  • Responsive web interface
  • Monitor from phone/tablet
  • Receive push notifications (via integrations)

Part 6: Custom Dashboards and Configuration

Custom Dashboard Creation

Create custom dashboard:

# Create custom dashboard file
sudo nano /etc/netdata/custom-dashboard.html
<!DOCTYPE html>
<html>
<head>
    <title>Homelab Monitoring</title>
    <script src="http://localhost:19999/dashboard.js"></script>
</head>
<body>
    <h1>Critical Services Dashboard</h1>

    <!-- CPU Chart -->
    <div data-netdata="system.cpu"
         data-chart-library="dygraph"
         data-title="CPU Usage"
         data-width="600"
         data-height="200"></div>

    <!-- Memory Chart -->
    <div data-netdata="system.ram"
         data-chart-library="dygraph"
         data-title="Memory Usage"
         data-width="600"
         data-height="200"></div>

    <!-- Docker Containers -->
    <div data-netdata="cgroup_docker.cpu"
         data-chart-library="dygraph"
         data-title="Docker CPU Usage"
         data-width="600"
         data-height="200"></div>
</body>
</html>

Access custom dashboard:

http://localhost:19999/custom-dashboard.html

Configuration Tuning

Main configuration:

sudo nano /etc/netdata/netdata.conf

Key settings:

[global]
    # Change default port
    default port = 19999

    # Bind to specific IP (0.0.0.0 = all interfaces)
    bind to = 0.0.0.0

    # History retention
    history = 3600  # 1 hour in RAM
    update every = 1  # 1-second granularity

    # Memory management
    memory mode = dbengine
    page cache size = 32  # MB

[db]
    # Disk-based storage
    mode = dbengine
    storage tiers = 3
    dbengine multihost disk space = 1024  # MB per node

[web]
    # Enable gzip compression
    enable gzip compression = yes

    # Allow connections from
    allow connections from = localhost 192.168.1.0/24

Restart after changes:

sudo systemctl restart netdata

Performance Tuning

Reduce resource usage:

[global]
    # Lower granularity to 2 seconds
    update every = 2

    # Shorter retention
    history = 1800  # 30 minutes

[plugins]
    # Disable unused plugins
    apps = no
    cgroups = yes
    diskspace = yes
    python.d = no
    node.d = no

Increase retention:

[db]
    mode = dbengine
    dbengine multihost disk space = 4096  # 4GB
    dbengine page cache size = 128  # MB

Storage tiering example:

  • Tier 0: 1-second granularity, last hour
  • Tier 1: 1-minute average, last week
  • Tier 2: 1-hour average, last year

Part 7: Alerting and Notifications

Built-in Health Checks

Netdata includes 100+ pre-configured alerts:

View active alarms:

# Command-line
curl http://localhost:19999/api/v1/alarms

# Dashboard
http://localhost:19999 → Click "Alarms" icon

Common default alarms:

  • High CPU usage (> 90% for 10 minutes)
  • Low available memory (under 10% free)
  • Disk space critical (under 5% free)
  • High disk I/O wait
  • Network packet drops

Custom Alarms

Create custom alarm:

sudo nano /etc/netdata/health.d/custom.conf

Example: CPU temperature warning:

alarm: cpu_temperature_high
   on: sensors.temp_thermal_zone0_thermal_thermal_zone0
 lookup: average -1m unaligned of temperature
  every: 10s
   warn: $this > 70
   crit: $this > 85
  units: °C
   info: CPU temperature is too high
   to: sysadmin

Example: Docker container down:

alarm: docker_container_down
   on: cgroup_docker.cpu
 lookup: sum -1m unaligned of user
  every: 10s
   crit: $this == 0
   info: Docker container has stopped
   to: sysadmin

Example: API endpoint down:

alarm: api_down
   on: httpcheck.api_health.status
 lookup: max -1m unaligned of success
  every: 30s
   crit: $this == 0
   info: API health check failing
   to: sysadmin

Notification Channels

Configure Discord notifications:

sudo nano /etc/netdata/health_alarm_notify.conf
# Discord webhook
SEND_DISCORD="YES"
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK"
DEFAULT_RECIPIENT_DISCORD="alerts"

Slack notifications:

SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
DEFAULT_RECIPIENT_SLACK="homelab-alerts"

Email notifications:

SEND_EMAIL="YES"
EMAIL_SENDER="[email protected]"
DEFAULT_RECIPIENT_EMAIL="[email protected]"

Test notifications:

# Test alarm
sudo /usr/libexec/netdata/plugins.d/alarm-notify.sh test

Part 8: Advanced Features

Exporting Metrics

Export to Prometheus:

sudo nano /etc/netdata/exporting.conf
[prometheus:my_prometheus]
    enabled = yes
    destination = prometheus:9090
    data source = average
    update every = 10

Restart:

sudo systemctl restart netdata

Scrape from Prometheus:

# prometheus.yml
scrape_configs:
  - job_name: 'netdata'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: [prometheus]
    static_configs:
      - targets: ['netdata:19999']

Custom Plugins

Python plugin example (monitor custom metric):

sudo nano /usr/libexec/netdata/python.d/custom_metric.chart.py
from bases.FrameworkServices.SimpleService import SimpleService

class Service(SimpleService):
    def __init__(self, configuration=None, name=None):
        SimpleService.__init__(self, configuration=configuration, name=name)
        self.order = ['custom']
        self.definitions = {
            'custom': {
                'options': [None, 'Custom Metric', 'value', 'custom', 'custom.metric', 'line'],
                'lines': [
                    ['my_metric', 'My Metric', 'absolute']
                ]
            }
        }

    def get_data(self):
        # Your custom logic here
        return {
            'my_metric': self.read_custom_value()
        }

    def read_custom_value(self):
        # Read from file, API, etc.
        with open('/tmp/custom_metric.txt', 'r') as f:
            return int(f.read().strip())

Enable plugin:

sudo systemctl restart netdata

Monitoring External Services

HTTP endpoint monitoring:

sudo nano /etc/netdata/go.d/httpcheck.conf
jobs:
  - name: api_health
    url: https://api.example.com/health
    interval: 10
    timeout: 5
    status_accepted:
      - 200
    body_match: '"status":"healthy"'

  - name: website
    url: https://example.com
    interval: 60
    status_accepted:
      - 200

Troubleshooting

Issue 1: Dashboard Not Accessible

Check service:

sudo systemctl status netdata
sudo journalctl -u netdata -n 50

Check port binding:

sudo netstat -tulpn | grep 19999

Allow through firewall:

sudo ufw allow 19999/tcp

Issue 2: High CPU Usage

Reduce update frequency:

[global]
    update every = 2  # Instead of 1

Disable unused plugins:

[plugins]
    python.d = no
    node.d = no

Issue 3: Docker Metrics Not Showing

Ensure Docker socket is mounted:

docker run ... -v /var/run/docker.sock:/var/run/docker.sock:ro ...

Check cgroup plugin:

sudo nano /etc/netdata/netdata.conf
[plugins]
    cgroups = yes

Conclusion

Netdata transforms system monitoring from a delayed, static experience into real-time, AI-enhanced insight. Its one-line installation, zero configuration, and stunning dashboards make professional-grade monitoring accessible to everyone.

Key takeaways:

  • 1-second granularity catches issues traditional tools miss
  • AI anomaly detection learns your infrastructure’s normal behavior
  • Parent-child streaming centralizes multi-host monitoring
  • Netdata Cloud provides secure remote access for free
  • 100+ pre-configured alarms with multi-channel notifications

Your deployment timeline:

Today:

  1. Install Netdata with one command
  2. Explore the dashboard and understand key metrics
  3. Configure Discord/Slack notifications

This week: 4. Claim nodes to Netdata Cloud for remote access 5. Set up parent-child streaming for multi-host monitoring 6. Create custom alarms for critical services

This month: 7. Let ML models train on your data 8. Use Anomaly Advisor to identify unusual patterns 9. Export metrics to Prometheus for long-term retention

Resources:

Real-time monitoring isn’t a luxury—it’s a necessity for understanding and troubleshooting modern infrastructure. Netdata brings enterprise-grade capabilities to homelabs without the enterprise complexity or cost.

Happy monitoring!


Guide Version: 1.0 Last Updated: December 2024 Netdata Version: v1.45+ Difficulty Level: Beginner Estimated Time: 25 minutes