Продвинутым
April 20, 2022

Часть 2. Мониторинг: Grafana

1package & Let's Node

⠀Для отображения метрик из различных баз данных существует платформа под названием Grafana, которая подробнее описана в данной статье.


Содержание


Что это?

К содержанию

⠀Grafana — это платформа для аналитики и визуализации данных с открытым исходным кодом. Она позволяет получать данные из огромного количества источников данных (InfluxDB, Prometheus, MySQL, PostgreSQL, Graphite и т.п.) и отображать на красивых настраиваемых дашбордах.

⠀Дашборд — это веб-страница с множеством панелей, которые отображают выбранную информацию в виде текста, графиков, диаграмм и т. д.

⠀Помимо этого можно настроить оповещения, чтобы вовремя узнавать о каких-то сбоях. Однако для оповещений лучше поискать специализированное приложение, поскольку Grafana обладает небольшим функционалом.


Интерфейс Grafana

К содержанию

⠀Для открытия интерфейса Grafana необходимо в браузере на любом устройстве перейти по ссылке вида http://SERVER_IP:3000, подставив IP сервера.

⠀При первом открытии появится окно авторизации, где необходимо ввести данные, заданные при установке Grafana’ы на сервер.

⠀После авторизации откроется домашняя страница Grafan’ы, в левой части которой находится меню со следующими разделами:

  • Search dashboards;
  • Create;
  • Dashboards;
  • Explore;
  • Alerting;
  • Configuration;
  • Server admin.

⠀Наиболее используемые разделы описаны далее.

Configuration

⠀Наиболее используемый подраздел — «Data sources», в котором находится список добавленных источников для отображения метрик и через который добавляются новые.

⠀Для добавления первого источника необходимо нажать «Add data source», в открывшемся окне выбрать InfluxDB.

⠀Затем заполнить данные:

  • Name — название источника, которое будет отображаться в дашбордах;
  • Default — использовать источник по умолчанию — выключить;
  • URL — URL для подключения к InfluxDB в формате http://SERVER_IP:8086;
  • Database — название БД InfluxDB — telegraf;
  • User — пользователь, от имени которого будет происходить подключение к БД — reader;
  • Password — пароль указанного пользователя — вставить/ввести сохранённый пароль пользователя reader.

⠀После заполнения данных необходимо нажать «Save & test» и дождаться тестирования подключения. В результате могут появиться следующие сообщения:

  • Восклицательный знак на красном фоне с какой-либо ошибкой — возникла указанная проблема при подключении, наиболее распространённые причины:
    • Неверная URL для подключения к InfluxDB;
    • InfluxDB не работает или не запущено;
    • Неверный пароль пользователя reader.
  • Галочка на зелёном фоне с надписью «Data source is working» — подключение осуществилось успешно.

⠀Для возврата к списку источников нужно нажать «Back», для добавления следующего источника используется кнопка «Add data source».

Create

⠀Наиболее используемые подразделы:

  • «Import» — импорт дашборда;
  • «Folder» — создание папок для группировки дашбордов;
  • «Dashboard» — создание собственного дашборда с нуля (открывается по умолчанию).

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

⠀Поскольку создание предназначено больше для продвинутых пользователей, более полезным будет подраздел «Import», в котором можно импортировать кем-то созданный дашборд, например, нашей командой (будет рассмотрен позже). Сделать это можно двумя способами:

  • При помощи ссылки или ID дашборда из списка на сайте Grafana;
  • Вставив JSON структуру панели, представленную в каком-либо другом репозитории.

⠀После заполнения одного из полей и нажатия «Load» появится новое окно, в котором можно задать другое название и выбрать папку, в которую будет помещен дашборд.

⠀Подраздел «Folder» предназначен для создания папок, в которые можно поместить дашборды руководствуясь какой-либо логикой, например ноды экосистемы Cosmos или Polkadot.

Dashboards

⠀На главной странице раздела находится список недавно открытых дашбордов.

⠀В подразделе «Browse» располагается список всех папок и находящихся в них дашбордов, а также происходит управление ими (перемещать, удалять и т.п.).

Server admin

⠀Наиболее используемый подраздел — «Users», через который добавляются пользователи. Это может понадобиться, например, для добавления пользователя, который сможет только наблюдать за дашбордами.

⠀Для добавления пользователя необходимо нажать «New user» и заполнить данные:

  • Name — имя пользователя;
  • Username — логин;
  • Password — пароль.

⠀После заполнения данных необходимо нажать «Create user».

⠀Созданный пользователь появится в списке. Для того, чтобы открыть настройки пользователя, необходимо нажать на него.

⠀В профиле можно:

  • Удалить пользователя;
  • Отключить/включить его;
  • Изменить роль;
  • Посмотреть историю авторизаций.

Дашборды нашей команды

К содержанию

О багах и идеях по улучшению писать SecorD’у

⠀Предварительно необходимо добавить все интересующие источники данных, если это не было сделано ранее.

⠀По умолчанию всё время в дашбордах отображается исходя из часового пояса, установленного в браузере. Часовой пояс можно поменять в окне для выбора периода отображения информации.

⠀В дашбордах под конкретные ноды за основу взят общий дашборд и добавлены разделы Quick node info и Node info.

⠀Если на сервере стоит несколько разных нод, для которых наша команда сделала дашборды, то можно парсить метрики одновременно для всех нод. Для этого нужно выполнить установку и конфигурацию интересующих дашбордов.

Общий

Внешний вид

Установка

⠀Импортировать дашборд (необходимо ввести логин и пароль от Grafana)

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/Monitoring/main/multi_tool.sh) -id \
-ju https://raw.githubusercontent.com/SecorD0/Monitoring/main/dashboards/General/dashboard.json

⠀В Grafana перейти или обновить раздел «Dashboards» и открыть дашборд, нажав на него (если его нет в списке, то открыть из подраздела «Browse»).

Настройка

⠀После открытия дашборда необходимо добавить сервера в таблицу всех серверов, для этого необходимо нажать на название панели и выбрать «Edit».

⠀Далее выбрать первый источник и переключить режим на ручной ввод запроса.

⠀В поле для ввода запроса вставить запрос ниже и выбрать значение «Table» в графе «Format as»

SELECT "ip", "n_cpus", "ram_total", "drive_total", "load15", "cpu_usage_percent", "ram_used_percent", last("drive_used_percent") AS "drive_used_percent" FROM "for_table" WHERE $timeFilter GROUP BY "host"

⠀Для добавления следующего источника необходимо нажать «+ Query» и повторить процедуру, для удаления лишнего запроса нужно нажать на корзинку.

⠀После добавления всех источников необходимо нажать кнопку «Apply» в правом верхнем углу.

⠀Затем на странице дашборда в правом верхнем углу нажать на дискету для сохранения внесенных изменений.

⠀После настройки таблица со всеми серверами будет выглядеть подобным образом:

⠀В дашборде присутствует 3 переменных для его настройки:

  • Data Source — источник данных, содержащий один или несколько хостов;
  • Host — хост, который будет отображён в дашборде;
  • Drives for IO/s — один или несколько дисков, которые будут отображаться на графике скорости чтения/записи.

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

⠀А также частоту обновления информации.

Описание разделов

⠀Таблица «All servers» содержит в себе краткую информацию о добавленных в неё серверах:

  • Название хоста;
  • IP сервера;
  • Время последней записи данных;
  • Количество логических ядер (равняется количеству потоков процессора);
  • Общий объём оперативной памяти;
  • Общий объём диска;
  • Средние значения нагрузки за 15 минут (максимальное_значение=количество_потоков, например 6);
  • Процент использования процессора;
  • Процент использования оперативной памяти;
  • Процент использования дискового пространства.

⠀Наиболее полезный и часто используемый раздел — это «Quick summary», в котором находится краткая информация о сервере:

  • Процент использования процессора;
  • Количество логических ядер процессора;
  • Средние значения нагрузки за 15 минут;
  • Общий и используемый объём:
    • Оперативной памяти;
    • Дискового пространства;
    • Файла подкачка (свапа).
  • Длительность работы сервера;
  • Количество:
    • Залогиненных пользователей;
    • Активных процессов;
    • Запущенных Docker контейнеров.
  • Скорость:
    • Скачивания;
    • Отдачи.

⠀Раздел «Docker» отображает:

  • Все контейнеры, присутствующие на сервере (аналог docker ps -a);
  • Текущий и средний процент использования процессора рабочими контейнерами;
  • Текущий и средний объём использования оперативной памяти рабочими контейнерами.

⠀В разделе «Selected processes» содержится информация о заданных в конфиге Telegraf процессах и сервисных файлах.

⠀Раздел «CPU» отображает детализированную информацию об использовании процессора:

  • Текущий и средний процент загрузки процессора пользователем и системой (максимальное_значение=количество_потоков*100, например 6*100=600%);
  • Средние значения нагрузки за:
    • 1 минуту;
    • 5 минут;
    • 15 минут.
  • Текущий и средний процент загрузки каждого логического ядра.

⠀Раздел «RAM, SWAP» содержит информацию о текущем использовании оперативной памяти и свапа.

⠀В разделе «Drive» отображается используемый объём диска и скорость чтения/записи выбранных в переменной Drives for IO/s дисков.

⠀В разделе «Network» содержится:

  • Средняя, текущая, максимальная и минимальная скорость скачивания и отдачи;
  • Потребление трафика с момента установки на сервер системы и за выбранный период.

Solana

Внешний вид

Установка

На сервере с InfluxDB

⠀Отключить удаление метрик через 14 дней (необходимо ввести пароль администратора)

influx -username admin -password "$p" -database telegraf -execute 'ALTER RETENTION POLICY "autogen" ON "telegraf" DURATION INF'

На сервере с нодой

⠀Обновить пакеты

sudo apt update && sudo apt upgrade -y

⠀Установить необходимые пакеты

sudo apt install wget curl jq bc subversion sqlite3 -y

⠀Скачать скрипт, собирающий метрики

svn export --force https://github.com/SecorD0/Monitoring/trunk/dashboards/Solana/solana.sh $HOME/.monitoring/telegraf/

⠀Сделать скрипт исполняемым

chmod +x $HOME/.monitoring/telegraf/solana.sh

⠀Открыть конфиг при помощи какого-нибудь текстового редактора, например Nano

nano /etc/telegraf/telegraf.conf

⠀Раскомментировать и отредактировать разделы, отслеживающие процессы и сервисные файлы

[[inputs.procstat]]
  pid_tag = true
  pattern = "solana*"

[[inputs.systemd_units]]
  pattern = "solana.service"

⠀Добавить в конец раздел, запускающий скрипт

[[inputs.exec]]
  interval = "5m"
  commands = ["sudo su -c /root/.monitoring/telegraf/solana.sh -s /bin/bash root"]
  data_format = "influx"

⠀Перезапустить Telegraf

sudo systemctl restart telegraf

На сервере с Grafana’ой

⠀Импортировать дашборд (необходимо ввести логин и пароль от Grafana)

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/Monitoring/main/multi_tool.sh) -id \
-ju https://raw.githubusercontent.com/SecorD0/Monitoring/main/dashboards/Solana/dashboard.json

⠀В Grafana перейти или обновить раздел «Dashboards» и открыть дашборд, нажав на него (если его нет в списке, то открыть из подраздела «Browse»).

Описание разделов

⠀В разделе «Quick node info» отображается:

  • Текущая эпоха;
  • Прогресс эпохи;
  • Примерное время окончания эпохи;
  • Через сколько следующий слот;
  • Статус ноды:
    • Running — работает;
    • Syncing — синхронизируется;
    • Not running — не работает;
    • Delinquent — валидатор не получает награды.
  • Версия ноды (берётся из сети);
  • Комиссия валидатора;
  • Баланс identity аккаунта;
  • Баланс vote аккаунта;
  • Таблица с информацией о каждой эпохе:
    • Примерное время окончания;
    • Эпоха;
    • Цена SOL токена;
    • Необходимое для отработки количество слотов;
    • Количество успешно обработанных слотов;
    • Количество пропущенных слотов;
    • Скип рейт валидатора;
    • Средний скип рейт по сети;
    • Количество набранных кредитов;
    • Количество застейканных на валидатора токенов;
    • Награда за эпоху (обработанные слоты + со стейка);
    • Расходы на голосование;
    • Профит в SOL;
    • Профит в $.

⠀Раздел «Node info» содержит графики с информацией:

  • Скип рейт:
    • Валидатор;
    • Средний по сети.
  • Количество слотов:
    • Успешно обработанные;
    • Пропущенные.
  • Набранные кредиты;
  • Баланс:
    • Identity аккаунта;
    • Vote аккаунта.

Massa

Внешний вид

Установка

На сервере с InfluxDB

⠀Отключить удаление метрик через 14 дней (необходимо ввести пароль администратора)

influx -username admin -password "$p" -database telegraf -execute 'ALTER RETENTION POLICY "autogen" ON "telegraf" DURATION INF'

На сервере с нодой

⠀Обновить пакеты

sudo apt update && sudo apt upgrade -y

⠀Установить необходимые пакеты

sudo apt install wget jq bc subversion -y

⠀Скачать скрипт, собирающий метрики

svn export --force https://github.com/SecorD0/Monitoring/trunk/dashboards/Massa/massa.sh $HOME/.monitoring/telegraf/

⠀Сделать скрипт исполняемым

chmod +x $HOME/.monitoring/telegraf/massa.sh

⠀Открыть конфиг при помощи какого-нибудь текстового редактора, например Nano

nano /etc/telegraf/telegraf.conf

⠀Раскомментировать и отредактировать разделы, отслеживающие процессы и сервисные файлы

[[inputs.procstat]]
  pid_tag = true
  pattern = "massa*"

[[inputs.systemd_units]]
  pattern = "massad.service"

⠀Добавить в конец раздел, запускающий скрипт

[[inputs.exec]]
  interval = "1m"
  commands = ["sudo su -c /root/.monitoring/telegraf/massa.sh -s /bin/bash root"]
  data_format = "influx"

⠀Перезапустить Telegraf

sudo systemctl restart telegraf

На сервере с Grafana’ой

⠀Импортировать дашборд (необходимо ввести логин и пароль от Grafana)

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/Monitoring/main/multi_tool.sh) -id \
-ju https://raw.githubusercontent.com/SecorD0/Monitoring/main/dashboards/Massa/dashboard.json

⠀В Grafana перейти или обновить раздел «Dashboards» и открыть дашборд, нажав на него (если его нет в списке, то открыть из подраздела «Browse»).

Описание разделов

⠀В разделе «Quick node info» отображается:

  • Текущий цикл;
  • Время окончания эпизода;
  • Статус ноды:
    • Running — работает;
    • Not running — не работает.
  • Версия ноды;
  • Открыты ли порты;
  • Включена ли возможность стейкинга для основного кошелька;
  • Баланс кошелька;
  • Общее количество ROLL’ов;
  • Количество активных ROLL’ов.

⠀Раздел «Node info» содержит график, отображающий баланс основного кошелька.


Создание своего дашборда

К содержанию

⠀Для того, чтобы научиться делать свои дашборды, необходимо научиться работать с InfluxDB, Telegraf и Grafana. В этом могут помочь:

  • Google;
  • Вольфрамовая психика при работе с InfluxDB (с точки зрения человека, работающего с классическими базами данных это нечто ужасное);
  • Telegraf inputs;
  • При необходимости примеры скриптов для парсинга сторонних метрик;
  • Какой-нибудь дашборд для разбора, например нашей команды;
  • Grafana playground.

Забыт пароль от Grafana

К содержанию

⠀В случае, если пароль администратора Grafana’ы был забыт, необходимо изменить его на admin командами

sudo apt install sqlite3 -y; \
sqlite3 $HOME/.monitoring/grafana/grafana.db "UPDATE user SET password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' WHERE login = 'admin'"

⠀После чего необходимо вернуться на страницу авторизации и ввести прежний логин и пароль admin, а затем изменить пароль на новый и сохранить его в надёжном месте.


Полезные команды

К содержанию

⠀Сбросить пароль на admin

sudo apt install sqlite3 -y; \
sqlite3 $HOME/.monitoring/grafana/grafana.db "UPDATE user SET password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' WHERE login = 'admin'"

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

docker restart grafana

Полезные ссылки

К содержанию

Дашборды нашей команды | Telegraf inputs | Grafana playground


Благодарности

К содержанию

Команда 1package — написание статьи

Выразить благодарность