Запись разговора ровно на время разбора

Включить, ответить на вопрос, выключить

Задача. Один получатель или один источник подачи ведёт себя неровно, и поломку надо наблюдать во времени, а не поймать одной попыткой. Запись обязана быть узкой, чтобы не залить журнал, и сниматься, как только ответ получен.

Из чего складывается:

  • log-connections — начало и конец каждого соединения;
  • log-commands — полный обмен командами и ответами;
  • log-data — каждый байт в тексте и шестнадцатеричном виде.

Области у составляющих разные. Директивы описаны у источника, но пишутся и в блоке получателя: исходящая запись — в <domain> получателя, входящая — в <source> адреса подающей программы. Узость блока и держит объём.

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

Главная ловушка — написать запись шире вопроса. log-commands в <domain *> или <source 0/0> пишет разговор каждого соединения узла: журнал растёт на глазах, а нужный сеанс в нём не найти.
Что делает Хаб. Не применяет: журналы соединений, команд и данных в общем источнике 0/0 Хаб выключает явно — log-connections no, log-commands no, log-data no, — а узких блоков следа не пишет.
Рекомендуемые значения

Три ступени:

Строка Что пишет Когда включать
log-connections начало и конец соединения вместе со следующей
log-commands команды и ответы первый шаг разбора связи
log-data байты в тексте и шестнадцатеричном виде только при подозрении на переводы строк или непечатные символы
Ступени записи, их смысл и примеры блоков — из руководства (§ 3.3.7.64–3.3.7.66, § 4.2.2, § 4.2.4). Сама схема — наша гипотеза.
Пример в конфигурации
<domain outlook.com>
    log-connections yes
    log-commands yes</domain>
Пример руководства для наблюдения за одним получателем; блок убирают, как только причина найдена.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Проверить, что запись включена только там, где нужно:
grep -rn -B3 'log-commands yes\|log-data yes' /etc/pmta/
Строка внутри <domain *> или <source 0/0> — запись на весь узел.