The third way to observe a node — and the only one whose output a ready-made monitoring system understands without a translator. It appeared in PowerMTA 5.5.
What is exposed, by group:
| Group | Metrics | What it reveals |
|---|---|---|
| traffic | recipients, messages, bytes, connections | demand and its seasonality |
| saturation | queue depth in recipients and bytes, current connections | approaching the limit |
| errors | 4xx, 5xx, internal; queue ones separately | the failure rate |
| delays | conversation duration, time to the first attempt | early signs of trouble |
Labels distinguish direction and submission method. Traffic has srcType: submission over SMTP, via the submission API, internal (for example, non-delivery notifications), via the Transmissions API and seeding. That is, you can see which path messages came by — something neither the monitor nor accounting shows.
These are summaries, not events. The vendor says so directly: the set is designed for overall system health, and it is not meant for investigating individual messages — accounting and the log exist for that.
Three metrics require separate enabling: both conversation delays (track-inbound-perf-stats, track-outbound-perf-stats) and the time to the first attempt (track-time-first-attempt). The rest work right away with the block.
🔎 The schema has a place reserved for this — the node_engines.metrics_port column — but nobody fills it in: the path was mapped out and never taken.
🔎 And this is the only node surface that does not need our secret. The management interface requires a key, the webhook a token, while metrics are exposed as they are. A client with its own monitoring can be given it with one line in the configuration, without opening anything else.
The mechanism has no values of its own — it is enabled by the block, and three metrics are opened by node-level lines:
| What is needed | What enables it |
|---|---|
| the whole surface | the <prometheus-listener> block |
| receiving delay | track-inbound-perf-stats |
| sending delay | track-outbound-perf-stats |
| time to the first attempt | track-time-first-attempt |
| a per-receiver breakdown of the latter | time-first-attempt-domains-file |
# the block exposes metrics; three lines add delays to them <prometheus-listener 0/0:9090></prometheus-listener> track-inbound-perf-stats true track-outbound-perf-stats true track-time-first-attempt true
what people get wrong and how it ends3 mistakes▶
§ 11.22
our experience
§ 11.22
4 relations
curl -s http://NODE:9090/metrics | head -30
3 articles
◇Five ways for a queue to hand off a messageA queue does not have to use SMTP: it can write to a file, run a program, call over HTTP or discard.◇How a message gets into the engineSix described submission methods: extended SMTP, four language bindings and a directory the node watches on disk.◇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.