Netdata: мониторинг серверов в реальном времени за 5 минут

Что такое Netdata и зачем он нужен

Netdata — это агент мониторинга с открытым исходным кодом, который собирает тысячи метрик с серверов, контейнеров и приложений в реальном времени. В отличие от классических решений вроде Zabbix или Nagios, Netdata не требует длительной настройки — достаточно одной команды для установки, и через минуту вы видите красивый дашборд с сотнями графиков.

Ключевые преимущества Netdata:

  • Гранулярность 1 секунда — метрики собираются посекундно, что позволяет видеть кратковременные пики нагрузки
  • Минимальное потребление ресурсов — агент занимает менее 1% CPU и около 100 МБ RAM
  • Автообнаружение — автоматически определяет запущенные сервисы (nginx, MySQL, PostgreSQL, Docker) и начинает собирать метрики
  • Более 800 коллекторов — поддержка практически любого сервиса из коробки
  • Встроенные алерты — сотни предонастроенных порогов для типичных проблем

Netdata идеально подходит для малых и средних инфраструктур — от одного VPS до десятков серверов. Для крупных инсталляций доступна Netdata Cloud — бесплатная SaaS-платформа для агрегации данных с множества нод.

Архитектура Netdata

Netdata работает по модели «агент на каждом хосте». Агент (netdata daemon) запускается на каждом сервере и собирает метрики локально. Данные хранятся в собственной базе данных — DBENGINE, которая использует кастомный формат хранения с автоматическим сжатием. По умолчанию хранится около 2 дней метрик с секундной гранулярностью и до нескольких недель с агрегацией.

Веб-интерфейс встроен в агент — каждый узел предоставляет дашборд на порту 19999. Для централизованного просмотра можно использовать Netdata Cloud или настроить стриминг метрик на выделенный parent-узел:

# Схема стриминга:
# child-node-1 --stream--> parent-node (хранит все метрики)
# child-node-2 --stream-->
# child-node-3 --stream-->

Установка Netdata на Linux

Netdata поддерживает практически все дистрибутивы Linux. Самый быстрый способ — официальный скрипт-установщик, который автоматически определит вашу ОС и установит все зависимости.

Установка через kickstart-скрипт

Выполните одну команду для установки последней стабильной версии:

wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && \
sh /tmp/netdata-kickstart.sh --stable-channel

Скрипт автоматически выполнит следующее:

  • Определит дистрибутив и версию ОС
  • Установит необходимые зависимости (gcc, make, zlib, openssl)
  • Скомпилирует Netdata из исходников или установит нативный пакет
  • Создаст systemd-юнит и запустит сервис

Для установки без подключения к Netdata Cloud (полностью автономный режим):

sh /tmp/netdata-kickstart.sh --stable-channel --dont-start-it

# Отключаем cloud в конфиге
sudo sed -i 's/# enabled = yes/enabled = no/' /etc/netdata/cloud.d/cloud.conf

# Запускаем
sudo systemctl start netdata
sudo systemctl enable netdata

После установки дашборд доступен по адресу http://YOUR_IP:19999. Проверьте статус:

sudo systemctl status netdata
curl -s http://localhost:19999/api/v1/info | jq '.version'

Установка через Docker

Для контейнеризованных окружений удобнее запустить Netdata в Docker:

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 /etc/localtime:/etc/localtime:ro \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  -v /var/log:/host/var/log: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

Флаг --pid=host необходим для мониторинга процессов хостовой ОС. Монтирование /var/run/docker.sock позволяет видеть метрики контейнеров. Аналогичная конфигурация для docker-compose:

version: '3'
services:
  netdata:
    image: netdata/netdata
    container_name: netdata
    pid: host
    network_mode: host
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
  netdataconfig:
  netdatalib:
  netdatacache:

Настройка сбора метрик и коллекторов

Netdata автоматически обнаруживает и мониторит большинство сервисов, но для некоторых требуется ручная настройка. Конфигурация коллекторов находится в каталоге /etc/netdata/. Основной конфигурационный файл — netdata.conf, а коллекторы настраиваются в go.d/ и python.d/.

Мониторинг Nginx

Для мониторинга Nginx необходимо включить модуль stub_status. Добавьте в конфигурацию Nginx:

server {
    listen 127.0.0.1:8080;
    server_name _;

    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

Затем настройте коллектор Netdata:

sudo nano /etc/netdata/go.d/nginx.conf
jobs:
  - name: local
    url: http://127.0.0.1:8080/nginx_status

Перезапустите Netdata:

sudo systemctl restart netdata

Теперь на дашборде появится раздел Nginx с графиками активных соединений, запросов в секунду и состояний воркеров.

Мониторинг PostgreSQL

Для PostgreSQL создайте выделенного пользователя с правом чтения статистик:

sudo -u postgres psql -c "
CREATE USER netdata WITH PASSWORD 'monitoring_pass';
GRANT pg_monitor TO netdata;
"

Настройте коллектор:

sudo nano /etc/netdata/go.d/postgres.conf
jobs:
  - name: local
    dsn: 'postgresql://netdata:monitoring_pass@127.0.0.1:5432/postgres'

Netdata будет собирать метрики транзакций, блокировок, кэша буферов, WAL, репликации и десятки других параметров PostgreSQL.

Мониторинг Docker-контейнеров

Если Docker-сокет примонтирован, Netdata автоматически мониторит все контейнеры. Для каждого контейнера отображаются: потребление CPU и RAM, сетевой I/O, дисковый I/O. Дополнительно можно включить cgroups-мониторинг:

# /etc/netdata/netdata.conf
[plugin:cgroups]
  enable cpuacct stat = yes
  enable cpuacct usage = yes
  enable memory = yes
  enable blkio throttle = yes

Для мониторинга health-чеков контейнеров используйте встроенный коллектор Docker Engine:

# /etc/netdata/go.d/docker_engine.conf
jobs:
  - name: local
    url: http://127.0.0.1:9323/metrics

Не забудьте включить экспорт метрик в Docker daemon:

# /etc/docker/daemon.json
{
  "metrics-addr": "127.0.0.1:9323",
  "experimental": true
}

Настройка алертов и уведомлений

Netdata поставляется с сотнями преднастроенных алертов, которые покрывают типичные сценарии: высокая нагрузка CPU, нехватка RAM, заполненный диск, упавшие сервисы. Все алерты описаны в каталоге /etc/netdata/health.d/ и используют DSL на основе YAML.

Создание кастомного алерта

Создадим алерт на высокую нагрузку диска:

sudo nano /etc/netdata/health.d/disk_custom.conf
 alarm: disk_space_critical
    on: disk.space
 lookup: min -1m unaligned of avail
  units: GiB
  every: 30s
   warn: $this < 10
   crit: $this < 5
  delay: down 15m multiplier 1.5 max 1h
   info: available disk space is critically low
     to: sysadmin

Разберём синтаксис:

  • on: disk.space — метрика, на которую навешивается алерт
  • lookup: min -1m unaligned of avail — берём минимальное значение доступного места за последнюю минуту
  • warn/crit — пороги для уровней WARNING и CRITICAL
  • delay — задержка перед снятием алерта (для предотвращения flapping)
  • to: sysadmin — группа получателей

Проверьте конфигурацию:

sudo netdatacli reload-health
sudo netdatacli health list | grep disk_space

Интеграция с Telegram

Настроим отправку уведомлений в Telegram. Отредактируйте файл уведомлений:

sudo nano /etc/netdata/health_alarm_notify.conf
# Telegram настройки
SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="1234567890:AAHfGxHfk_example_token"
DEFAULT_RECIPIENT_TELEGRAM="-100123456789"

Здесь -100123456789 — ID группы или чата в Telegram. Для получения ID бота используйте @BotFather, для ID чата — @userinfobot.

Можно настроить разные получатели для разных уровней:

# Отправляем WARNING только в канал мониторинга
# CRITICAL — в личку дежурного
role_recipients_telegram[sysadmin]="-100123456789|dba_chat_id"
role_recipients_telegram[webmaster]="-100987654321"

Протестируйте отправку:

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

Стриминг метрик и централизация

При наличии нескольких серверов удобно агрегировать метрики на выделенном parent-узле. Это позволяет просматривать все серверы через единый дашборд и хранить исторические данные в одном месте.

Настройка parent-узла

На центральном сервере отредактируйте конфигурацию стриминга:

sudo nano /etc/netdata/stream.conf
[STREAM_API_KEY_HERE]
  enabled = yes
  default history = 86400
  default memory mode = dbengine
  health enabled by default = auto
  allow from = 10.0.0.* 192.168.1.*

Замените STREAM_API_KEY_HERE на UUID, сгенерированный командой uuidgen. Параметр allow from ограничивает подключения по IP.

Увеличьте хранение метрик на parent-узле:

# /etc/netdata/netdata.conf
[db]
  mode = dbengine
  storage tiers = 3
  dbengine multihost disk space MB = 4096
  dbengine tier 1 multihost disk space MB = 1024
  dbengine tier 2 multihost disk space MB = 512

Настройка child-узлов

На каждом мониторируемом сервере настройте стриминг:

sudo nano /etc/netdata/stream.conf
[stream]
  enabled = yes
  destination = parent-server-ip:19999
  api key = STREAM_API_KEY_HERE
  timeout seconds = 60
  buffer size bytes = 1048576
  reconnect delay seconds = 5
  initial clock resync iterations = 60

Если child-узел не должен хранить метрики локально (экономия ресурсов):

# /etc/netdata/netdata.conf
[db]
  mode = ram
  retention = 300

Перезапустите Netdata на child-узле и проверьте подключение:

sudo systemctl restart netdata
sudo grep -i stream /var/log/netdata/error.log

На parent-узле в дашборде появится новая нода. Можно переключаться между серверами через выпадающий список в верхней части интерфейса.

Экспорт метрик в Prometheus и Grafana

Netdata может выступать как exporter для Prometheus. Это полезно, если у вас уже есть стек Prometheus + Grafana и вы хотите использовать Netdata как агент сбора.

Настройка Prometheus endpoint

Prometheus endpoint включён по умолчанию. Добавьте Netdata как target в Prometheus:

# prometheus.yml
scrape_configs:
  - job_name: 'netdata'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: [prometheus]
    honor_labels: true
    scrape_interval: 5s
    static_configs:
      - targets:
          - 'server1:19999'
          - 'server2:19999'
          - 'server3:19999'

Для фильтрации метрик (чтобы не перегружать Prometheus) используйте параметры:

params:
  format: [prometheus]
  # Только метрики CPU и памяти
  charts: [system.cpu, system.ram]
  # Или по префиксу
  prefix: [netdata_system]

Дашборд Grafana для Netdata

Импортируйте готовый дашборд из Grafana Marketplace. Популярные варианты:

  • Dashboard ID 7107 — общий обзор сервера
  • Dashboard ID 14399 — детальный мониторинг с Netdata

Для импорта: Grafana → Dashboards → Import → введите ID. Или создайте свой с примерами запросов:

# CPU usage по всем ядрам
rate(netdata_cpu_cpu_percentage_average{dimension!="idle"}[1m])

# Свободная RAM в процентах
netdata_system_ram_MiB_average{dimension="free"} /
(netdata_system_ram_MiB_average{dimension="free"} + netdata_system_ram_MiB_average{dimension="used"}) * 100

# Disk I/O
rate(netdata_disk_io_KiB_persec_average[5m])

Безопасность и ограничение доступа

По умолчанию Netdata слушает на всех интерфейсах порт 19999 без аутентификации. Для продакшен-окружений это необходимо исправить.

Ограничение через nginx reverse proxy

Закройте прямой доступ к Netdata и поставьте перед ним nginx с basic auth:

# /etc/netdata/netdata.conf
[web]
  bind to = 127.0.0.1
# /etc/nginx/sites-available/netdata
upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

server {
    listen 443 ssl http2;
    server_name monitoring.example.com;

    ssl_certificate /etc/letsencrypt/live/monitoring.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/monitoring.example.com/privkey.pem;

    auth_basic "Netdata Monitoring";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://netdata;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Создайте файл паролей:

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin

Firewall-правила

Если reverse proxy не подходит, ограничьте доступ через firewall:

# UFW
sudo ufw deny 19999
sudo ufw allow from 10.0.0.0/24 to any port 19999

# nftables
nft add rule inet filter input tcp dport 19999 ip saddr 10.0.0.0/24 accept
nft add rule inet filter input tcp dport 19999 drop

# iptables
iptables -A INPUT -p tcp --dport 19999 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 19999 -j DROP

Также отключите неиспользуемые коллекторы для уменьшения поверхности атаки:

# /etc/netdata/netdata.conf
[plugins]
  apps = no           # Если не нужен мониторинг процессов
  freeipmi = no       # Если нет IPMI
  perf = no           # Если не нужны hardware counters

Полезные советы по эксплуатации

Несколько рекомендаций, которые пригодятся при повседневной работе с Netdata.

Снижение потребления ресурсов. На серверах с ограниченной памятью уменьшите количество хранимых данных и частоту обновления:

# /etc/netdata/netdata.conf
[global]
  update every = 2        # Обновление каждые 2 секунды вместо 1

[db]
  mode = dbengine
  dbengine multihost disk space MB = 256

API для скриптов. Netdata предоставляет REST API для интеграции с внешними системами:

# Текущая загрузка CPU
curl -s 'http://localhost:19999/api/v1/data?chart=system.cpu&after=-1&format=json' | jq

# Список всех чартов
curl -s 'http://localhost:19999/api/v1/charts' | jq '.charts | keys[]'

# Проверка алертов
curl -s 'http://localhost:19999/api/v1/alarms?active' | jq '.alarms | to_entries[] | .value.status'

Обновление Netdata:

# Если установлен через kickstart
sudo /usr/libexec/netdata/netdata-updater.sh

# Или для автообновления (по умолчанию включено)
cat /etc/netdata/.environment | grep AUTO_UPDATE

Часто задаваемые вопросы

В типичной конфигурации Netdata использует 1-3% одного ядра CPU и 100-300 МБ оперативной памяти. Потребление зависит от количества активных коллекторов и метрик. На серверах с минимальными ресурсами можно снизить потребление, увеличив интервал обновления до 2-5 секунд и отключив ненужные коллекторы.

Netdata нативно работает только на Linux, macOS и FreeBSD. Для мониторинга Windows используйте связку: установите windows_exporter на Windows-сервере, а Netdata будет собирать метрики через Prometheus endpoint. Альтернативно, Netdata Cloud поддерживает интеграцию с WMI-метриками Windows.

По умолчанию данные с секундной гранулярностью хранятся около 2-3 дней. Хранение зависит от параметра dbengine multihost disk space MB. При использовании трёхуровневого хранения (tier 0/1/2) секундные данные агрегируются в минутные и часовые, что позволяет хранить недели и месяцы истории при минимальном расходе диска.

Netdata выигрывает в скорости развёртывания (1 минута vs часы для Zabbix), гранулярности данных (1 секунда vs 30-60 секунд), качестве дашбордов из коробки и минимальных требованиях к ресурсам. Zabbix лучше для инфраструктур с сотнями узлов, где необходимы гибкие триггеры, SLA-отчёты, карты сети и RBAC. Для 5-30 серверов Netdata — оптимальный выбор.

Используйте фильтрацию по метке (label) в определении алерта:

 alarm: disk_space_data
    on: disk.space
 lookup: min -1m unaligned of avail
    os: linux
  hosts: db-server-*
  families: /data
   warn: $this < 20
   crit: $this < 10

Параметр families: /data ограничивает алерт только разделом /data. Можно использовать подстановочные символы: families: /data*.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#netdata установка#мониторинг серверов#мониторинг linux#netdata настройка#netdata алерты#realtime мониторинг#netdata telegram#netdata prometheus
Комментарии 0

Оставить комментарий

загрузка...