Настройка мониторинга ноды с использованием Panic Bot
В один прекрасный момент количество установленных нод превысит допустимый предел и ежедневная проверка работоспособности превратится в рутину, от которой вам захочется избавиться. За почти два года нодоводства, я перепробовал ряд инструментов, из которых Panic Bot от Simply VS оказался наиболее удобным в использовании.
В данном гайде я постараюсь подробно описать процесс установки и настройки бота для следующих ситуаций: пропущенные блоки, изменение voting power, попадание в тюрьму, потеря синхронизации и критическое заполнение места на сервере.
В данном гайде я буду использовать универсальное решение для мониторинга нескольких нод одновременно, поэтому буду устанавливать бота на отдельном сервере. Если вам необходим мониторинг только одной ноды, все действия можно выполнить на сервере с этой нодой и использовать примечания в фиолетовых рамках.
Оглавление
- Подготовка сервера
- Установка Panic!
- Настройка телеграм бота
- Настройка Redis
- Подключение ноды к мониторингу
- Запуск Panic!
- Добавление других нод для мониторинга
- Изменение настроек
Подготовка сервера
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!
Далее Panic! спросит необходимы ли другие оповещения (e-mail, телефонные звонки или периодические оповещения). Так как мы настраиваем только телеграм бота, на три запроса отвечаем n
Настраиваем команды для телеграм бота
Настройка Redis
Для настройки Redis будем использовать значения по умолчанию:
Тестируем работу 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