records

<acct-file>критичноХаб задаёт сам

Какие виды записей попадают в этот файл учёта
в конфигурации это строкаrecords d,bвнутри блока <acct-file>
Что узел вообще расскажет о себе

Учёт — это единственный канал, по которому узел рассказывает, что с письмами произошло. Строка выбирает, о чём именно. Видов восемь, и каждый можно назвать буквой или словом:

Буква Слово О чём запись
d delivery письмо доставлено
b bounce локальный отказ, сгенерированный самим узлом
t transient временная ошибка по одному получателю
tq transient-queue временная ошибка на всю очередь
r receipt письмо принято узлом на отправку
f feedback-loop жалоба, разобранная обработчиком
rb remote-bounce отказ, пришедший письмом от приёмника
rs remote-status отчёт о состоянии от приёмника

Умолчание — d,b, и строка пишется один раз на блок.

Не выбранный вид — это событие, которого для аналитики не случилось. Восстановить его потом нечем: узел его просто не записал. Поэтому набор видов — это, по сути, описание того, что парк вообще способен измерить.

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

t и tq вендор советует держать в отдельном файле. Попыток доставки у одного письма бывает много, и эти записи распухают быстрее прочих, засоряя основной файл.

Главная ловушка — считать, что b покрывает все отказы. Это только синхронные. Жёсткие отказы крупных приёмников часто приходят отдельным письмом через минуты или часы, и без rb их в учёте не будет — а значит, не будет и в вашей статистике доставляемости.
Что делает Хаб. Пишет — и в двух блоках учёта по-разному.

В блоке телеметрии выбраны пять видов: d, b, rb, t, feedback-loop. Асинхронные отказы (rb) и жалобы взяты намеренно: без них доля жёстких отказов и спам-жалоб на панели парка была бы неполной. Не берутся tq, r и rs.

В файловом блоке (/var/log/pmta/acct.csv) — d, b, rb: доставки и оба вида отказов. Его читает модуль «Статистика учёта». Временные отказы и жалобы туда намеренно не пишутся: попытки раздувают файл, у жалоб другой набор колонок, а то и другое и так уходит вебхуком.

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

Набор выбирают по вопросам, на которые надо будет ответить:

Виды Что становится видно
d,b (умолчание) доставка и синхронные отказы
+rb настоящая доля жёстких отказов
+f жалобы на спам
+t,tq почему письма задерживаются — в отдельный файл
+r что вообще подавали на узел

rb и f работают только при настроенных обработчиках — без блока разбора отказов и жалоб записей этих видов не появится.

Восемь видов, их полные имена, умолчание d,b, правило «один раз на блок» и совет выносить t и tq в отдельный файл — из руководства (§ 3.3.11.11). Разбор нашего набора — по коду Хаба.
Пример в конфигурации
# телеметрия парка: доставки, оба вида отказов и жалобы
<acct-file /var/log/pmta/mtahub-webhook.json>
    records d, b, rb, t, feedback-loop    record-fields d  *
</acct-file>

# временные ошибки — отдельным файлом, как советует вендор
<acct-file /var/log/pmta/transient.csv>
    records t, tq
</acct-file>
Во втором блоке те же события пишутся отдельно: попыток доставки у одного письма много, и в общем файле они забивают всё остальное.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Считают вид b полным набором отказов

§ 3.3.11.11

Чем чреватоВ b попадают только отказы, сгенерированные самим узлом. Асинхронные — те, что приёмник присылает письмом позже, — идут видом rb, и без него статистика жёстких отказов занижена.
Как заметитьДоля отказов в учёте заметно ниже, чем показывают панели почтовиков.
Как правильноДобавить rb и настроить обработчик отказов, иначе записей этого вида не появится.

Кладут t и tq в основной файл учёта

§ 3.3.11.11

Чем чреватоПопыток доставки у одного письма много, и записи временных ошибок занимают в файле больше места, чем всё остальное вместе. Разбор основного файла становится медленным.
Как заметитьФайл учёта растёт быстрее, чем объём отправки.
Как правильноВынести t и tq в отдельный блок учёта — прямой совет вендора.

Добавляют вид записей задним числом, чтобы посмотреть прошлое

наш опыт

Чем чреватоНе выбранный вид не писался никуда. Прошлые события восстановить нечем — их просто нет.
Как заметитьПосле правки данные появляются только с этого момента.
Как правильноВыбирать набор с запасом: лишний вид стоит места на диске, а недостающий — невозможности ответить на вопрос.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
records <type-list>
Значения
список через запятую из d, b, t, tq, r, f, rb, rs — или их полных имён
Умолчание
d,b § 3.3.11.11
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<acct-file>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри своего <acct-file> и описывает только его поток. Блоков учёта может быть сколько угодно, и разные виды записей можно развести по разным файлам — именно так вендор советует поступать с t и tq.
Как проверить на узле
Первая колонка каждой записи — её вид; так и проверяют, что попадает в файл:
cut -d, -f1 /var/log/pmta/acct-*.csv | sort | uniq -c
Для файла в формате JSON то же делается по полю type. Отсутствие ожидаемого вида означает либо что он не выбран здесь, либо что нет обработчика, который его порождает, — так бывает с rb, rs и f.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Классификация отказов · Собрать телеметрию
Важность
критично