Состав полей — обещание, а не настройка на глазок
Задача. Любой узел парка. Поток учёта обязан нести то, что разбирает приёмник Хаба, пережить падение MTA и не стать самым большим хранилищем персональных данных в парке.
Из чего складывается:
- records — виды записей, в том числе tq для сбоев прокси;
- record-fields — поля, которых ждёт приёмник;
- iso-times — формат отметок времени, на который рассчитан разбор;
- sync — сброс буферов, чтобы падение не унесло последние записи;
- user-string — признак происхождения в каждой записи, вместе с полем userString.
Области у составляющих разные. Все пять живут в одном блоке <acct-file>.
Как они взаимодействуют. Три из пяти при ошибке молчат: неназванное поле просто отсутствует, строка без поля userString не даёт ничего, а выключенный sync даёт полные данные до того единственного раза, когда не даст. Поэтому все пять стоит назвать прямо.
Главная ловушка — user-string без поля. Строка задаёт текст, но в запись он попадает, только если userString перечислено в record-fields: без поля признак узла молча не пишется.
Что делает Хаб. Применяет частично. Поток учёта для вебхука собран под разбор Хаба: виды d, b, rb, t и жалобы; у доставок и отказов к звёздочке добавлены timeFirstAttempt, totalSecondsQueued и numRetries, у жалоб — заголовок Feedback-ID. Остальных составляющих нет: записей tq в потоке нет, формат времени не назван — действует умолчание ISO, сброс буферов и признак происхождения не заданы — узел Хаб узнаёт по адресу вебхука.
Рекомендуемые значения
Пять строк:
| Строка |
Умолчание |
Что задать |
| records |
d,b |
все виды, которые разбирает приёмник |
| record-fields |
* — поля по умолчанию |
звёздочка плюс нужные вне её |
| iso-times |
yes |
yes, названное явно |
| sync |
false |
true на узлах без резервных копий |
| user-string |
нет |
имя узла и userString в полях |
Строки и умолчания — из руководства (§ 3.3.11.7–3.3.11.8, § 3.3.11.11–3.3.11.12, § 3.3.11.15). Сама схема — наша гипотеза.
Пример в конфигурации
<acct-file /var/log/pmta/acct.csv>
records d, b, rb, t
record-fields d *, userString, timeFirstAttempt, numRetries
iso-times yes
sync true user-string node-7
</acct-file>
userString добавлено к звёздочке, иначе строка user-string ничего не даст.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.