Globalset by the Hub
The line makes the engine record when it first tried to deliver a message. Any outcome counts as an attempt: delivery, a bounce, a temporary error from the recipient domain or the queue. The default is false.
🔴 This is not an event record but switching on a count. While the line is off, the value does not exist: it cannot be recovered from accounting or from the log. All you can do retroactively is turn it on and wait for new messages.
It opens up in two ways at once. The value appears in accounting records of types d, b and t — which means it also has to be listed in record-fields (with the * set it gets in by itself). And it also becomes the pmta_smtp_first_attempt_seconds metric if <prometheus-listener> is configured.
What this value actually means. Not delivery time, but the delay between receiving a message and the first action taken on it. It is a direct measure of whether the node keeps up with its queue: if it grows, messages are waiting, and it grows earlier than deliverability deteriorates.
The vendor names the price: a noticeable impact on disk access, especially when many attempts end in temporary errors. That is, it costs the most exactly when it is most useful.
To the fields of deliveries and bounces the Hub explicitly adds timeFirstAttempt, totalSecondsQueued and numRetries — they are not part of the asterisk. From them telemetry calculates delivery time without the queue, and “Accounting stats” — where the time goes inside delivery. The price is disk access, and it is higher precisely on a problem node: the manual mentions increased disk I/O with a large number of temporary failures.
The decision is simple, but it has a price:
| Value | When |
|---|---|
| false (default) | always, while the value is not needed |
| true | the receive-to-send delay is needed in accounting or in metrics |
Next to it are two lines that work only when this one is on: time-first-attempt-hires-timestamp — milliseconds in the accounting record, and time-first-attempt-domains-file — a per-receiver breakdown of the metric.
# the value will appear in accounting and in the metric — but only from this moment on track-time-first-attempt truetime-first-attempt-hires-timestamp true <prometheus-listener 0/0:9090> </prometheus-listener>
what people get wrong and how it ends2 mistakes▶
our experience
§ 11.22
3 relations
head -1 "$(ls -t /var/log/pmta/acct-*.csv | head -1)" | tr ',' '\n' | grep -i first
3 articles
◇What the node tells about itself and through which channelsSeven observation surfaces: the web monitor, the console in four formats, the log, accounting, accounting search, metrics and export to external analytics.◇The telemetry contractOne block describes the accounting output in full: which record types, which fields, where they go, how files rotate and what gets anonymized.◇How an accounting record is structuredHow an accounting record is structured: the record type in the first column, then the fields, whose composition is configurable.