tools
August 21, 2022

Без паники. Настройка системы уведомлений PANIC.

Никто не станет спорить, что в космосе аптайм первое дело. Сегодня рассмотрим настройку системы мониторинга и уведомлений Panic. В конечном итоге получим дивную систему уведомлений в телеграм о том что нода (космос) офлайн/пропускает блоки/ залетела в тюрьму и т.д.

Процедуру нельзя назвать сильно увлекательной, но в итоге мы получаем довольно мощный инструмент, так что оно стоит потраченного времени. Ставить можно куда угодно, хоть на домашний компьютер, но все-таки предпочтительней vps.

Шаг 0. Докер

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

docker --version
docker compose --version

Если в ответ ничего то ставим докер, подробно расписывать смысла не вижу, приведу просто список команд:

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

После чего опять смотрим версию докера ☝️

Шаг 1. Panic

Клонируем репо и идем туда:

# Clone the panic repository and navigate into it
git clone https://github.com/SimplyVC/panic
cd panic

Вся процедура настройки на этом этапе сводится к тому чтобы указать IP адрес с которого будет производиться дальнейшая настройка через web UI.

Смотрим свой IP, и записываем/запоминаем адрес (понадобится дальше, запомним его как IP)

curl ifconfig.me

после чего вносим изменения в файл .env

UI_ACCESS_IP=1.1.1.1 # здесь пишем свой IP полученный ранее

Сохраняемся и едем дальше.

Шаг 2. Содаем telegram бота

Система предусматривает целый букет уведомлений, включая уведомления в telegram, slack, звонки на телефон через несколько различных сервисов. Остановимся на первом, при желании дальнейшие способы добавляйте сами.

Пожалуй, это самая мудреная часть всего процесса. Чтобы создать бота, добавьте @BotFather в телеграм, нажмите старт и следуйте инструкциям, а именно:

  • Отправьте команду /newbot и укажите необходимые детали, включая название бота и имя пользователя, инструктируют достаточно подробно
  • Запишите токен API который вам выдадут (выглядит как: 111111:AAA-AAA111111-aaaaa11111)
  • @BotFather выдаст ссылку на вашего бота вида t.me/<username>, перейдите по ней и нажмите Start
  • Перейдите по ссылке api.telegram.org/bot<token>/getUpdates, заменив <token> на токен полученный ранее. По ссылке обнаружится ваша переписка с ботом, которая будет состоять из одного сообщения /start, если вдруг там ничего не будет, напишите своему боту еще что-то и обновите страницу.
  • Из этого текста необходимо выудить chat ID. Ищем значение "id" и записываем его.
  • Итого, в результате, у вас должны быть на руках: телеграм бот, API ключ бота и chat ID

Шаг 3. Запускаем

Логинимся на сервер на котором ставили Panic если вышли, переходим в каталог panic если не там и запускаем

docker compose up -d --build

Докер скачает все что надо и сбилдит. Просто наблюдаем и ничего не трогаем до тех пор пока не увидим что процесс завершен и контейнеры запущены. Проблем быть не должно, но если вдруг что-то пошло не по плану, останавливаем через Ctrl+C и перезапускаем процесс билда:

docker-compose kill
docker system prune -a --volumes
docker-compose up -d --build

В конечном итоге должно получиться что-то вроде

Теперь остается последнее, настроить параметры мониторинга.

Шаг 4. Конфигурация ноды

В этом месте, возможно, какие-то моменты покажутся непонятными. Не расстраиваемся, возвращаемся и вдумчиво перечитываем. Как я уже говорил раньше, самые простые вещи сложнее всего объяснять ). Итак.

Вспоминаем имя пользователя и пароль из файла .env + IP полученный на первом шаге (curl ifconfig.me) Переходим в браузере по адресу https://<ваш_ip>:8000 (вас предупредят о небезасности посещения таких мест и оно и понятно, сертификат подписан неизвестно кем, ищем как пройти все-таки по ссылке), и если все было сделано правильно то лицезреем такую картину

Логинимся с теми данными которые писали в .env и попадаем на страницу конфигурирования уведомлений

Опять же заполняем поля данными полученными в шаге 2, и выставляем типы уведомлений (Info, Warning, Critical, Error), после чего проверяем работоспособность кнопкой Test. Если все правильно, видим уведомление подтверждающее этот факт и добавляем конфигурацию кнопкой Add и продолжаем кнопкой Next внизу страницы.

Далее создаем новую конфигурацию космос ноды

Задаем понятное имя и видим страницу конфигурирования ноды, которую, собственно, будем мониторить

Здесь довольно сложно объяснить не скатившись в путаницу. Все уже должны знать это наизусть, но все-таки пройду по значениям портов, IP не обсуждаем (получили еще в шаге 1) :

  • Cosmos Rest Server - по умолчанию порт 1317, смотрим конфиг app.toml (строка 114) либо ss -tulpn, заканчивается на 317
  • Prometheus Endpoint - по умолчанию 26660, смотрим конфиг config.toml (строка 419 ), либо ss -tulpn заканчивается на 660. Включается там же (416 строка prometheus = true)
  • Node Exporter - у меня отсутствует, назначение неизвестно, можно поставить руками, значение тоже добываем сами
  • Tendermint RPC - классический RPC порт, по умолчанию 26657, смотрим config.toml (строка 91, ip = 0.0.0.0 ), либо ss -tulpn, заканчивается на 657
  • Operator Address - valoper адрес валидатора

Все переключатели включены, возле кажого поля кнопка Test, тестируем пока все значения не окажутся верными, иначе алерты не заработают. После того как все установлено, добавляем ноду кнопкой Add Node, включаем/выключаем Monitor Network (о назначении переключателя написано) и идем дальше

на следующей странице настройки монитора гитхаб, уведомения об изменения в произвольном репо (можно пропустить)

Докер хаб (аналогично, можно пропустить)

Выбираем бота в который будут уведомлять, если их несколько можно добавить несколько

Следующая страница с настройками таймингов самая нудная. Именно здесь настраиваются все параметры мониторинга: количество пропущенных блоков прежде начинается паника, через какой промежуток времени валидатор считается недоступным. Параметров довольно много, запаситесь терпением. Многие значения можно оставить по умолчанию, либо если вы понимаете о чем идет речь, настройте самые важные.

В конечном итоге, добираемся до заветной кнопки Done и на этом настройка завершена.

Для проверки работоспособности системы оставливаем ноду и начинаем получать WARN'ы в бота

Читаем уведомления и поздравляем себя с настройкой такого полезного инструмента 🕺💃

Всем спасибо, надеюсь пост не раз спасет вашу ноду от тюрьмы и прочих бед.

P.S. Текст написан за один заход, ошибки неизбежны, пишите мне в ТГ @ryssroad все исправим и разберемся.