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"