netdata
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.
Установка
Перед установкой нужно убедиться, что у вас есть 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 появляются в
/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
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()
Разберём этот пример
Запросы можно делать на один из двух ресурсов:
- /api/v1/data
- /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. |