Netdata: Мониторинг в реальном времени

Инструмент ориентированный на сборку и визуализацию показателей системы

Posted by Vrublevskit Vitaliy on October 13, 2019 · 6 mins read

Netdata: Мониторинг в реальном времени

В современном мире проблема мониторинга стоит достаточно остро, данный инструмент отличается своей простотой как в установке и настройке, так и визуализации. Основное направление - сборка данных в реальном времени.

Netdata позволяет отследить в реальном времени практически все показатели системы, включая:

  • Состояние docker контейнеров
  • Оперативная память
  • Жесткий диск (Cвободное место, скорость записи, чтения и многое другое)
  • Нагрузка процессора
  • Операции ввода-вывода
  • Сеть
  • Многое другое

Помимо этого имеется возможность расширить функциональность системы с помощью плагинов наиболее популярные:

  • Postfix
  • Squid
  • PHP-FPM
  • Golang orchestrator

Так же имеется Live Demo версия сайта

Установка

Существует несколько вариантов установки Netdata:

  • Локальная установка
  • Поднимае Docker контейнера
Локальная установка

Для начала установим зависимости

$ sudo apt-get install git zlib1g-dev uuid-dev libmnl-dev gcc make autoconf autoconf-archive autogen automake pkg-config curl

и

$ sudo apt-get install python python-yaml python-mysqldb python-psycopg2 nodejs lm-sensors netcat

Далее клонируем репозиторий программы:

git clone https://github.com/firehol/netdata.git --depth=1 ~/netdata

Установка:

$ cd ~/netdata
$ sudo ./netdate-installer.sh

Здесь мы запускаем скрипт сборки и установки Netdata, по окончанию установки Netdata будет настроена и готова к работе.

Время хранения метрик

Все настройки хранятся в файле

/etc/netdata/netdata.conf

В нем имеется общий раздел (global), данный раздел содержит параметр history

Для хранения данных в течение 3600 секунд (1 часа) требуется 15 MБ оперативной памяти;

  • в течение 7200 секунд (2 часов) — 30 МБ оперативной памяти;
  • в течение 14400 секунд (4 часов) — 60 МБ оперативной памяти;
  • в течение 28800 секунд (8 часов) — 120 МБ оперативной памяти;
  • в течение 43200 секунд (12 часов) — 180 МБ оперативной памяти;
  • в течение 86400 секунд (т.е. суток) — 360 МБ оперативной памяти.

Больше информации о разделах и пунктах конфигурации можно получить из документации на офф. сайте

Включаем дедупликацию страниц памяти

В своем блоге команда разработки Netdata советует выполнить ряд действий которые могут увеличить производительность netdata на 30-60% для этого необходимо отредактировать файл

$ sudo nano /etc/rc.local

Отредактировать нужно так:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs

exit 0

Особенности Netdata

Оповещения и health check

Хотелось бы выделить наиболее важные и полезные функции, а именно возможность оповещения о таких события:

  • Превышении любого из показателей(Оперативная память, сетевая активность и т.п.)
  • Наличии ошибок в сетевых интерфейсах
  • Многое другое

Пример конфига:

template: apache_last_collected_secs
      on: apache.requests
    calc: $now - $last_collected_t
   every: 10s
    warn: $this > ( 5 * $update_every)
    crit: $this > (10 * $update_every)

Думаю в разъяснении не нуждается, все предельно просто. Более подробно на настройке

Хранение метрик

Помимо хранения данных в оперативной памяти, можно использовать различные базы данных для сохранения истории, доступные хранилища и интерфейсы:

  • Graphite (plaintext interface - Graphite, InfluxDB, KairosDB, Blueflood, ElasticSearch)
  • Opentsdb (telnet or HTTP interfaces - used by OpenTSDB, InfluxDB, KairosDB, etc)
  • JSON (Любая база поддерживающая NOSQL, например MongoDB)
  • AWS Kinesis Data Streams (Метрики отправляются в JSON формате)

Внимание! Одновременно может быть активен лишь один из вышеперечисленных интерфейсов

С конкретными примерами настройки можно ознакомиться в данном разделе

Запуск Netdata с помощью Docker

Ранее я писал о том что можно установить Netdata не только локально, но и с помощью Docker(Что я чаще всего и использую)

Пример команды для запуска:

docker run -d --name=netdata \
  -p 19999:19999 \
  -v /etc/passwd:/host/etc/passwd:ro \
  -v /etc/group:/host/etc/group:ro \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  --cap-add SYS_PTRACE \
  --security-opt apparmor=unconfined \
  netdata/netdata

Или есть вам удобнее в docker-compose

version: '3'
services:
  netdata:
    image: netdata/netdata
    hostname: example.com # set to fqdn of host
    ports:
      - 19999:19999
    cap_add:
      - SYS_PTRACE
    security_opt:
      - apparmor:unconfined
    volumes:
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro

Вот и все! Мы можем перейти по адресу http://localhost:19999 и увидеть метрики в реальном времени.