Sovite.Core.Telemetry (sovite v0.6.0)

Copy Markdown View Source

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.

EventMeasurementsMetadata
[:sovite, :listener, :connection, :start]system_timelistener, remote_ip, remote_port
[:sovite, :listener, :connection, :stop]durationlistener, 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_timesession_id, remote_ip
[:sovite, :smtp, :server, :session, :stop]durationsession_id, remote_ip
[:sovite, :smtp, :server, :command, :stop]durationsession_id, remote_ip, command, argument, reply_code, reply
[:sovite, :smtp, :server, :tls, :stop]durationsession_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]failurespenalty, key, ban_time
[:sovite, :abuse, :rate_limit, :exceeded]limit, windowrate_limit, key
[:sovite, :abuse, :dnsbl, :listed]weightzone, query, codes
[:sovite, :abuse, :dnsbl, :error]zone, query, reason
[:sovite, :screen, :rejected]scoresession_id, remote_ip, stage, reasons
[:sovite, :greylist, :deferred]retry_afterclient_network, sender, recipient
[:sovite, :outbound, :suspended]sent, faileduser, suspend_time
[:sovite, :restrictions, :warn]stage, check, text
[:sovite, :milter, :connect, :stop]durationmilter, address, result
[:sovite, :milter, :reply]durationmilter, stage, reply
[:sovite, :milter, :error]milter, stage, reason
[:sovite, :policy, :client, :request, :stop]durationaddress, action
[:sovite, :policy, :client, :error]durationaddress, 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, recipientsqueue_id, session_id, sender
[:sovite, :queue, :message, :removed]queue_id, reason (delivered, bounced, expired, deleted)
[:sovite, :queue, :message, :deferred]attempts, recipientsqueue_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]recipientsqueue_id, kind, to, notification_id
[:sovite, :queue, :notification, :discarded]recipientsqueue_id, kind, sender
[:sovite, :smtp, :client, :delivery, :start]system_timequeue_id, relay
[:sovite, :smtp, :client, :delivery, :stop]durationqueue_id, relay, recipient, status, reply
[:sovite, :smtp, :client, :delivery, :exception]durationqueue_id, relay, kind, reason
[:sovite, :smtp, :message, :accepted]recipientssession_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, messagesdomain, report_id, queue_id, to
[:sovite, :dmarc, :report, :skipped]messagesdomain, 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]sessionsdomain, report_id, queue_id, to, urls
[:sovite, :tls_rpt, :report, :skipped]sessionsdomain, 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, connectionsdeliveries
[:sovite, :web, :request, :stop]durationmethod, path, status, remote_ip
[:sovite, :web, :request, :exception]method, path, kind, reason
[:sovite, :tracing, :export, :error]spansname, reason
[:sovite, :tracing, :spans, :dropped]spansname
[: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]versionorigin
[:sovite, :cluster, :config, :rejected]versionorigin, reason
[:sovite, :cluster, :queue, :taken_over]messagesnode
[: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

attach_logger()

@spec attach_logger() :: :ok

Attaches the logging handler to every cataloged event. Safe to call repeatedly.

detach_logger()

@spec detach_logger() :: :ok

Detaches the logging handler.

events()

@spec events() :: [:telemetry.event_name()]

Returns every event in the catalog.