Учёт, отправляемый узлом, вместо учёта, забираемого с узла

HTTP accounting webhooks
Направление меняется, и это меняет многое

В главе 8 об этом две строки со ссылкой на главу учёта, и значимость их несоразмерна длине.

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

Цена — приёмник, который должен быть доступен или должен переносить то поведение при повторах, которое у узла окажется. Глава 8 его не описывает; описание — в § 12.1.1, и договор там простой: повтор до ответа 2xx, накопление на диске узла.

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

Главная ловушка — прочитать эти две строки как «теперь можно без файлов». Файлы остаются: под вебхуком лежит промежуточное хранилище по тому же пути. Меняется, кто инициирует передачу, а не то, попадают ли записи на диск.
Что делает Хаб. Пользуется — и это одно из решений, на которых стоит вся телеметрия парка. Узел шлёт пачки раз в минуту, и о доставках, отказах и жалобах Хаб узнаёт из них, а не опросом узла.

Опрос остаётся для сводок. Раз в сутки модуль «Статистика учёта» запускает на узле по SSH утилиту pmtastats — она считает по CSV-файлам учёта, а файл вебхука ей не годится.

Из этого следует и ограничение: если у Хаба нет публичного адреса, слать некуда, и блок телеметрии не пишется вовсе. Тогда остаётся опрос через управляющий интерфейс — беднее по данным, но работает.

Рекомендуемые значения

Собственных значений у механизма нет: его включает одна строка, http-webhook-url, а всё остальное настраивает подробности отправки.

Что решает Чем
куда слать http-webhook-url
как часто http-webhook-max-interval
как доказать, что это ваш узел http-webhook-extra-headers или http-webhook-certificate
Сама возможность и то, что она дополняет файлы, а не заменяет их, — из руководства (§ 8.6, § 12.1.1). Разбор выигрыша и цены — наш.
Пример в конфигурации
# одна строка меняет направление потока учёта
<acct-file /var/log/pmta/webhook.json>
    records d, b, t
    http-webhook-url https://hub.example.com/api/telemetry/pmta/7    http-webhook-extra-headers /etc/pmta/mtahub-headers.txt
</acct-file>
Файловый блок учёта при этом можно оставить: способы не взаимоисключающие.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается2 ошибки▶

Ждут, что отправка избавит от файлов на узле

§ 12.1.1

Чем чреватоПромежуточное хранилище остаётся, и место под него нужно. Меняется инициатор передачи, а не то, попадают ли записи на диск.
Как заметитьДиск заполняется при «выключенном файловом учёте».
Как правильноПланировать место так же, как для файлового учёта, с запасом на время недоступности приёмника.

Переходят на отправку рывком

наш опыт

Чем чреватоОба способа работают одновременно, и отказ от файлов до сверки лишает возможности проверить, всё ли доходит.
Как заметитьРасхождение в цифрах после перехода, сверить не с чем.
Как правильноДержать оба блока учёта, пока приёмник не обкатан.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у механизма нет — наследуются директивы, которыми он включается. Все они живут внутри <acct-file>, и каждый блок учёта решает за себя.
⇄

Связанные записи

4 связи

Как проверить на узле
Проверка со стороны приёмника: пришла ли хоть одна пачка и что в ней:
tail -f /var/log/nginx/access.log | grep telemetry
Запросы POST с кодом 200 означают, что механизм работает. Их отсутствие при настроенной строке разбирается со стороны узла — http-webhook-log-verbose покажет причину.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Собрать телеметрию