September 19, 2022

Мониторинг состояния валидатора с помощью Zabbix в блокчейне HAQQ IslamicCoin ISLM.

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

Поддержите нашего витнесса Buraq!
Мы запустили тестовую сеть witness в сети IslamicCoin ISLM. Бурак - таинственное животное из Священного Корана. Голосуйте за нашего витнесса, делегируйте токены, и давайте сделаем его главным сетевым валидатором!

https://testnet.manticore.team/haqq/staking/haqqvaloper1cnwjx9r4q6d06jnudhzx9eadx4g8sq8hhw0jk7

Общая информация
Zabbix (https://zabbix.com)- это программное обеспечение с открытым исходным кодом для построения систем мониторинга ИТ-инфраструктуры. Встроенные инструменты с возможностями гибкой настройки позволяют создать набор необходимых параметров, отслеживать их динамику и генерировать оповещения в случае превышения критических границ.

Для простоты понимания работы, будем считать, что у вас уже есть сервер Zabbix и zabbix-agent установлен на сервере узла. Если он еще не доступен, инструкции по установке и настройке можно найти на официальном сайте: https://www.zabbix.com/download.

В этом руководстве используется Zabbix версии 5.2.2. Для других версий Zabbix действия аналогичны.

Статус ноды (узла)

Статус рабочего узла может быть получен с помощью команды:

curl localhost:26657/status

Результатом выполнения команды является блок json:

В полученной информации значения “latest_block_height”, “latest_block_time” и “catching_up” важны для мониторинга. Основная задача - следить за тем, чтобы узел не пропускал блоки и не отставал от сети. Отставание более чем на 50 блоков приводит к попаданию в тюрьму.

Вы можете проверить этап на основе данных, полученных из RPC explorer: https://haqq-t.rpc.manticore.team/status


Настройка zabbix-агента
Настройка синтаксического анализа json с помощью Zabbix будет состоять из следующих шагов:

1. Передаем всю строку json в ее исходном виде элементу в Zabbix.
2. С помощью зависимого элемента получаем отдельные элементы с необходимыми значениями.
3. Используем полученные значения по прямому назначению.

Давайте создадим скрипт для получения статуса узла /etc/zabbix/scripts/valoperstatus.sh с содержанием:

#!/bin/bash
curl localhost:26657/status -s -H "Accept: application/json"

здесь команда curl дополняется параметрами, чтобы ее выходные данные не содержали лишних строк и могли быть проанализированы на сервере Zabbix.

Получение данных в Zabbix строится с использованием указателя пользовательского параметра.

Создаем файл /etc/zabbix/zabbix_agentd.d/haqq.conf со следующим содержимым:

UserParameter=valoperstatus,/etc/zabbix/scripts/valoperstatus.sh

не забудьте присвоить статус исполняемому файлу

chmod +x /etc/zabbix/scripts/valoperstatus.sh

Сохраните и перезапустите zabbix-agent:

systemctl restart zabbix-agent

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

zabbix_agentd -t valoperstatus

На выходе должен быть тот же json. На этом настройка zabbix-agent завершена, теперь мы настроим сервер Zabbix.

Настройка сервера Zabbix
На сервере мы создаем шаблон Haqq Veloper и добавляем к нему элемент Variopedatus с ключом состояния valu operer:

Этот элемент запросит zabbix-agent и получит блок json. Вы можете проверить работу в разделе последние данные:

Записи в форме должны отображаться следующим образом:

Далее нам нужно проанализировать этот блок json, чтобы получить из него нужные нам значения. Создание нового элемента данных с типом “Dependent” (Зависимый элемент) и вызов его latest_block_height:

На вкладке Предварительная обработка создайте правило синтаксического анализа. Выберите JSONPath и параметр
$.result.sync_info.latest_block_height

Проверяем, что начали поступать данные о значении latest_block_height:

Аналогично, мы создаем элемент данных для параметра catching_up:

Проверяем, что теперь сервер Zabbix получает все необходимые параметры от нашего узла:

Следующий шаг - настроить получение значения latest_block_height из RPC explorer. Для этого создается элемент haqq-t.rpc.manticore.team с типом HTTP-агента и URL-адресом https://haqq-t.rpc.manticore.team/status . Установите тип полученных данных в текстовом виде.

Затем, по аналогии, мы создаем зависимый элемент rpc.latest_block_height с предварительной обработкой:

Теперь сервер получает значения latest_block_height как от нашего сервера, так и от RPC explorer. Осталось создать триггеры для уведомления о невыполненной работе и изменении статуса параметра catching_up.

Создайте триггер delta_latest_block_height и введите выражение в разделе "Выражение":

{Haqq Valoper:rpc.latest_block_height.last()}-{Haqq Valoper:latest_block_height.last()}>10

в этой формуле сравниваются значения latest_block_height на сервере и в RPC explorer. Если оно превышает 10, генерируется предупреждение администратора.

Другой триггер проверит изменение статуса catching_up. Давайте вызовем триггер catching_up и зададим формулу:

{Haqq Valoper:catching_up.last()}=”true”

Скриншот триггера catching_up:

На этом создание мониторинга узла завершается с использованием ключей latest_block_height и catching_up. В случае изменения этих параметров администратор получит уведомление и своевременно отреагирует.

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