Education
October 3, 2022

Настройка мониторинга ноды с использованием Panic Bot

В один прекрасный момент количество установленных нод превысит допустимый предел и ежедневная проверка работоспособности превратится в рутину, от которой вам захочется избавиться. За почти два года нодоводства, я перепробовал ряд инструментов, из которых Panic Bot от Simply VS оказался наиболее удобным в использовании.

В данном гайде я постараюсь подробно описать процесс установки и настройки бота для следующих ситуаций: пропущенные блоки, изменение voting power, попадание в тюрьму, потеря синхронизации и критическое заполнение места на сервере.

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


Оглавление


Подготовка сервера

Оглавление

Panic! не использует много ресурсов, поэтому можно установить на самый простой сервер, например Hetzner - CPX11

Обновляем пакеты

sudo apt update && sudo apt upgrade -y

Проверяем наличие Python3 на вашем сервере. В большинстве дистрибутивов Python предустановлен изначально

python3 --version

Устанавливаем PIP Package Manager и Redis Database Server

sudo apt-get install python3-pip redis-server -y

Устанавливаем Pipenv Packaging Tool

sudo pip3 install pipenv
sudo systemctl enable redis-server.service

Установка Panic!

Оглавление

Создаем нового пользователя для использования Panic!

adduser panic --disabled-login
#Нажать 5 раз Enter, после - y

Создаем папку и изменяем права доступа

mkdir /opt/panic
chown -R panic:panic /opt/panic
su panic

Переходим в папку и клонируем репозиторий

cd /opt/panic/
git clone https://github.com/SimplyVC/panic_cosmos.git
cd panic_cosmos
git checkout master

Обновляем пакеты и запускаем настройку Panic!

pipenv update
pipenv run python run_setup.py

Вводим уникальный идентификатор для оповещений. Например свой моникер


Настройка телеграм бота

Оглавление

Настраиваем оповещения в телеграм, нажав Y

Далее нам необходимо ввести API token. Для его получения выполняем следующие действия:

  • Заходим в телеграм
  • В поиске вводим @BotFather, переходим в бота и нажимаем Start
  • Используем команду /newbot для создания бота, вводим название бота и юзернейм. Юзернейм должен заканчивать на bot (например tRDM_bot). После этого BotFather отправит сообщение с ссылкой на нашего бота и API токеном. Копируем API токен и сохраняем в блокнот
  • Переходим по ссылке в чат своего бота и нажимаем Start
  • Переходим по ссылке api.telegram.org/bot<token>/getUpdates, заменяя <token> на API токен вашего бота из предыдущего шага. Копируем id и сохраняем в блокнот

Теперь, когда у нас есть бот, API токен и чат ID, возвращаемся в терминал и продолжаем настройку Panic!

  • Вставляем API токен и нажимаем Enter
  • Вставляем чат ID и нажимаем Enter
  • Нажимаем Y для проверки оповещений. Заходим в телеграм и проверяем оповещение. При успешной настройке, появится сообщение - Test Alert
  • Нажимаем еще раз Y, подтверждая что оповещение пришло

Далее Panic! спросит необходимы ли другие оповещения (e-mail, телефонные звонки или периодические оповещения). Так как мы настраиваем только телеграм бота, на три запроса отвечаем n

Настраиваем команды для телеграм бота

  • Нажимаем Y
  • Вставляем API токен и нажимаем Enter
  • Вставляем чат ID и нажимаем Enter
  • Нажимаем Y для теста команд бота
  • Переходим в телеграм бота и вводим команду /ping Успешный ответ - PONG!
  • Нажимаем еще раз Y, подтверждая что команда успешно выполнена

Настройка Redis

Оглавление

Для настройки Redis будем использовать значения по умолчанию:

  • Redis host IP: localhost
  • Redis host port : 6379
  • Redis password: без пароля

Нажимаем Y и три раза Enter

Тестируем работу Redis, нажимая Y


Подключение ноды к мониторингу

Оглавление

Переходим на сервер с нодой, которую хотим подключить к боту и вносим изменения в конфиг файл. Для примера буду использовать ноду Haqq. Для поключения к другим нодам используйте свой путь к конфиг файлу (обычно - $HOME/.название_проекта/config/config.toml)

nano ~/.haqqd/config/config.toml

В блоке TCP or UNIX socket address for the RPC server to listen on, меняем значение laddr

laddr = "tcp://0.0.0.0:26657"

Сохраняем изменения сочетанием клавиш: Ctrl + X > Y > Enter

Если Panic! и Redis установлены наодном сервере с нодой, то оставляембез изменений

laddr = "tcp://127.0.0.1:26657"

Перезагружаем ноду

sudo systemctl restart haqq

Вносим данные изменения в конфиг файлы всех нод, которые хотим мониторить

Возвращаемся на сервер с Panic!

Вводим название ноды и RPC url в формате http://NODE_IP:26657, подтверждаем, что нода является валидатором. Также, можно сразу добавить другие ноды, но мы сделаем это позже.

Также, пропускаем настройку Github обновлений. Сделаем это чуть позже.


Запуск Panic!

Оглавление

Создаем сервисный файл

printf "[Unit]
Description=P.A.N.I.C.
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
User=panic
TimeoutStopSec=90s
WorkingDirectory=/opt/panic/panic_cosmos
ExecStart=/usr/local/bin/pipenv run python /opt/panic/panic_cosmos/run_alerter.py

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/panic.service

Запускаем сервис и проверяем логи

sudo systemctl daemon-reload
sudo systemctl enable panic
sudo systemctl start panic
sudo journalctl -u panic -f

Добавление нод для мониторинга

Оглавление

На сервере с нодой, которую хотим подключить к боту вносим изменения в конфиг файл.

nano ~/.название_ноды/config/config.toml
#либо другой путь к файлу config.toml

В блоке TCP or UNIX socket address for the RPC server to listen on, меняем значение laddr

laddr = "tcp://0.0.0.0:26657"

Сохраняем изменения сочетанием клавиш: Ctrl + X > Y > Enter

Перезагружаем ноду

sudo systemctl restart haqq

Возращаемся на сервер с Panic! Редактируем файл user_config_nodes.ini

nano /opt/panic/panic_cosmos/config/user_config_nodes.ini

Копируем все имеющиеся строки и вставляем ниже. Изменяем номер, имя и url. Сохраняем изменения.

Перезагружаем паник бота

sudo systemctl restart panic
sudo journalctl -u panic -f

Смотрим, чтобы в логах появилась вторая нода

Повторяем процедуру для всех остальных нод, которые держите

Для дополнительной проверки можете выключить на пару секунд ноду (с этим аккуратнее, делайте, если уверены, что найдете после пиры или не улетите в джейл))

Бот отреагирует следующим образом


Изменение настроек

Оглавление

Для изменения настроек бота (API токен, пароль Redis и пр.), а также включения оповещений на e-mail, редактируем файл user_config_main.ini

nano /opt/panic/panic_cosmos/config/user_config_main.ini

Для настройки оповещений об изменении github репозиториев, редактируем файл user_config_repos.in

nano /opt/panic/panic_cosmos/config/user_config_repos.in

Nodera

Telegram | Discord | Twitter