queue-filter

<acct-file>

Отбор записей учёта по имени очереди
в конфигурации это строкаqueue-filter off — records for all queues are writtenвнутри блока <acct-file>
Самая опасная строка блока

Строка отбирает записи по полю очереди: совпало с неотрицаемым именем — запись пишется, совпало с отрицаемым (с ! впереди) — не пишется. По умолчанию отбора нет, пишутся все.

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

Отбор действует не на все виды записей. Поле очереди есть только у d, b, t и tq; жалобы, отказы письмом и приёмы (f, rb, rs, r) пишутся безусловно, все.

Разбор идёт по порядку, в котором имена перечислены, — как в списке доступа: побеждает первое совпадение.

Имя очереди должно быть синтаксически правильным. Домен — полный, не зарезервированный (то есть не {feedbackLoop} и не {bounceProcessor}); адрес отправки, если указан, — синтаксически верное имя или {default}. Существует ли такой адрес отправки на самом деле, MTA не проверяет. Имя без адреса отправки означает {default}: foo.com читается как foo.com/{default}.

Если все имена отрицаемые, не пройдёт ни одна запись.

Главная ловушка — забыть, что имя без адреса отправки означает {default}. Строка queue-filter foo.com пропустит только записи очереди foo.com/{default} — а трафик, идущий через именованные адреса отправки, отфильтруется и пропадёт. Писать надо foo.com/*.
Что делает Хаб. Не пишет — и это правильный выбор для парка. Телеметрия должна видеть все очереди; отбор в источнике означал бы слепые зоны, о которых панель не знает.

Если такая задача когда-нибудь появится (например, отдавать клиенту учёт только по его доменам), делать её надо вторым блоком учёта, а не отбором в основном: тогда полный поток сохраняется.

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

Перед отбором стоит завести второй блок без него:

Запись Что означает
foo.com только foo.com/{default} — почти всегда не то, что имели в виду
foo.com/* все адреса отправки этого домена
!*/vmta3 всё, кроме этого адреса отправки
[*.]b.com/* домен и его поддомены

🔴 Отфильтрованное не восстановить. Проверять строку надо до применения, а не после.

Правило отбора, порядок разбора, невозвратность отфильтрованного, безусловная запись видов f, rb, rs и r и подстановка имени адреса отправки по умолчанию — из руководства (§ 3.3.11.5). Совет заводить второй блок вместо отбора в основном — наш.
Пример в конфигурации
# отбор в основном потоке опасен — заводим отдельный блок для клиента
<acct-file /var/log/pmta/acct.csv>
    records d, b, t
</acct-file>

<acct-file /var/log/pmta/client-a.csv>
    records d, b
    queue-filter [*.]client-a.com/*</acct-file>
Первый блок пишет всё, второй — только нужное клиенту. Так отбор никого не лишает данных.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Пишут имя домена без адреса отправки

§ 3.3.11.5

Чем чреватоИмя без адреса отправки читается как домен/{default}. Записи очередей с именованными адресами отправки отфильтровываются и теряются навсегда.
Как заметитьВ файле есть записи только части трафика по этому домену.
Как правильноПисать домен/*, если нужны все адреса отправки.

Ставят отбор в единственном блоке учёта

§ 3.3.11.5

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

Ждут, что отбор сузит и жалобы с отказами письмом

§ 3.3.11.5

Чем чреватоУ видов f, rb, rs и r поля очереди нет, и они пишутся безусловно. Файл окажется больше, чем ожидалось.
Как заметитьОтбор задан узко, а в файле полно записей других видов.
Как правильноСужать их набором видов в records, а не отбором по очереди.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
queue-filter <queue-list>
Значения
имена очередей через запятую, каждое можно предварить восклицательным знаком
Умолчание
off — records for all queues are written § 3.3.11.5
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<acct-file>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри своего <acct-file> и сужает только его поток. Именно поэтому отбор безопасен во втором блоке и опасен в единственном.
Как проверить на узле
Проверять надо тем, что отбор пропускает: считаем записи по очередям в получившемся файле:
cut -d, -f1,4 /var/log/pmta/client-a.csv | sort | uniq -c | head
Номер колонки очереди зависит от набора полей — сверьте с заголовком файла. Пустой результат при идущем трафике означает, что отбор слишком узок; напомним, что имя без адреса отправки означает {default}.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Собрать телеметрию · Разделение отправителей