🏠 | 💻 IT | 🔨QA |

netdata

Contents
Introduction
Установка в CentOS/RedHat Linux
Остановить / Запустить netdata
Запросы к API

Introduction

Netdata-это инструмент с открытым исходным кодом, предназначенный для сбора показателей в реальном времени, таких как:

и так далее, а затем отображения их в легко интерпретируемых диаграммах обновляющихся в реальном времени.

Инструмент предназначен для визуализации деятельности в максимально возможной детализации, позволяя пользователю получить общее представление о том, что происходит и что только что произошло в его системе или приложении.

Я стал использовать netdata как более продвинутую альтернативу своему самописному скрипту для мониторинга потребления CPU и RAM

Обзор

Netdata состоит из демона, который при выполнении отвечает за сбор и отображение информации в режиме реального времени.

Это легкий инструмент, в основном написанный на C , Python и JavaScript , который использует минимальные ресурсы: около 2% на однопроцессорной системе.

Он может быть запущен в любом ядре GNU / Linux для мониторинга любой системы или приложения и способен работать на ПК, серверах и встроенных устройствах Linux.

Особенности

Netdata предназначена для установки в систему, не прерывая ни одного из запущенных на ней приложений.

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

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

По умолчанию он содержит определенные плагины, которые собирают ключевые системные метрики, но его поведение расширяется с помощью API плагинов.

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

Он имеет интерфейс с настраиваемыми темами и может быть настроен пользователем вручную с помощью простого HTML.

Здесь нет никаких зависимостей, так как он работает как собственный веб-сервер со статическими веб-файлами.

Начиная с версии v1.12, Netdata по умолчанию собирает анонимную информацию об использовании и отправляет ее в Google Analytics, функцию, которую можно отключить с помощью ручной настройки.

Разработка

В настоящее время Netdata поддерживается почти 400 участниками, которые помогают (на различных уровнях) обслуживать тысячи отдельных пользователей и компаний, использующих этот инструмент.

Пользователь с наибольшим вкладом в настоящее время является Коста Цаусисом (Costa Tsaousis), генеральным директором и основателем Netdata, с более чем 600 000 добавлениями к коду.

Второй по активности пользователь - Илья Мащенко.

Самым популярным дополнением к Netdata, по-видимому, является добавление поддержки сбора данных из Vnstat, pull-запроса Ноя Троя (Noah Troy) с почти 200 отдельными комментариями (больше, чем любой другой pull-запрос).

Самый популярный за все время запрос функции, по-видимому, добавляет поддержку запуска нескольких заданий freeipmi из той же Netdata.

Установка

learn.netdata.cloud

get

Перед установкой нужно убедиться, что у вас есть curl и другие утилиты

netdata предупредит вас о том, что нужно обновить систему.

>> IMPORTANT <<
Please make sure your system is up to date
by running: yum update

Советую сделать это заранее.

В .rpm Linux

Если вы устанавливаете netdata на CentOS или RedHat:

Как вариант - установите заранее следующее:

sudo yum upadte
sudo yum install epel-release
sudo yum install zlib-devel libuuid-devel libmnl-devel gcc make git autoconf autogen automake pkgconfig
sudo yum install autoconf-archive cmake elfutils-libelf-devel json-c-devel libuv-devel lz4-devel openssl-devel
sudo yum install curl jq nodejs

Теперь можно воспользоваться скриптом с официального сайта. Я выбрал получать только стабильные обновления и отключил телеметрию.

bash <(curl -Ss https://my-netdata.io/kickstart.sh) --stable-channel --disable-telemetry

Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: autoconf-archive noarch 2017.03.21-1.el7 base 612 k cmake x86_64 2.8.12.2-2.el7 base 7.1 M elfutils-libelf-devel x86_64 0.176-5.el7 base 40 k json-c-devel x86_64 0.11-4.el7_0 base 20 k libuv-devel x86_64 1:1.40.0-1.el7 epel 36 k lz4-devel x86_64 1.8.3-1.el7 base 26 k openssl-devel x86_64 1:1.0.2k-21.el7_ updates 1.5 M Installing for dependencies: keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k krb5-devel x86_64 1.15.1-50.el7 base 273 k libcom_err-devel x86_64 1.42.9-19.el7 base 32 k libselinux-devel x86_64 2.5-15.el7 base 187 k libsepol-devel x86_64 2.5-10.el7 base 77 k libverto-devel x86_64 0.2.5-4.el7 base 12 k pcre-devel x86_64 8.32-17.el7 base 480 k Transaction Summary ================================================================================================================= Install 7 Packages (+7 Dependent packages) Total download size: 10 M Installed size: 35 M

Если вы получили ошибку

bash: /dev/fd/63: No such file or directory

Убедитесь что вы выполняете команду без sudo. sudo делать не нужно

В процессе установки нужно будет пару раз нажать ENTER и ввести пароль для sudo. Если вы не будете следить за установкой - есть шанс пропустить этот момент и тогда она закончится фейлом.

Процесс установки довольно долгий - на virtual CentOS 7 с 4 Gb RAM он занял у меня более 20 минут

После успешной установке появится сообщение:

--- We are done! --- ^ |.-. .-. .-. .-. .-. . netdata .-. .- | '-' '-' '-' '-' '-' is installed and running now! -' '-' +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->

В браузере введите 127.0.0.1:19999

Свежеустановленная netdata image from website www.aredel.com
Свежая netdata

Файлы с настройками netdata появляются в

/etc/netdata

sudo ls -la /etc/netdata

total 288 drwxr-xr-x. 10 root root 244 Feb 15 17:10 . drwxr-xr-x. 85 root root 8192 Feb 15 17:10 .. drwxr-xr-x. 2 root root 6 Feb 15 16:57 charts.d drwxr-xr-x. 2 root root 6 Feb 15 16:57 custom-plugins.d -rwxr-xr-x. 1 root root 2045 Feb 15 16:57 edit-config -rw-r--r--. 1 root root 511 Feb 15 17:10 .environment drwxr-xr-x. 2 root root 6 Feb 15 16:57 go.d drwxr-xr-x. 2 root root 6 Feb 15 16:57 health.d -rw-r--r--. 1 root root 273592 Feb 15 17:10 netdata.conf drwxr-xr-x. 2 root root 6 Feb 15 16:57 node.d -rw-rw-r--. 1 root root 0 Feb 15 17:10 .opt-out-from-anonymous-statistics lrwxrwxrwx. 1 root root 23 Feb 15 17:10 orig -> /usr/lib/netdata/conf.d drwxr-xr-x. 2 root root 6 Feb 15 16:57 python.d drwxr-xr-x. 2 root root 6 Feb 15 16:57 ssl drwxr-xr-x. 2 root root 6 Feb 15 16:57 statsd.d

netdata.conf

Файл netdata.conf с текущими настройками можно изучить также и через веб интерфейс

В браузере введите

localhost:19999/netdata.conf

netdata.conf через web итерфейс image from website www.aredel.com
netdata.conf

Остановить netdata

service netdata stop
systemctl stop netdata
/etc/init.d/netdata stop

Запустить netdata

systemctl start netdata
systemctl start netdata
/etc/init.d/netdata start

Перезапустить netdata

systemctl restart netdata
systemctl restart netdata
/etc/init.d/netdata restart

Доступ с удалённого компьютера

Допустим у вас netdata на хосте 192.168.56.104 а вы хотите мониторить её с 192.168.56.1

Откройте на нём порт 19999 ( инструкция для CentOS/RedHat )

Введите на хосте 192.168.56.1 в браузере

http://192.168.56.104:19999

Следите за тем, чтобы было http а не https иначе может не подсоединитсья

Запросы к API

Документация лежит в github

Пример запроса на Python

Рассмотрим скрипт sys_monitor.py

import urllib.request import json def main(): r = urllib.request.urlopen('http://10.1.102.209:19999/api/v1/data?chart=system.cpu&points=5&after=-10&options=seconds') rr = r.read() rj = json.loads(rr) print(json.dumps(rj)) if __name__ == '__main__': main()

Разберём этот пример

Запросы можно делать на один из двух ресурсов:

  1. /api/v1/data
  2. /api/v1/badge.svg

Я сделал на /api/v1/data поэтому EndPoint выглядит так

http://10.1.102.209:19999/api/v1/data + параметры

chart=system.cpu интересует CPU
points=5 нужно пять значений за выбранный период
after=-10 выбранный период - последние 10 секунд
options=seconds

По своей сути этот запрос является просто обращением к базе уже собранных данных.

Подробнее обо всех запросах читайте в главе параметры запросов

Запустить скрипт можно командой

python3 sys_monitor.py

{ "labels": ["time", "guest_nice", "guest", "steal", "softirq", "irq", "user", "system", "nice", "iowait"], "data": [ [1614181358, 0, 0, 0, 0.0625782, 0, 1.1285306, 1.5675215, 0, 0], [1614181356, 0, 0, 0, 0.1888379, 0, 2.6453165, 2.0154335, 0, 0.377993], [1614181354, 0, 0, 0, 0.0625, 0, 0.9391468, 1.3775879, 0, 0], [1614181352, 0, 0, 0, 0.0628141, 0, 1.0044735, 1.2554933, 0, 0], [1614181350, 0, 0, 0, 0.1254707, 0, 0.941109, 1.4426771, 0, 0] ] }

time: Получено пять точек, как и было указано в points время дано в формате Epoch Time

"guest_nice", "guest", "steal" пусты

softirq:

"irq" пуст

user: показано CPU потреблённое пользователем

system: показано CPU потреблённое системой

"nice" пуст

iowait: показано CPU потреблённое iowait

Список параметров
Название Обязательный Описание
chart да График к которому делается запрос.
points нет Число точек, которые нужно вернуть. Netdata может уменьшить число точек используя группировку. По умолчанию результат будет содержать то же число точек что и база данных (хотя это также зависит от параметра gtime).
before нет Абсолютная временная метка или относительное (от настоящего времени) время до которого выбираются данные. По умолчанию приравнивается к последней (самой новой) временной метке в базе данных.
after нет Абсолютная временная метка или относительное (от before) с которого начинают выбираться данные. По умолчанию приравнивается к первой (самой старой) временной метке в базе данных.
group нет Метод группировки, с помощью которого нужно уменьшить число точек (по сравнению с полным числом точек в базе данных). По умолчанию используется average.
gtime нет Время ресэмплинга с помощью которого можно изменить единицы измерения метрики (например, установка значения 60 сконвертирует метрику per second в per minute. По умолчанию приравнивается к степени детализации (granularity) базы данный.
options нет A bitmap of options that can affect the operation of the query. Only 2 options are used by the query engine: unaligned and percentage. All the other options are used by the output formatters. The default is to return aligned data.
dimensions нет A simple pattern to filter the dimensions to be queried. The default is to return all the dimensions of the chart.
Share in social media: