GlobalХаб задаёт сам
Строка заставляет MTA запоминать, когда он впервые попытался доставить письмо. Попыткой считается любой исход: доставка, отказ, временная ошибка получателя или очереди. Умолчание — false.
🔴 Это не запись события, а включение подсчёта. Пока строка выключена, величины не существует: её не восстановить ни из учёта, ни из журнала. Всё, что можно сделать задним числом, — включить и ждать новых писем.
Открывается сразу двумя способами. Значение появляется в записях учёта видов d, b и t — то есть его надо ещё перечислить в record-fields (при наборе * попадает само). И оно же становится метрикой pmta_smtp_first_attempt_seconds, если настроен <prometheus-listener>.
Что эта величина означает на самом деле. Не время доставки, а задержку между приёмом письма и первым действием с ним. Это прямая мера того, успевает ли узел разгребать очередь: растёт она — значит письма ждут, и растёт она раньше, чем портится доставляемость.
Цена названа вендором: заметное влияние на обращения к диску, особенно когда много попыток кончается временными ошибками. То есть дороже всего она стоит ровно в тот момент, когда полезнее всего.
К полям доставок и отказов Хаб явно добавляет timeFirstAttempt, totalSecondsQueued и numRetries — в звёздочку они не входят. По ним телеметрия считает время доставки без очереди, а «Статистика учёта» — куда уходит время внутри доставки. Цена — обращения к диску, и она выше как раз на проблемном узле: руководство называет рост дисковых операций при большом числе временных отказов.
Решение простое, но с ценой:
| Значение | Когда |
|---|---|
| false (умолчание) | всегда, пока величина не нужна |
| true | нужна задержка приёма-отправки в учёте или в метриках |
Рядом две строки, работающие только при включённой этой: time-first-attempt-hires-timestamp — миллисекунды в записи учёта, и time-first-attempt-domains-file — разбивка метрики по приёмникам.
# величина появится в учёте и в метрике — но только с этого момента track-time-first-attempt truetime-first-attempt-hires-timestamp true <prometheus-listener 0/0:9090> </prometheus-listener>
что делают не так и чем это кончается2 ошибки▶
наш опыт
§ 11.22
3 связи
head -1 "$(ls -t /var/log/pmta/acct-*.csv | head -1)" | tr ',' '\n' | grep -i first
3 статьи
◇Что узел рассказывает о себе и по каким каналамСемь поверхностей наблюдения: веб-монитор, консоль в четырёх форматах, журнал, учёт, поиск по учёту, метрики и выгрузка во внешнюю аналитику.◇Договор о телеметрииОдин блок описывает выход учёта целиком: какие виды записей, какие поля, куда они идут, как сменяются файлы и что обезличивается.◇Как устроена запись учётаКак устроена запись учёта: вид записи в первом столбце, дальше поля, состав которых настраивается.