Skip to content

Вебхуки и события ​

Панель создаёт событие всякий раз, когда происходит что-то важное: у клиента заканчивается трафик, узел отключился, вход с нового адреса, резервная копия не удалась. Подписчик вебхука — это ваш адрес, который получает запрошенные им события в виде подписанных HTTPS-запросов. Здесь описано, как добавлять подписчиков, проверять, что до них дошло, и задавать пороги оповещений. Страница находится в Сервисы → Вебхуки.

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

Чаты Telegram и адреса почты получают те же события через свои страницы: см. Telegram и Почта. Все события и их поля перечислены в Каталог событий; как устроена шина событий, описано в Шина событий.

Добавление подписчика ​

  1. Добавить.
  2. Название: что это за получатель.
  3. URL: куда панель отправляет каждое событие методом POST.
  4. События: оставьте Все события, чтобы получать каждое событие, включая те, что добавит следующий выпуск, или снимите отметку и выберите сами.
  5. Только события о: оставьте Все или выберите один аккаунт, чтобы получать только касающиеся его события: о пользователях реселлера, о его собственных входах.
  6. Принадлежит: оставьте Без дополнения (ручной вебхук), если только получатель не ваше собственное дополнение, работающее рядом с панелью (см. ниже).
  7. Сохранить.

После этого панель один раз показывает Секрет подписи. Передайте его получателю: по нему тот проверяет, что запрос пришёл от вашей панели.

Отправить тестовое событие в строке сразу отправляет этому подписчику panel.ping и показывает ответ получателя.

Какие адреса разрешены ​

Введённый здесь URL не может указывать на сам хост панели или её частную сеть: loopback, частные диапазоны, link-local и подобные адреса отклоняются при подключении панели. Так вебхук нельзя использовать, чтобы дотянуться до сервисов, которые должны оставаться внутри.

Вебхук, принадлежащий токену дополнения (Принадлежит), может обращаться к этому хосту и его частной сети, например к сети Docker, потому что именно там работает дополнение рядом с панелью. Link-local и адреса метаданных для него тоже закрыты. Принадлежит потом изменить нельзя. Подписанное дополнение регистрирует свой вебхук само; см. Страница дополнений.

Как выглядит доставка ​

Каждое событие — это POST с телом в JSON:

json
{
  "v": 1,
  "id": 4182,
  "event": "node.disconnected",
  "time": 1760180000,
  "data": { "nodeId": 3, "name": "de-1", "status": "error", "message": "connection refused" }
}

и такими заголовками:

ЗаголовокСодержит
X-Nexora-Eventимя события, как в теле
X-Nexora-Deliveryидентификатор этой доставки; одинаковый при каждом повторе
X-Nexora-Signaturet=<unix seconds>,v1=<hex>

Значение v1 — это HMAC-SHA256(secret, "<t>.<body>"): отметка времени, точка, затем сырое тело ровно в том виде, в каком получено. Получатель вычисляет то же значение своим секретом, сравнивает их за постоянное время и отклоняет запрос, чей t отличается от его часов больше чем на пять минут. Полный конверт и разобранный пример есть в Каталог событий.

Ответ 2xx означает доставку. Всё остальное, включая перенаправление, или отсутствие ответа в течение десяти секунд — неудача. Перенаправления не выполняются.

Содержимое событий минимально: идентификаторы, имена и числа, никогда не пароль, ключ или ссылка подписки. Получатель, которому нужно больше, читает это из API с токеном (см. Токены API).

Повторы и серия неудач ​

Неудачная доставка повторяется через 30 секунд, затем каждый раз через вдвое больший интервал, но не реже раза в час, с небольшим случайным разбросом, чтобы вернувшегося получателя не накрыли все повторы сразу. После десяти попыток доставка прекращается со статусом Прекращено. Это примерно три часа.

Доставки одному подписчику идут по одной и по порядку, поэтому получатель видит user.disabled раньше последовавшего за ним user.enabled.

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

Каждая прекращённая доставка учитывается в метриках панели, поэтому оповещение о ней можно настроить снаружи: см. Мониторинг и метрики.

Журнал доставок ​

Доставки в строке показывают, что было отправлено этому подписчику: событие, время, номер попытки, код ответа получателя, ошибку и статус (Ожидает, Доставлено или Прекращено), а для ожидающей доставки — время следующей попытки.

Отправить снова у любой доставки ставит её в очередь ещё раз с новым счётчиком попыток. Её идентификатор X-Nexora-Delivery сохраняется, поэтому получатель, который игнорирует уже виденные идентификаторы, проигнорирует и её.

По умолчанию журнал хранит семь дней. Это меняет настройка event_retention_days (до 90) через nexora-panel config set (см. Командная строка).

Смена секрета ​

Сменить секрет в строке создаёт новый секрет подписи и показывает его один раз. Сначала обновите получателя: старый секрет перестаёт работать со следующей доставкой.

Подписчик с отметкой Без подписи перенесён из единственного адреса вебхука, который был у старых панелей, и не имеет секрета, поэтому его доставки не подписываются. Создайте ему секрет и передайте его получателю.

Оповещения о хостах ​

Карточка Оповещения о хосте задаёт, когда панель создаёт оповещения об узлах:

ПолеПо умолчаниюСоздаёт
Заполнение диска90 %node.disk_high, когда корневая файловая система узла превышает порог, и node.disk_recovered, когда она опускается на пять пунктов ниже
Использование памяти90 %node.memory_high и node.memory_recovered так же
Отклонённых соединений в час100node.rejections_high, когда один узел за скользящий час отклоняет через один блокирующий аутбаунд больше соединений, чем задано

Диск и память считываются с каждого подключённого узла раз в пять минут. Число отклонений сообщает сам узел при каждом heartbeat: он считает соединения, отклонённые через блокирующий аутбаунд, например block-torrent из пресета против торрентов (см. Маршрутизация и DNS). Каждое оповещение создаётся один раз на каждое пересечение порога, а не на каждое измерение или соединение. 0 выключает это оповещение.

Предупреждения по аккаунтам ​

Карточка Предупреждения по аккаунтам задаёт два предупреждения об аккаунтах, которые ещё работают:

ПолеПо умолчаниюСоздаёт
Израсходовано трафика80 %user.quota_warning, когда аккаунт израсходовал эту долю своего трафика
Дней до истечения7,1user.expiring, когда до даты окончания аккаунта остаётся одно из этих значений

Несколько значений разделяются запятыми; отправляется самое срочное из пройденных. Каждое предупреждение звучит один раз и снова взводится само: продление, дополнительный трафик или сброс расхода запускают отсчёт заново. 0 выключает это предупреждение.

Вебхуки дополнений ​

Вебхук, который принадлежит дополнению, показан с меткой Дополнение: имя. Здесь его нельзя изменить или удалить; управляйте им вместе с дополнением на странице Страница дополнений. Включить его снова здесь можно, если его выключила серия неудач.

Текст и изображения — CC BY 4.0.