Сервис базового мониторинга сетей блокчейна WAVES (mainnet, stagenet, testnet). Сервис хранит все данные в оперативной памяти не имеет постоянного хранилища, вследствие чего после перезапуска сервис теряет все накопленные статистики и оценки.
Далее будут описаны параметры, которые можно передать исполняемому файлу при запуске для изменения его поведения по умолчанию. Также, с помощью переменных окружения можно переопределять параметры по умолчанию.
Базовые настройки:
- --log-level - уровень логирования. Поддерживаемые уровни: DEV, DEBUG, INFO, WARN, ERROR, FATAL. По умолчанию INFO. Переменная окружения: LOG_LEVEL.
- --bind-addr - IP адрес и порт, на котором будет запущен сервис. По умолчанию 0.0.0.0:2048. Переменная окружения: BIND_ADDR.
- --network-scheme - байт сети WAVES, за которой будет наблюдать сервис. Поддерживаемые сети: W (mainnet), T (testnet), S (stagenet), E (custom). По умолчанию W. Переменная окружения: NETWORK_SCHEME.
- --stats-url - URL, с которого будет собираться статистика по узлам сети. По умолчанию https://waves-nodes-get-height.wavesnodes.com/. Переменная окружения: STATS_URL.
- --stats-poll-interval - интервал сбора, через который будет собираться статистика по узлам сети и обновляться статистики. По умолчанию 1m. Переменная окружения: STATS_POLL_INTERVAL.
- --max-poll-response-size - максимальный размер ответа в байтах по URL сбора статистик. По умолчанию: 131072. Переменная окружения: MAX_POLL_RESPONSE_SIZE.
- --stats-history-size - количество последних хранимых снимков статистик. Должен быть больше 0. По умолчанию 10. Переменная окружения: STATS_HISTORY_SIZE.
- --network-errors-streak - число последовательных ошибок, после будет считаться, что сеть находится в деградированном состоянии. По умолчанию 5. Переменная окружения: NETWORK_ERRORS_STREAK.
- --initial-mon-state - состояние мониторинга при старте. Возможные значения: active, frozen_operates_stable, frozen_degraded. По умолчанию active. Переменная окружения: INITIAL_MON_STATE.
- --http-auth-header - HTTP заголовок, в котором будет проверяться наличие токена для доступа к приватным URL. По умолчанию X-Waves-Monitor-Auth. Переменная окружения: HTTP_AUTH_HEADER.
- --http-auth-token - токен доступа к приватным URL. ОБЯЗАТЕЛЬНЫЙ параметр. Значение по умолчанию отсутствует. Переменная окружения: HTTP_AUTH_TOKEN.
Далее будут описаны опции (критерии), которые непосредственно влияют на мониторинг ошибок. Состояние сети будет оцениваться по серии последовательных ошибок, которые генерирует сервис. При генерации ошибки будет увеличиваться счётчик последовательных ошибок, однако если после серии ошибок произойдёт сбор статистик и их оценка, в результате которой ошибка не будет сгенерирована, то счётчик последовательности ошибок сбросится.
- --criterion-down-total-part - пороговое значение при достижении которого будет генерироваться ошибка. Считается как отношение недоступных узлов ко всем отслеживаемым узлам. Диапазон значений: от 0.0 не включительно до 1.0 включительно. По умолчанию 0.3. Переменная окружения: CRITERION_DOWN_TOTAL_PART.
- --criterion-height-diff - разница высот узлов сети при достижении которой будет генерироваться ошибка. По умолчанию 10 блоков. Переменная окружения: CRITERION_HEIGHT_DIFF.
- --criterion-height-require-min-nodes-on-same-height - необходимое количество узлов сети, которые находятся на одной высоте. По умолчанию 2 узла. Переменная окружения: CRITERION_HEIGHT_REQUIRE_MIN_NODES_ON_SAME_HEIGHT.
Здесь под группой понимается группа узлов сети на одной высоте, узлы которой имеют одинаковые стейтхеши.
- --criterion-statehash-min-groups-on-same-height - минимальное количество групп узлов сети с разными стейтхешами на одной высоте. По умолчанию 2 группы. Переменная окружения: CRITERION_STATEHASH_MIN_GROUPS_ON_SAME_HEIGHT.
- --criterion-statehash-min-valuable-groups - минимальное значение значащих групп узлов на одной высоте. По умолчанию 2 группы. Переменная окружения: CRITERION_STATEHASH_MIN_VALUABLE_GROUPS.
- --criterion-statehash-min-nodes-in-valuable-group - минимальное количество узлов сети в группе. Если группа узлов с одинаковыми стейтхешами имеет данное и более количество узлов, то она считается значащей. По умолчанию 2 узла. Переменная окружения: CRITERION_STATEHASH_MIN_NODES_IN_VALUABLE_GROUP.
- --criterion-statehash-require-min-nodes-on-same-height - необходимое количество узлов сети, которые находятся на одной высоте. По умолчанию 4 узла. Переменная окружения: CRITERION_STATEHASH_REQUIRE_MIN_NODES_ON_SAME_HEIGHT.
-
GET /health - возвращает байт отслеживаемой сети, текущее состояние сети, максимальную высоту и время последнего обновления статистик. Если высоту не удалось получить хотя бы с одного узла, который участвует в мониторинге, то вместо высоты будет отдано -1.
- Возможные HTTP коды ответа:
- 200 OK
- 405 Method Not Allowed
- 500 Internal Server Error
- Возвращаемый результат:
{"updated":"2021-12-02T19:35:24.144994Z","network":"W","status":true,"height":2882018}
- сеть в порядке{"updated":"2021-12-02T19:35:24.144994Z","network":"W","status":false,"height":2882018}
- сеть в деградированном состоянии, но если хотя бы один узел доступен{"updated":"2021-12-02T19:35:24.144994Z","network":"W","status":false,"height":-1}
- сеть в деградированном состоянии и все узлы недоступны
- Пример запроса:
curl http://localhost:2048/health
- Возможные HTTP коды ответа:
-
POST /state - устанавливает состояние мониторинга. В случае, если новое состояние отличается от старого, то установка нового состояния сбрасывает счётчик последовательности ошибок.
- Возможные HTTP коды ответа:
- 200 OK
- 400 Bad Request
- 403 Forbidden
- 405 Method Not Allowed
- 500 Internal Server Error
- Возвращаемый результат: отсутствует
- Возможные значения тела запроса:
{"state":"active"}
- установка мониторинга в обычный (активный) режим работы{"state":"frozen_operates_stable"}
- установка мониторинга в режим, при котором он всегда будет отвечать на запрос GET /health ответом{"status":true}
{"state":"frozen_degraded"}
- установка мониторинга в режим, при котором он всегда будет отвечать на запрос GET /health ответом{"status":false}
- Пример
запроса:
curl -X POST -H "Content-Type: application/json" -d '{"state":"active"}' http://localhost:2048/state
- Возможные HTTP коды ответа:
Требования: на машине должны быть установлены утилита Make
, компилятор и стандартная библиотека языка Go
. Собрать
исполняемый файл можно командой make build
. Исполняемый файл после сборки будет внутри директории build
.
Сборка проекта происходит при значении переменной окружения CGO_ENABLED=0
, соответственно исполняемый файл сервиса не
требует динамически подключаемых библиотек и содержит в себе все необходимые зависимости для работы.
Сервис мониторинга внутри контейнер запускается от имени пользователя netmon. Часовая зона внутри контейнера установлена в значение Etc/UTC.
Аргументы мониторинга можно пробросить внутрь контейнера просто добавив эти аргументы в конец команды запуска контейнера. Пример:
$ docker build -t netmon -f Dockerfile . # build container
$ docker run --rm -ti --name netmon -p 2048:2048 netmon --http-auth-token="your-token" # run and pass CLI arguments