TenderDuty v2 - monitoring and alerting
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
Tenderduty - это комплексный инструмент мониторинга сетей Tendermint. Подробнее можно ознакомиться здесь
Данный мониторинг TenderDuty v2 позволяет осуществлять контроль за нодами и, в частности, видеть высоту сети, статус валидатора, аптайм, подписанные и пропущенные блоки. Также возможно подключение оповещений в телеграм и дискорд
Установка возможна различными способами, но я буду использовать установку через Docker, хотя нет принципиальной разницы
Итак, нам понадобится отдельный сервер (что однозначно дает плюс безопасности) или сервер с уже установеленной нодой (нодами). Также нужно будет найти открытые RPC или открыть свою на основной (не желательно) или резервной ноде
Подготовка сервера
# обновляем репозитории sudo apt update && sudo apt upgrade -y # устанавливаем необходимые утилиты sudo apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y
File2Ban - подробнее здесь
# устанавливаем и копируем конфиг, который будет иметь больший приоритет apt install fail2ban -y && \ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \ nano /etc/fail2ban/jail.local # раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip> systemctl restart fail2ban # проверяем status systemctl status fail2ban # проверяем, какие jails активны (по умолчанию только sshd) fail2ban-client status # проверяем статистику по sshd fail2ban-client status sshd # смотрим логи tail /var/log/fail2ban.log # останавливаем работу и удаляем с автозагрузки systemctl stop fail2ban && systemctl disable fail2ban
# https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ru apt update && \ apt install apt-transport-https ca-certificates curl software-properties-common -y && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \ apt update && \ apt-cache policy docker-ce && \ sudo apt install docker-ce -y && \ docker --version
Настройка
tmux new-session -s tenderduty mkdir tenderduty && cd tenderduty docker run --rm ghcr.io/blockpane/tenderduty:latest -example-config >config.yml
Теперь можно скачать конфиг с русским языком и отредактировать его
wget -O $HOME/tenderduty/config.yml "https://raw.githubusercontent.com/lesnikutsa/lesnik_utsa/main/monitoring/TenderDuty(ru)/config.yml" nano $HOME/tenderduty/config.yml
Для простого мониторинга без оповещений достаточно изменить в конфиге:
--- # определяет, включена ли панель мониторинга enable_dashboard: yes # Какой TCP-порт будет прослушивать панель мониторинга listen_port: 8888 # hide_log полезен, если панель мониторинга будет опубликована публично. Он отключает канал журнала, # и скрывает большинство деталей, связанных с узлом. Имейте в виду, что это не полностью проверено на предмет предотвращения # утечки информации об именах узлов и т.д. hide_logs: no # Сколько времени нужно подождать, прежде чем оповестить о том, что узел не работает node_down_alert_minutes: 3 # Должен ли быть включен экспортер prometheus? prometheus_enabled: yes # Какой порт он должен прослушивать? prometheus_listen_port: 28686 # Глобальная настройка pagerduty: # Должны ли мы использовать PD? Имейте в виду, что если для этого параметра установлено значение no, это переопределяет отдельные настройки оповещения цепочки. enabled: no # Это ключ API, а не токен oauth, более подробная информация приведена ниже, но для получения дополнительной информации ознакомьтесь с документами v1. api_key: aaaaaaaaaaaabbbbbbbbbbbbbcccccccccccc # В настоящее время не используется, но скоро будет использоваться. Это позволяет устанавливать приоритеты эскалации и т.д. default_severity: alert # Настройки Discord discord: # Оповещения в discord? enabled: no # Webhook настраивается щелчком правой кнопки мыши на канале, редактированием настроек и настройкой webhook в разделе интеграции. webhook: https://discord.com/api/webhooks/999999999999999999/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz # Настройки Telegram telegram: # Оповещение в Telegram? Примечание: также заменяет настройки, относящиеся к конкретной сети enabled: no # Ключ API ... поговорите с @BotFather api_key: '5555555555:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # ID группы чата, в который будут отправляться сообщения channel: "-666666666" # Различные цепочки, подлежащие мониторингу. Создайте новую запись для каждой сети chains: # Удобное для пользователя имя, которое будет использоваться для меток. Настоятельно рекомендую заключить в кавычки "aura": # chain_id проверяется на соответствие при подключении к конечной точке RPC, также используется в качестве метки в нескольких местах chain_id: euphoria-1 # Ура, в версии v2 мы выводим valcons из запросов abci, так что вам не придется прыгать через обручи, чтобы выяснить, как преобразовывать ключи ed25519 в соответствующий адрес bech32 valoper_address: auravaloper10... # Должен ли мониторинг вернуться к использованию общедоступных конечных точек API, если все предоставленные узлы RCP выйдут из строя? # Это не всегда надежно, не все общедоступные узлы имеют правильную настройку прокси-сервера websocket. public_fallback: yes # Управляет различными настройками оповещений для каждой сети alerts: # Если сеть перестает видеть новые блоки, следует ли отправлять предупреждение? stalled_enabled: yes # Сколько времени требуется остановленной сети в минутах, чтобы сгенерировать сигнал тревоги stalled_minutes: 10 # Самый простой сигнал тревоги, вы только что пропустили x блоков... хотели бы вы знать? consecutive_enabled: yes # Сколько пропущенных блоков должно вызвать уведомление consecutive_missed: 5 # НЕ ИСПОЛЬЗУЕТСЯ: будущая подсказка для маршрутизации pagerduty consecutive_priority: critical # Для каждой сети существует определенное окно блоков и процент пропущенных блоков, которые приведут к тюрьме # Следует ли отправлять предупреждение, если превышен определенный процент этого окна? percentage_enabled: no # Какой процент должен вызвать оповещение percentage_missed: 10 # Еще не используется, подсказка о маршрутизации pagerduty percentage_priority: warning # Должно ли быть отправлено предупреждение, если валидатор не находится в активном наборе, т.е. заключен в тюрьму, tombstoned, не привязан? alert_if_inactive: yes # Следует ли отправлять предупреждение, если ни один RPC-сервер не отвечает? (Обратите внимание, что этот сигнал тревоги подается мгновенно без задержки) alert_if_no_servers: yes # для этой *конкретной* сети можно переопределить настройки оповещений. Если адреса api_key или webhook пусты, # то будут использоваться глобальные настройки. Обратите внимание, что включено должно быть установлено как глобально, так и для каждой цепочки # Настройка для конкретной цепочки для pagerduty pagerduty: enabled: yes api_key: "" # используется по умолчанию, если пусто # Настройки Discord discord: enabled: yes webhook: "" # используется по умолчанию, если пусто # Настройки Telegram telegram: enabled: yes api_key: "" # используется по умолчанию, если пусто channel: "" # используется по умолчанию, если пусто # В этом разделе рассматриваются наши поставщики RPC. Конечные точки LCD (они же REST) не используются, только конечные точки RPC # Рекомендуется использовать несколько хостов, и они будут опробованы последовательно, пока не будет обнаружена рабочая RPC nodes: # URL-адрес конечной точки. Должен включать protocol://hostname:port - url: https://snapshot-1.euphoria.aura.network:443 # Должны ли мы отправить предупреждение, если этот хост не отвечает? alert_if_down: yes # повторные хосты для контроля избыточности # - url: # alert_if_down: no # - url: # alert_if_down: no ################################################################################ # Далее можно добавить вторую и последующие сети... Раскомментируйте и измените# ################################################################################ #chains: # "L1": # chain_id: genesis_29-2 # valoper_address: genesisvaloper1... # public_fallback: yes # alerts: # stalled_enabled: yes # stalled_minutes: 10 # consecutive_enabled: yes # consecutive_missed: 5 # consecutive_priority: critical # percentage_enabled: no # percentage_missed: 10 # percentage_priority: warning # alert_if_inactive: yes # alert_if_no_servers: yes # pagerduty: # enabled: yes # api_key: "" # используется по умолчанию, если пусто # discord: # enabled: yes # webhook: "" # используется по умолчанию, если пусто # telegram: # enabled: yes # api_key: "" # используется по умолчанию, если пусто # channel: "" # используется по умолчанию, если пусто # nodes: # - url: # alert_if_down: yes # - url: # alert_if_down: no # - url: # alert_if_down: no # - url: # alert_if_down: no
После настройки конфига запускаем
docker run -d --name tenderduty -p "8888:8888" -p "28686:28686" --restart unless-stopped -v $(pwd)/config.yml:/var/lib/tenderduty/config.yml ghcr.io/blockpane/tenderduty:latest # смотрим логи docker logs -f --tail 20 tenderduty
Теперь самое время проверить информацию в браузере
# узнаем адрес и вставляем в браузер echo -e "\033[0;32mhttp://$(wget -qO- eth0.me):8888/\033[0m" # http://108.108.108.108:8888/
Настройка Discord
Довольно просто включить оповещение для дискорда. Для этого необходимо выполнить всего несколько действий
После всех этих манипуляций перезагружаем мониторинг и алармы будут приходить в дискорд!
Пока на этом все. Добавление алармов в телеграм возможно допишу позднее. Но дискорд с каждым днем становиться все удобнее и практичнее
Настройка Telegram
Telegram настроить немного дольше, но в целом также не очень сложно. Нам будет необходимо создать своего бота и узнать ID своего telegram или ID необходимой нам группы в telegram
- Создаем своего бота. Для этого пишем боту @BotFather и вводим команду
/newbot
- далее вводим имя бота - далее username (должно заканчиваться на bot). Бот выдаст token API, который надежно сохраняем и никому не показываем
- Узнаем свой ID или ID группы (для этого добавляем бота в группу). Для того, чтобы узнать свой ID пишем боту @JsonViewBot и отправляем ему любое сообщение
- Теперь самое время добавить ID и token API в наш конфиг, после чего перезагружаем мониторинг и радуемся
Полезные команды
# посмотреть установленные образы docker images # посмотрнть запущенные контейнеры docker ps # остановить контейнер docker stop tenderduty # перезапустить контейнер docker restart tenderduty # посмотреть логи docker logs -f --tail 20 tenderduty
# узнать RPC ноды для конфига NODE_FOLDER=".genesisd" echo -e "\033[0;32mhttp://$(wget -qO- eth0.me)$(grep -A 3 "\[rpc\]" ~/$NODE_FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m"