The catalog of :telemetry events emitted by Sovite, and the default
handler that turns them into log lines.
Components emit events named [:sovite, component, ...]. Durations are
in :native time units, as with :telemetry.span/3.
| Event | Measurements | Metadata |
|---|---|---|
[:sovite, :listener, :connection, :start] | system_time | listener, remote_ip, remote_port |
[:sovite, :listener, :connection, :stop] | duration | listener, remote_ip, remote_port |
[:sovite, :listener, :connection, :rejected] | listener, remote_ip, reason | |
[:sovite, :listener, :proxy, :error] | listener, remote_ip, reason | |
[:sovite, :smtp, :server, :session, :start] | system_time | session_id, remote_ip |
[:sovite, :smtp, :server, :session, :stop] | duration | session_id, remote_ip |
[:sovite, :smtp, :server, :command, :stop] | duration | session_id, remote_ip, command, argument, reply_code, reply |
[:sovite, :smtp, :server, :tls, :stop] | duration | session_id, remote_ip, protocol, cipher, sni, error |
[:sovite, :auth, :success] | session_id, remote_ip, mechanism, username | |
[:sovite, :auth, :failure] | session_id, remote_ip, mechanism, username, reason | |
[:sovite, :abuse, :penalty, :banned] | failures | penalty, key, ban_time |
[:sovite, :abuse, :rate_limit, :exceeded] | limit, window | rate_limit, key |
[:sovite, :abuse, :dnsbl, :listed] | weight | zone, query, codes |
[:sovite, :abuse, :dnsbl, :error] | zone, query, reason | |
[:sovite, :screen, :rejected] | score | session_id, remote_ip, stage, reasons |
[:sovite, :greylist, :deferred] | retry_after | client_network, sender, recipient |
[:sovite, :outbound, :suspended] | sent, failed | user, suspend_time |
[:sovite, :restrictions, :warn] | stage, check, text | |
[:sovite, :milter, :connect, :stop] | duration | milter, address, result |
[:sovite, :milter, :reply] | duration | milter, stage, reply |
[:sovite, :milter, :error] | milter, stage, reason | |
[:sovite, :policy, :client, :request, :stop] | duration | address, action |
[:sovite, :policy, :client, :error] | duration | address, reason |
[:sovite, :tls, :certificate, :loaded] | cert_file, names, not_after | |
[:sovite, :tls, :certificate, :error] | cert_file, reason | |
[:sovite, :tls, :acme, :issued] | domains, not_after | |
[:sovite, :tls, :acme, :failed] | domains, reason | |
[:sovite, :queue, :message, :enqueued] | size, recipients | queue_id, session_id, sender |
[:sovite, :queue, :message, :removed] | queue_id, reason (delivered, bounced, expired, deleted) | |
[:sovite, :queue, :message, :deferred] | attempts, recipients | queue_id, next_attempt |
[:sovite, :queue, :message, :corrupt] | queue_id, reason | |
[:sovite, :queue, :message, :held] | queue_id | |
[:sovite, :queue, :message, :released] | queue_id | |
[:sovite, :queue, :message, :requeued] | queue_id | |
[:sovite, :queue, :notification, :sent] | recipients | queue_id, kind, to, notification_id |
[:sovite, :queue, :notification, :discarded] | recipients | queue_id, kind, sender |
[:sovite, :smtp, :client, :delivery, :start] | system_time | queue_id, relay |
[:sovite, :smtp, :client, :delivery, :stop] | duration | queue_id, relay, recipient, status, reply |
[:sovite, :smtp, :client, :delivery, :exception] | duration | queue_id, relay, kind, reason |
[:sovite, :smtp, :message, :accepted] | recipients | session_id, queue_id, message_id, sender, remote_ip, helo, user |
[:sovite, :smtp, :message, :authenticated] | session_id, queue_id, spf, dkim, arc, dmarc, disposition | |
[:sovite, :dmarc, :report, :sent] | rows, messages | domain, report_id, queue_id, to |
[:sovite, :dmarc, :report, :skipped] | messages | domain, reason |
[:sovite, :mta_sts, :fetched] | domain, policy_id, mode | |
[:sovite, :mta_sts, :failed] | domain, reason | |
[:sovite, :tls, :mta_sts, :served] | domain, status | |
[:sovite, :tls_rpt, :report, :sent] | sessions | domain, report_id, queue_id, to, urls |
[:sovite, :tls_rpt, :report, :skipped] | sessions | domain, reason |
[:sovite, :tls_rpt, :report, :post_failed] | domain, url, reason | |
[:sovite, :config, :reloaded] | path, changed | |
[:sovite, :config, :reload_failed] | path, reason | |
[:sovite, :server, :drain, :start] | connections | |
[:sovite, :server, :drain, :stop] | duration, connections | deliveries |
[:sovite, :web, :request, :stop] | duration | method, path, status, remote_ip |
[:sovite, :web, :request, :exception] | method, path, kind, reason | |
[:sovite, :tracing, :export, :error] | spans | name, reason |
[:sovite, :tracing, :spans, :dropped] | spans | name |
[:sovite, :systemd, :watchdog, :skipped] | reason | |
[:sovite, :cluster, :node, :up] | node | |
[:sovite, :cluster, :node, :down] | node | |
[:sovite, :cluster, :join, :error] | peer, reason | |
[:sovite, :cluster, :config, :applied] | version | origin |
[:sovite, :cluster, :config, :rejected] | version | origin, reason |
[:sovite, :cluster, :queue, :taken_over] | messages | node |
[:sovite, :cluster, :queue, :handed_over] | messages, failed | |
[:sovite, :tenant, :limited] | tenant, limit | |
[:sovite, :ip_pool, :exhausted] | pool |
smtp.message.accepted links a received message's queue ID to its
session and Message-ID, so sovitectl trace can find it by either.
Delivery :stop events come once per recipient; status is
:delivered, :deferred, or :failed. :notification events are
about the original message: queue_id is its ID, and notification_id
the ID of the queued notification.
Message lifecycle events (:queue, delivery :stop and :exception,
accepted messages), administrator actions on the queue, config
reloads, draining, cluster nodes coming up, shared configurations
taken, queues handed over, tenant limits hit, full IP pools,
authentication results of received mail, sent DMARC reports,
successful logins, certificate loads and ACME issuance, failed TLS
handshakes, SMTP commands that got a 4xx or 5xx reply, clients the
screen refused, exceeded rate limits, failed DNS list lookups, and
connections without a valid PROXY protocol header are logged at
:info. Corrupt messages, discarded notifications, failed logins,
bans, suspended users, certificate errors, failed ACME orders,
WARN results of restrictions, failed policy server requests, failed
config reloads, web requests that crashed, failed trace exports,
skipped watchdog pings, cluster nodes going down, shared configurations
refused, and messages taken over from nodes that stayed down are
logged at :warning.
All other events are logged at :debug.
Failed logins are logged as auth.failure: mechanism=PLAIN, reason=invalid_credentials, username=alice with remote_ip in the
metadata, ready for tools such as fail2ban.
Summary
Functions
Attaches the logging handler to every cataloged event. Safe to call repeatedly.
Detaches the logging handler.
Returns every event in the catalog.
Functions
@spec attach_logger() :: :ok
Attaches the logging handler to every cataloged event. Safe to call repeatedly.
@spec detach_logger() :: :ok
Detaches the logging handler.
@spec events() :: [:telemetry.event_name()]
Returns every event in the catalog.