October 6, 2022

Мониторим за нодами с использованием Panic Bot

Всем привет.

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

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!

Создаем папку

mkdir /opt/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

Придумываем любое название и нажимаем Enter.

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

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

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

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

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

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

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

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

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

Настройка Redis

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

  1. Redis host IP: localhost
  2. Redis host port : 6379
  3. Redis password: без пароля

Нажимаем Y и три раза Enter, оставляя все 3 строчки пустыми.

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

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

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

nano ~/.haqqd/config/config.toml

Но можно и ручками конечно же)

В блоке RPC Server Configuration Options есть параметр: laddr, меняем его на:

laddr = "tcp://0.0.0.0:26657"

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

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

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=$USER 
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

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

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

В блоке RPC Server Configuration Options есть параметр: laddr, меняем его на:

laddr = "tcp://0.0.0.0:26657"

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

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

sudo systemctl restart name.service

Name.service меняем на ваш сервис с запуском ноды.

Возвращаемся на сервер с 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

И на этом все ребята, настроить мониторинг бота оказалось намного проще, чем это кажется на первый взгляд.

Всем удачи и пока!