Часть 2. Мониторинг: Grafana
⠀Для отображения метрик из различных баз данных существует платформа под названием Grafana, которая подробнее описана в данной статье.
Содержание
Что это?
⠀Grafana — это платформа для аналитики и визуализации данных с открытым исходным кодом. Она позволяет получать данные из огромного количества источников данных (InfluxDB, Prometheus, MySQL, PostgreSQL, Graphite и т.п.) и отображать на красивых настраиваемых дашбордах.
⠀Дашборд — это веб-страница с множеством панелей, которые отображают выбранную информацию в виде текста, графиков, диаграмм и т. д.
⠀Помимо этого можно настроить оповещения, чтобы вовремя узнавать о каких-то сбоях. Однако для оповещений лучше поискать специализированное приложение, поскольку Grafana обладает небольшим функционалом.
Интерфейс Grafana
⠀Для открытия интерфейса Grafana необходимо в браузере на любом устройстве перейти по ссылке вида http://SERVER_IP:3000
, подставив IP сервера.
⠀При первом открытии появится окно авторизации, где необходимо ввести данные, заданные при установке Grafana’ы на сервер.
⠀После авторизации откроется домашняя страница Grafan’ы, в левой части которой находится меню со следующими разделами:
⠀Наиболее используемые разделы описаны далее.
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» и заполнить данные:
⠀После заполнения данных необходимо нажать «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 ps -a
); - Текущий и средний процент использования процессора рабочими контейнерами;
- Текущий и средний объём использования оперативной памяти рабочими контейнерами.
⠀В разделе «Selected processes» содержится информация о заданных в конфиге Telegraf процессах и сервисных файлах.
⠀Раздел «CPU» отображает детализированную информацию об использовании процессора:
- Текущий и средний процент загрузки процессора пользователем и системой (
максимальное_значение=количество_потоков*100
, например6*100=600%
); - Средние значения нагрузки за:
- Текущий и средний процент загрузки каждого логического ядра.
⠀Раздел «RAM, SWAP» содержит информацию о текущем использовании оперативной памяти и свапа.
⠀В разделе «Drive» отображается используемый объём диска и скорость чтения/записи выбранных в переменной Drives for IO/s
дисков.
⠀В разделе «Network» содержится:
- Средняя, текущая, максимальная и минимальная скорость скачивания и отдачи;
- Потребление трафика с момента установки на сервер системы и за выбранный период.
Solana
⠀Отключить удаление метрик через 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"
sudo systemctl restart telegraf
⠀Импортировать дашборд (необходимо ввести логин и пароль от 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» содержит графики с информацией:
Massa
⠀Отключить удаление метрик через 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"
sudo systemctl restart telegraf
⠀Импортировать дашборд (необходимо ввести логин и пароль от 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» отображается:
- Текущий цикл;
- Время окончания эпизода;
- Статус ноды:
- Версия ноды;
- Открыты ли порты;
- Включена ли возможность стейкинга для основного кошелька;
- Баланс кошелька;
- Общее количество 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
, а затем изменить пароль на новый и сохранить его в надёжном месте.
Полезные команды
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 — написание статьи