Skip to content

Metrics

Every metric Stalwart collects is listed below, grouped by subsystem. Each metric has an identifier (formatted as <subsystem>.<name>), a unit, the names under which the exporters publish it, and a description.

The identifier is the name used inside Stalwart, by alerts, the metric expression function and the WebUI dashboard. The unit is the one in which the server records the metric. The OpenTelemetry column gives the name and the UCUM unit sent by the OpenTelemetry exporter, and the Prometheus column the name served by the Prometheus endpoint. Both exporters report durations in seconds, although the server records them in milliseconds. Exported names explains how the exported names are derived.

A histogram appears in Prometheus as three series that start with the listed name: _bucket, with one sample per bucket bound in the le label, _sum and _count. The delivery attempt histogram, for example, is queried as stalwart_delivery_attempt_time_seconds_bucket, stalwart_delivery_attempt_time_seconds_sum and stalwart_delivery_attempt_time_seconds_count.

MetricUnitOpenTelemetryPrometheusDescription
acme.auth-errorcountstalwart.acme.auth_error ({event})stalwart_acme_auth_error_totalACME authentication error
acme.auth-too-many-attemptscountstalwart.acme.auth_too_many_attempts ({event})stalwart_acme_auth_too_many_attempts_totalToo many ACME authentication attempts
acme.order-completedcountstalwart.acme.order_completed ({event})stalwart_acme_order_completed_totalACME order completed
acme.order-invalidcountstalwart.acme.order_invalid ({event})stalwart_acme_order_invalid_totalACME order invalid
acme.client-missing-snicountstalwart.acme.client_missing_sni ({event})stalwart_acme_client_missing_sni_totalACME client missing SNI
acme.tls-alpn-errorcountstalwart.acme.tls_alpn_error ({event})stalwart_acme_tls_alpn_error_totalACME TLS ALPN error
acme.token-not-foundcountstalwart.acme.token_not_found ({event})stalwart_acme_token_not_found_totalACME token not found
acme.errorcountstalwart.acme.error ({event})stalwart_acme_error_totalACME error
MetricUnitOpenTelemetryPrometheusDescription
ai.request-timemillisecondsstalwart.ai.request_time (s)stalwart_ai_request_time_secondsAI request duration
ai.input-tokenstokensstalwart.ai.input_tokens ({token})stalwart_ai_input_tokensAI input tokens per request
ai.output-tokenstokensstalwart.ai.output_tokens ({token})stalwart_ai_output_tokensAI output tokens per request
ai.api-errorcountstalwart.ai.api_error ({event})stalwart_ai_api_error_totalAI API error
ai.requestcountstalwart.ai.request ({event})stalwart_ai_request_totalAI request completed
ai.spam-verdictcountstalwart.ai.spam_verdict ({event})stalwart_ai_spam_verdict_totalAI spam verdict
ai.spam-skippedcountstalwart.ai.spam_skipped ({event})stalwart_ai_spam_skipped_totalAI spam classifier skipped
ai.breaker-opencountstalwart.ai.breaker_open ({event})stalwart_ai_breaker_open_totalAI model circuit breaker open
MetricUnitOpenTelemetryPrometheusDescription
arc.chain-invalidcountstalwart.arc.chain_invalid ({event})stalwart_arc_chain_invalid_totalARC chain invalid
arc.signature-invalidcountstalwart.arc.signature_invalid ({event})stalwart_arc_signature_invalid_totalARC signature invalid
arc.hash-mismatchcountstalwart.arc.hash_mismatch ({event})stalwart_arc_hash_mismatch_totalARC body hash mismatch
MetricUnitOpenTelemetryPrometheusDescription
auth.successcountstalwart.auth.success ({event})stalwart_auth_success_totalAuthentication successful
auth.failedcountstalwart.auth.failed ({event})stalwart_auth_failed_totalAuthentication failed
auth.too-many-attemptscountstalwart.auth.too_many_attempts ({event})stalwart_auth_too_many_attempts_totalToo many authentication attempts
auth.errorcountstalwart.auth.error ({event})stalwart_auth_error_totalAuthentication error
MetricUnitOpenTelemetryPrometheusDescription
cache.messages-sizebytesstalwart.cache.messages_size (By)stalwart_cache_messages_size_bytesMemory used by the e-mail data cache
cache.messages-large-sizebytesstalwart.cache.messages_large_size (By)stalwart_cache_messages_large_size_bytesTotal size of the large-account e-mail data caches held in memory, both those retained by the large tier and those still referenced by in-flight requests
cache.sizebytesstalwart.cache.size (By)stalwart_cache_size_bytesMemory used by all other caches
cache.swap-pendingsnapshotsstalwart.cache.swap_pending ({snapshot})stalwart_cache_swap_pendingCache snapshots with changes not yet written to the swap tier
cache.misscountstalwart.cache.miss ({event})stalwart_cache_miss_totalCache miss
cache.hitcountstalwart.cache.hit ({event})stalwart_cache_hit_totalCache hit
cache.stalecountstalwart.cache.stale ({event})stalwart_cache_stale_totalCache is stale
cache.entry-too-largecountstalwart.cache.entry_too_large ({event})stalwart_cache_entry_too_large_totalCache entry too large
cache.swap-hitcountstalwart.cache.swap_hit ({event})stalwart_cache_swap_hit_totalCache snapshot loaded
cache.swap-misscountstalwart.cache.swap_miss ({event})stalwart_cache_swap_miss_totalCache snapshot unavailable
cache.swap-writecountstalwart.cache.swap_write ({event})stalwart_cache_swap_write_totalCache snapshot written
cache.swap-errorcountstalwart.cache.swap_error ({event})stalwart_cache_swap_error_totalCache swap tier error
MetricUnitOpenTelemetryPrometheusDescription
calendar.alarm-sentcountstalwart.calendar.alarm_sent ({event})stalwart_calendar_alarm_sent_totalCalendar alarm sent
calendar.alarm-failedcountstalwart.calendar.alarm_failed ({event})stalwart_calendar_alarm_failed_totalCalendar alarm could not be sent
calendar.itip-message-sentcountstalwart.calendar.itip_message_sent ({event})stalwart_calendar_itip_message_sent_totalCalendar iTIP message sent
calendar.itip-message-receivedcountstalwart.calendar.itip_message_received ({event})stalwart_calendar_itip_message_received_totalCalendar iTIP message received
calendar.itip-message-errorcountstalwart.calendar.itip_message_error ({event})stalwart_calendar_itip_message_error_totaliTIP message error
MetricUnitOpenTelemetryPrometheusDescription
cluster.subscriber-errorcountstalwart.cluster.subscriber_error ({event})stalwart_cluster_subscriber_error_totalPubSub subscriber error
cluster.subscriber-disconnectedcountstalwart.cluster.subscriber_disconnected ({event})stalwart_cluster_subscriber_disconnected_totalPubSub subscriber disconnected
cluster.publisher-errorcountstalwart.cluster.publisher_error ({event})stalwart_cluster_publisher_error_totalPubSub publisher error
MetricUnitOpenTelemetryPrometheusDescription
dane.authentication-successcountstalwart.dane.authentication_success ({event})stalwart_dane_authentication_success_totalDANE authentication successful
dane.authentication-failurecountstalwart.dane.authentication_failure ({event})stalwart_dane_authentication_failure_totalDANE authentication failed
dane.no-certificates-foundcountstalwart.dane.no_certificates_found ({event})stalwart_dane_no_certificates_found_totalNo certificates found for DANE
dane.certificate-parse-errorcountstalwart.dane.certificate_parse_error ({event})stalwart_dane_certificate_parse_error_totalError parsing certificate for DANE
dane.tlsa-record-fetch-errorcountstalwart.dane.tlsa_record_fetch_error ({event})stalwart_dane_tlsa_record_fetch_error_totalError fetching TLSA record
dane.tlsa-record-not-foundcountstalwart.dane.tlsa_record_not_found ({event})stalwart_dane_tlsa_record_not_found_totalTLSA record not found
dane.tlsa-record-not-dnssec-signedcountstalwart.dane.tlsa_record_not_dnssec_signed ({event})stalwart_dane_tlsa_record_not_dnssec_signed_totalTLSA record not DNSSEC signed
dane.tlsa-record-invalidcountstalwart.dane.tlsa_record_invalid ({event})stalwart_dane_tlsa_record_invalid_totalInvalid TLSA record
dane.bogus-dnssec-recordcountstalwart.dane.bogus_dnssec_record ({event})stalwart_dane_bogus_dnssec_record_totalBogus DNSSEC record
MetricUnitOpenTelemetryPrometheusDescription
delivery.total-timemillisecondsstalwart.delivery.total_time (s)stalwart_delivery_total_time_secondsTotal message delivery time from submission to delivery
delivery.attempt-timemillisecondsstalwart.delivery.attempt_time (s)stalwart_delivery_attempt_time_secondsMessage delivery time
delivery.active-connectionsconnectionsstalwart.delivery.active_connections ({connection})stalwart_delivery_active_connectionsActive delivery connections
delivery.attempt-startcountstalwart.delivery.attempt_start ({event})stalwart_delivery_attempt_start_totalDelivery attempt started
delivery.attempt-endcountstalwart.delivery.attempt_end ({event})stalwart_delivery_attempt_end_totalDelivery attempt ended
delivery.completedcountstalwart.delivery.completed ({event})stalwart_delivery_completed_totalDelivery completed
delivery.mx-lookup-failedcountstalwart.delivery.mx_lookup_failed ({event})stalwart_delivery_mx_lookup_failed_totalMX record lookup failed
delivery.ip-lookup-failedcountstalwart.delivery.ip_lookup_failed ({event})stalwart_delivery_ip_lookup_failed_totalIP address lookup failed
delivery.null-mxcountstalwart.delivery.null_mx ({event})stalwart_delivery_null_mx_totalNull MX record found
delivery.greeting-failedcountstalwart.delivery.greeting_failed ({event})stalwart_delivery_greeting_failed_totalSMTP greeting failed
delivery.ehlo-rejectedcountstalwart.delivery.ehlo_rejected ({event})stalwart_delivery_ehlo_rejected_totalSMTP EHLO rejected
delivery.auth-failedcountstalwart.delivery.auth_failed ({event})stalwart_delivery_auth_failed_totalSMTP authentication failed
delivery.mail-from-rejectedcountstalwart.delivery.mail_from_rejected ({event})stalwart_delivery_mail_from_rejected_totalSMTP MAIL FROM rejected
delivery.deliveredcountstalwart.delivery.delivered ({event})stalwart_delivery_delivered_totalMessage delivered
delivery.rcpt-to-rejectedcountstalwart.delivery.rcpt_to_rejected ({event})stalwart_delivery_rcpt_to_rejected_totalSMTP RCPT TO rejected
delivery.rcpt-to-failedcountstalwart.delivery.rcpt_to_failed ({event})stalwart_delivery_rcpt_to_failed_totalSMTP RCPT TO failed
delivery.message-rejectedcountstalwart.delivery.message_rejected ({event})stalwart_delivery_message_rejected_totalMessage rejected by remote server
delivery.start-tls-unavailablecountstalwart.delivery.start_tls_unavailable ({event})stalwart_delivery_start_tls_unavailable_totalSTARTTLS unavailable
delivery.start-tls-errorcountstalwart.delivery.start_tls_error ({event})stalwart_delivery_start_tls_error_totalSTARTTLS error
delivery.start-tls-disabledcountstalwart.delivery.start_tls_disabled ({event})stalwart_delivery_start_tls_disabled_totalSTARTTLS disabled
delivery.implicit-tls-errorcountstalwart.delivery.implicit_tls_error ({event})stalwart_delivery_implicit_tls_error_totalImplicit TLS error
delivery.concurrency-limit-exceededcountstalwart.delivery.concurrency_limit_exceeded ({event})stalwart_delivery_concurrency_limit_exceeded_totalConcurrency limit exceeded
delivery.rate-limit-exceededcountstalwart.delivery.rate_limit_exceeded ({event})stalwart_delivery_rate_limit_exceeded_totalRate limit exceeded
delivery.double-bouncecountstalwart.delivery.double_bounce ({event})stalwart_delivery_double_bounce_totalDiscarding message after double bounce
delivery.dsn-successcountstalwart.delivery.dsn_success ({event})stalwart_delivery_dsn_success_totalDSN success notification
delivery.dsn-temp-failcountstalwart.delivery.dsn_temp_fail ({event})stalwart_delivery_dsn_temp_fail_totalDSN temporary failure notification
delivery.dsn-perm-failcountstalwart.delivery.dsn_perm_fail ({event})stalwart_delivery_dsn_perm_fail_totalDSN permanent failure notification
MetricUnitOpenTelemetryPrometheusDescription
dkim.passcountstalwart.dkim.pass ({event})stalwart_dkim_pass_totalDKIM verification passed
dkim.neutralcountstalwart.dkim.neutral ({event})stalwart_dkim_neutral_totalDKIM verification neutral
dkim.failcountstalwart.dkim.fail ({event})stalwart_dkim_fail_totalDKIM verification failed
dkim.perm-errorcountstalwart.dkim.perm_error ({event})stalwart_dkim_perm_error_totalDKIM permanent error
dkim.temp-errorcountstalwart.dkim.temp_error ({event})stalwart_dkim_temp_error_totalDKIM temporary error
dkim.nonecountstalwart.dkim.none ({event})stalwart_dkim_none_totalNo DKIM signature
dkim.signature-invalidcountstalwart.dkim.signature_invalid ({event})stalwart_dkim_signature_invalid_totalDKIM signature invalid
dkim.public-key-errorcountstalwart.dkim.public_key_error ({event})stalwart_dkim_public_key_error_totalDKIM public key error
dkim.verification-failedcountstalwart.dkim.verification_failed ({event})stalwart_dkim_verification_failed_totalDKIM signature verification failed
dkim.hash-mismatchcountstalwart.dkim.hash_mismatch ({event})stalwart_dkim_hash_mismatch_totalDKIM body hash mismatch
dkim.signer-not-foundcountstalwart.dkim.signer_not_found ({event})stalwart_dkim_signer_not_found_totalDKIM signer not found
MetricUnitOpenTelemetryPrometheusDescription
dkim2.instance-invalidcountstalwart.dkim2.instance_invalid ({event})stalwart_dkim2_instance_invalid_totalDKIM2 Message-Instance invalid
dkim2.signature-invalidcountstalwart.dkim2.signature_invalid ({event})stalwart_dkim2_signature_invalid_totalDKIM2 signature invalid
dkim2.chain-invalidcountstalwart.dkim2.chain_invalid ({event})stalwart_dkim2_chain_invalid_totalDKIM2 chain invalid
dkim2.timestamp-invalidcountstalwart.dkim2.timestamp_invalid ({event})stalwart_dkim2_timestamp_invalid_totalDKIM2 timestamp invalid
dkim2.envelope-mismatchcountstalwart.dkim2.envelope_mismatch ({event})stalwart_dkim2_envelope_mismatch_totalDKIM2 envelope mismatch
dkim2.custody-brokencountstalwart.dkim2.custody_broken ({event})stalwart_dkim2_custody_broken_totalDKIM2 chain of custody broken
dkim2.public-key-errorcountstalwart.dkim2.public_key_error ({event})stalwart_dkim2_public_key_error_totalDKIM2 public key error
dkim2.verification-failedcountstalwart.dkim2.verification_failed ({event})stalwart_dkim2_verification_failed_totalDKIM2 signature verification failed
dkim2.hash-mismatchcountstalwart.dkim2.hash_mismatch ({event})stalwart_dkim2_hash_mismatch_totalDKIM2 hash mismatch
dkim2.recipe-errorcountstalwart.dkim2.recipe_error ({event})stalwart_dkim2_recipe_error_totalDKIM2 recipe error
dkim2.signing-failedcountstalwart.dkim2.signing_failed ({event})stalwart_dkim2_signing_failed_totalDKIM2 signing failed
dkim2.dsn-not-alignedcountstalwart.dkim2.dsn_not_aligned ({event})stalwart_dkim2_dsn_not_aligned_totalDKIM2 DSN signer not aligned
dkim2.dsn-propagatedcountstalwart.dkim2.dsn_propagated ({event})stalwart_dkim2_dsn_propagated_totalDKIM2 DSN propagated
MetricUnitOpenTelemetryPrometheusDescription
dmarc.passcountstalwart.dmarc.pass ({event})stalwart_dmarc_pass_totalDMARC check passed
dmarc.failcountstalwart.dmarc.fail ({event})stalwart_dmarc_fail_totalDMARC check failed
dmarc.perm-errorcountstalwart.dmarc.perm_error ({event})stalwart_dmarc_perm_error_totalDMARC permanent error
dmarc.temp-errorcountstalwart.dmarc.temp_error ({event})stalwart_dmarc_temp_error_totalDMARC temporary error
dmarc.nonecountstalwart.dmarc.none ({event})stalwart_dmarc_none_totalNo DMARC record
MetricUnitOpenTelemetryPrometheusDescription
dns.lookup-timemillisecondsstalwart.dns.lookup_time (s)stalwart_dns_lookup_time_secondsDNS lookup time
dns.record-creation-failedcountstalwart.dns.record_creation_failed ({event})stalwart_dns_record_creation_failed_totalDNS record creation failed
dns.record-deletion-failedcountstalwart.dns.record_deletion_failed ({event})stalwart_dns_record_deletion_failed_totalDNS record deletion failed
dns.record-lookup-failedcountstalwart.dns.record_lookup_failed ({event})stalwart_dns_record_lookup_failed_totalDNS record lookup failed
dns.record-propagation-timeoutcountstalwart.dns.record_propagation_timeout ({event})stalwart_dns_record_propagation_timeout_totalDNS record propagation timeout
MetricUnitOpenTelemetryPrometheusDescription
domain.countdomainsstalwart.domains ({domain})stalwart_domainsTotal number of domains
MetricUnitOpenTelemetryPrometheusDescription
encryption.key-lookup-timemillisecondsstalwart.encryption.key_lookup_time (s)stalwart_encryption_key_lookup_time_secondsRecipient key discovery lookup time
encryption.encryption-skippedcountstalwart.encryption.encryption_skipped ({event})stalwart_encryption_encryption_skipped_totalEncryption skipped
encryption.at-rest-encryptedcountstalwart.encryption.at_rest_encrypted ({event})stalwart_encryption_at_rest_encrypted_totalMessage encrypted at rest
encryption.gateway-encryptedcountstalwart.encryption.gateway_encrypted ({event})stalwart_encryption_gateway_encrypted_totalGateway encrypted message
encryption.gateway-plaintextcountstalwart.encryption.gateway_plaintext ({event})stalwart_encryption_gateway_plaintext_totalGateway sent plaintext
encryption.gateway-bouncedcountstalwart.encryption.gateway_bounced ({event})stalwart_encryption_gateway_bounced_totalGateway bounced message
encryption.key-lookupcountstalwart.encryption.key_lookup ({event})stalwart_encryption_key_lookup_totalKey lookup
encryption.key-harvestedcountstalwart.encryption.key_harvested ({event})stalwart_encryption_key_harvested_totalKey harvested
encryption.key-changecountstalwart.encryption.key_change ({event})stalwart_encryption_key_change_totalKey change pending approval
encryption.crl-fetch-failedcountstalwart.encryption.crl_fetch_failed ({event})stalwart_encryption_crl_fetch_failed_totalCRL download failed
encryption.dnssec-boguscountstalwart.encryption.dnssec_bogus ({event})stalwart_encryption_dnssec_bogus_totalDNSSEC validation failed
MetricUnitOpenTelemetryPrometheusDescription
eval.errorcountstalwart.eval.error ({event})stalwart_eval_error_totalExpression evaluation error
eval.directory-not-foundcountstalwart.eval.directory_not_found ({event})stalwart_eval_directory_not_found_totalDirectory not found while evaluating expression
eval.store-not-foundcountstalwart.eval.store_not_found ({event})stalwart_eval_store_not_found_totalStore not found while evaluating expression
MetricUnitOpenTelemetryPrometheusDescription
http.request-timemillisecondsstalwart.http.request_time (s)stalwart_http_request_time_secondsHTTP connection duration
http.active-connectionsconnectionsstalwart.http.active_connections ({connection})stalwart_http_active_connectionsActive HTTP connections
http.connection-startcountstalwart.http.connection_start ({event})stalwart_http_connection_start_totalHTTP connection started
http.errorcountstalwart.http.error ({event})stalwart_http_error_totalHTTP error occurred
http.request-bodycountstalwart.http.request_body ({event})stalwart_http_request_body_totalHTTP request body
http.response-bodycountstalwart.http.response_body ({event})stalwart_http_response_body_totalHTTP response body
http.x-forwarded-missingcountstalwart.http.x_forwarded_missing ({event})stalwart_http_x_forwarded_missing_totalX-Forwarded-For header is missing
http.x-forwarded-invalidcountstalwart.http.x_forwarded_invalid ({event})stalwart_http_x_forwarded_invalid_totalInvalid forwarding header
MetricUnitOpenTelemetryPrometheusDescription
imap.request-timemillisecondsstalwart.imap.request_time (s)stalwart_imap_request_time_secondsIMAP connection duration
imap.active-connectionsconnectionsstalwart.imap.active_connections ({connection})stalwart_imap_active_connectionsActive IMAP connections
imap.connection-startcountstalwart.imap.connection_start ({event})stalwart_imap_connection_start_totalIMAP connection started
imap.connection-endcountstalwart.imap.connection_end ({event})stalwart_imap_connection_end_totalIMAP connection ended
MetricUnitOpenTelemetryPrometheusDescription
incoming-report.dmarc-reportcountstalwart.incoming_report.dmarc_report ({event})stalwart_incoming_report_dmarc_report_totalDMARC report received
incoming-report.dmarc-report-with-warningscountstalwart.incoming_report.dmarc_report_with_warnings ({event})stalwart_incoming_report_dmarc_report_with_warnings_totalDMARC report received with warnings
incoming-report.tls-reportcountstalwart.incoming_report.tls_report ({event})stalwart_incoming_report_tls_report_totalTLS report received
incoming-report.tls-report-with-warningscountstalwart.incoming_report.tls_report_with_warnings ({event})stalwart_incoming_report_tls_report_with_warnings_totalTLS report received with warnings
incoming-report.abuse-reportcountstalwart.incoming_report.abuse_report ({event})stalwart_incoming_report_abuse_report_totalAbuse report received
incoming-report.auth-failure-reportcountstalwart.incoming_report.auth_failure_report ({event})stalwart_incoming_report_auth_failure_report_totalAuthentication failure report received
incoming-report.fraud-reportcountstalwart.incoming_report.fraud_report ({event})stalwart_incoming_report_fraud_report_totalFraud report received
incoming-report.not-spam-reportcountstalwart.incoming_report.not_spam_report ({event})stalwart_incoming_report_not_spam_report_totalNot spam report received
incoming-report.virus-reportcountstalwart.incoming_report.virus_report ({event})stalwart_incoming_report_virus_report_totalVirus report received
incoming-report.other-reportcountstalwart.incoming_report.other_report ({event})stalwart_incoming_report_other_report_totalOther type of report received
incoming-report.message-parse-failedcountstalwart.incoming_report.message_parse_failed ({event})stalwart_incoming_report_message_parse_failed_totalFailed to parse incoming report message
incoming-report.dmarc-parse-failedcountstalwart.incoming_report.dmarc_parse_failed ({event})stalwart_incoming_report_dmarc_parse_failed_totalFailed to parse DMARC report
incoming-report.tls-rpc-parse-failedcountstalwart.incoming_report.tls_rpc_parse_failed ({event})stalwart_incoming_report_tls_rpc_parse_failed_totalFailed to parse TLS RPC report
incoming-report.arf-parse-failedcountstalwart.incoming_report.arf_parse_failed ({event})stalwart_incoming_report_arf_parse_failed_totalFailed to parse ARF report
incoming-report.decompress-errorcountstalwart.incoming_report.decompress_error ({event})stalwart_incoming_report_decompress_error_totalError decompressing report
MetricUnitOpenTelemetryPrometheusDescription
iprev.passcountstalwart.iprev.pass ({event})stalwart_iprev_pass_totalIPREV check passed
iprev.failcountstalwart.iprev.fail ({event})stalwart_iprev_fail_totalIPREV check failed
iprev.perm-errorcountstalwart.iprev.perm_error ({event})stalwart_iprev_perm_error_totalIPREV permanent error
iprev.temp-errorcountstalwart.iprev.temp_error ({event})stalwart_iprev_temp_error_totalIPREV temporary error
iprev.nonecountstalwart.iprev.none ({event})stalwart_iprev_none_totalNo IPREV record
MetricUnitOpenTelemetryPrometheusDescription
jmap.method-callcountstalwart.jmap.method_call ({event})stalwart_jmap_method_call_totalJMAP method call
jmap.invalid-argumentscountstalwart.jmap.invalid_arguments ({event})stalwart_jmap_invalid_arguments_totalInvalid JMAP arguments
jmap.request-too-largecountstalwart.jmap.request_too_large ({event})stalwart_jmap_request_too_large_totalJMAP request too large
jmap.unsupported-filtercountstalwart.jmap.unsupported_filter ({event})stalwart_jmap_unsupported_filter_totalUnsupported JMAP filter
jmap.unsupported-sortcountstalwart.jmap.unsupported_sort ({event})stalwart_jmap_unsupported_sort_totalUnsupported JMAP sort
jmap.unknown-methodcountstalwart.jmap.unknown_method ({event})stalwart_jmap_unknown_method_totalUnknown JMAP method
jmap.forbiddencountstalwart.jmap.forbidden ({event})stalwart_jmap_forbidden_totalJMAP operation forbidden
jmap.not-jsoncountstalwart.jmap.not_json ({event})stalwart_jmap_not_json_totalJMAP request is not JSON
jmap.not-requestcountstalwart.jmap.not_request ({event})stalwart_jmap_not_request_totalJMAP input is not a request
jmap.websocket-startcountstalwart.jmap.websocket_start ({event})stalwart_jmap_websocket_start_totalJMAP WebSocket connection started
jmap.websocket-errorcountstalwart.jmap.websocket_error ({event})stalwart_jmap_websocket_error_totalJMAP WebSocket error
MetricUnitOpenTelemetryPrometheusDescription
limit.size-requestcountstalwart.limit.size_request ({event})stalwart_limit_size_request_totalRequest size limit reached
limit.size-uploadcountstalwart.limit.size_upload ({event})stalwart_limit_size_upload_totalUpload size limit reached
limit.calls-incountstalwart.limit.calls_in ({event})stalwart_limit_calls_in_totalIncoming calls limit reached
limit.concurrent-requestcountstalwart.limit.concurrent_request ({event})stalwart_limit_concurrent_request_totalConcurrent request limit reached
limit.concurrent-uploadcountstalwart.limit.concurrent_upload ({event})stalwart_limit_concurrent_upload_totalConcurrent upload limit reached
limit.concurrent-connectioncountstalwart.limit.concurrent_connection ({event})stalwart_limit_concurrent_connection_totalConcurrent connection limit reached
limit.quotacountstalwart.limit.quota ({event})stalwart_limit_quota_totalQuota limit reached
limit.blob-quotacountstalwart.limit.blob_quota ({event})stalwart_limit_blob_quota_totalBlob quota limit reached
limit.tenant-quotacountstalwart.limit.tenant_quota ({event})stalwart_limit_tenant_quota_totalTenant quota limit reached
limit.too-many-requestscountstalwart.limit.too_many_requests ({event})stalwart_limit_too_many_requests_totalToo many requests
limit.memory-budgetcountstalwart.limit.memory_budget ({event})stalwart_limit_memory_budget_totalMemory budget exceeded
MetricUnitOpenTelemetryPrometheusDescription
mail-auth.parse-errorcountstalwart.mail_auth.parse_error ({event})stalwart_mail_auth_parse_error_totalMail authentication parse error
mail-auth.missing-parameterscountstalwart.mail_auth.missing_parameters ({event})stalwart_mail_auth_missing_parameters_totalMissing mail authentication parameters
mail-auth.no-headers-foundcountstalwart.mail_auth.no_headers_found ({event})stalwart_mail_auth_no_headers_found_totalNo headers found in message
mail-auth.cryptocountstalwart.mail_auth.crypto ({event})stalwart_mail_auth_crypto_totalCrypto error during mail authentication
mail-auth.iocountstalwart.mail_auth.io ({event})stalwart_mail_auth_io_totalI/O error during mail authentication
mail-auth.base64countstalwart.mail_auth.base64 ({event})stalwart_mail_auth_base64_totalBase64 error during mail authentication
mail-auth.dns-errorcountstalwart.mail_auth.dns_error ({event})stalwart_mail_auth_dns_error_totalDNS error
mail-auth.dns-record-not-foundcountstalwart.mail_auth.dns_record_not_found ({event})stalwart_mail_auth_dns_record_not_found_totalDNS record not found
mail-auth.dns-invalid-record-typecountstalwart.mail_auth.dns_invalid_record_type ({event})stalwart_mail_auth_dns_invalid_record_type_totalInvalid DNS record type
mail-auth.policy-not-alignedcountstalwart.mail_auth.policy_not_aligned ({event})stalwart_mail_auth_policy_not_aligned_totalPolicy not aligned
MetricUnitOpenTelemetryPrometheusDescription
manage-sieve.connection-startcountstalwart.manage_sieve.connection_start ({event})stalwart_manage_sieve_connection_start_totalManageSieve connection started
manage-sieve.connection-endcountstalwart.manage_sieve.connection_end ({event})stalwart_manage_sieve_connection_end_totalManageSieve connection ended
MetricUnitOpenTelemetryPrometheusDescription
message.sizebytesstalwart.message.size (By)stalwart_message_size_bytesReceived message size
message.authenticated-sizebytesstalwart.message.authenticated_size (By)stalwart_message_authenticated_size_bytesReceived message size from authenticated users
MetricUnitOpenTelemetryPrometheusDescription
message-ingest.timemillisecondsstalwart.message_ingest.time (s)stalwart_message_ingest_time_secondsMessage ingestion time
message-ingest.hamcountstalwart.message_ingest.ham ({event})stalwart_message_ingest_ham_totalMessage ingested
message-ingest.spamcountstalwart.message_ingest.spam ({event})stalwart_message_ingest_spam_totalPossible spam message ingested
message-ingest.imap-appendcountstalwart.message_ingest.imap_append ({event})stalwart_message_ingest_imap_append_totalMessage appended via IMAP
message-ingest.jmap-appendcountstalwart.message_ingest.jmap_append ({event})stalwart_message_ingest_jmap_append_totalMessage appended via JMAP
message-ingest.duplicatecountstalwart.message_ingest.duplicate ({event})stalwart_message_ingest_duplicate_totalSkipping duplicate message
message-ingest.errorcountstalwart.message_ingest.error ({event})stalwart_message_ingest_error_totalMessage ingestion error
MetricUnitOpenTelemetryPrometheusDescription
milter.action-acceptcountstalwart.milter.action_accept ({event})stalwart_milter_action_accept_totalMilter action: Accept
milter.action-discardcountstalwart.milter.action_discard ({event})stalwart_milter_action_discard_totalMilter action: Discard
milter.action-rejectcountstalwart.milter.action_reject ({event})stalwart_milter_action_reject_totalMilter action: Reject
milter.action-temp-failcountstalwart.milter.action_temp_fail ({event})stalwart_milter_action_temp_fail_totalMilter action: Temporary failure
milter.action-reply-codecountstalwart.milter.action_reply_code ({event})stalwart_milter_action_reply_code_totalMilter action: Reply code
milter.action-connection-failurecountstalwart.milter.action_connection_failure ({event})stalwart_milter_action_connection_failure_totalMilter action: Connection failure
milter.action-shutdowncountstalwart.milter.action_shutdown ({event})stalwart_milter_action_shutdown_totalMilter action: Shutdown
MetricUnitOpenTelemetryPrometheusDescription
mta-hook.action-acceptcountstalwart.mta_hook.action_accept ({event})stalwart_mta_hook_action_accept_totalMTA hook action: Accept
mta-hook.action-discardcountstalwart.mta_hook.action_discard ({event})stalwart_mta_hook_action_discard_totalMTA hook action: Discard
mta-hook.action-rejectcountstalwart.mta_hook.action_reject ({event})stalwart_mta_hook_action_reject_totalMTA hook action: Reject
mta-hook.action-quarantinecountstalwart.mta_hook.action_quarantine ({event})stalwart_mta_hook_action_quarantine_totalMTA hook action: Quarantine
mta-hook.errorcountstalwart.mta_hook.error ({event})stalwart_mta_hook_error_totalMTA hook error
MetricUnitOpenTelemetryPrometheusDescription
mta-sts.authorizedcountstalwart.mta_sts.authorized ({event})stalwart_mta_sts_authorized_totalHost authorized by MTA-STS policy
mta-sts.not-authorizedcountstalwart.mta_sts.not_authorized ({event})stalwart_mta_sts_not_authorized_totalHost not authorized by MTA-STS policy
mta-sts.invalid-policycountstalwart.mta_sts.invalid_policy ({event})stalwart_mta_sts_invalid_policy_totalInvalid MTA-STS policy
MetricUnitOpenTelemetryPrometheusDescription
network.timeoutcountstalwart.network.timeout ({event})stalwart_network_timeout_totalNetwork timeout
MetricUnitOpenTelemetryPrometheusDescription
outgoing-report.sizebytesstalwart.outgoing_report.size (By)stalwart_outgoing_report_size_bytesOutgoing report size
outgoing-report.spf-reportcountstalwart.outgoing_report.spf_report ({event})stalwart_outgoing_report_spf_report_totalSPF report sent
outgoing-report.spf-rate-limitedcountstalwart.outgoing_report.spf_rate_limited ({event})stalwart_outgoing_report_spf_rate_limited_totalSPF report rate limited
outgoing-report.dkim-reportcountstalwart.outgoing_report.dkim_report ({event})stalwart_outgoing_report_dkim_report_totalDKIM report sent
outgoing-report.dkim-rate-limitedcountstalwart.outgoing_report.dkim_rate_limited ({event})stalwart_outgoing_report_dkim_rate_limited_totalDKIM report rate limited
outgoing-report.dmarc-reportcountstalwart.outgoing_report.dmarc_report ({event})stalwart_outgoing_report_dmarc_report_totalDMARC report sent
outgoing-report.dmarc-rate-limitedcountstalwart.outgoing_report.dmarc_rate_limited ({event})stalwart_outgoing_report_dmarc_rate_limited_totalDMARC report rate limited
outgoing-report.dmarc-aggregate-reportcountstalwart.outgoing_report.dmarc_aggregate_report ({event})stalwart_outgoing_report_dmarc_aggregate_report_totalDMARC aggregate is being prepared
outgoing-report.tls-aggregatecountstalwart.outgoing_report.tls_aggregate ({event})stalwart_outgoing_report_tls_aggregate_totalTLS aggregate report is being prepared
outgoing-report.http-submissioncountstalwart.outgoing_report.http_submission ({event})stalwart_outgoing_report_http_submission_totalReport submitted via HTTP
outgoing-report.unauthorized-reporting-addresscountstalwart.outgoing_report.unauthorized_reporting_address ({event})stalwart_outgoing_report_unauthorized_reporting_address_totalUnauthorized reporting address
outgoing-report.reporting-address-validation-errorcountstalwart.outgoing_report.reporting_address_validation_error ({event})stalwart_outgoing_report_reporting_address_validation_error_totalError validating reporting address
outgoing-report.not-foundcountstalwart.outgoing_report.not_found ({event})stalwart_outgoing_report_not_found_totalReport not found
outgoing-report.submission-errorcountstalwart.outgoing_report.submission_error ({event})stalwart_outgoing_report_submission_error_totalError submitting report
outgoing-report.no-recipients-foundcountstalwart.outgoing_report.no_recipients_found ({event})stalwart_outgoing_report_no_recipients_found_totalNo recipients found for report
MetricUnitOpenTelemetryPrometheusDescription
pop3.request-timemillisecondsstalwart.pop3.request_time (s)stalwart_pop3_request_time_secondsPOP3 connection duration
pop3.active-connectionsconnectionsstalwart.pop3.active_connections ({connection})stalwart_pop3_active_connectionsActive POP3 connections
pop3.connection-startcountstalwart.pop3.connection_start ({event})stalwart_pop3_connection_start_totalPOP3 connection started
pop3.connection-endcountstalwart.pop3.connection_end ({event})stalwart_pop3_connection_end_totalPOP3 connection ended
MetricUnitOpenTelemetryPrometheusDescription
push-subscription.successcountstalwart.push_subscription.success ({event})stalwart_push_subscription_success_totalPush subscription successful
push-subscription.errorcountstalwart.push_subscription.error ({event})stalwart_push_subscription_error_totalPush subscription error
push-subscription.not-foundcountstalwart.push_subscription.not_found ({event})stalwart_push_subscription_not_found_totalPush subscription not found
MetricUnitOpenTelemetryPrometheusDescription
queue.countmessagesstalwart.queue.messages ({message})stalwart_queue_messagesTotal number of messages in the queue
queue.message-queuedcountstalwart.queue.message_queued ({event})stalwart_queue_message_queued_totalQueued message for delivery
queue.authenticated-message-queuedcountstalwart.queue.authenticated_message_queued ({event})stalwart_queue_authenticated_message_queued_totalQueued message submission for delivery
queue.report-queuedcountstalwart.queue.report_queued ({event})stalwart_queue_report_queued_totalQueued report for delivery
queue.dsn-queuedcountstalwart.queue.dsn_queued ({event})stalwart_queue_dsn_queued_totalQueued DSN for delivery
queue.autogenerated-queuedcountstalwart.queue.autogenerated_queued ({event})stalwart_queue_autogenerated_queued_totalQueued autogenerated message for delivery
queue.rescheduledcountstalwart.queue.rescheduled ({event})stalwart_queue_rescheduled_totalMessage rescheduled for delivery
queue.blob-not-foundcountstalwart.queue.blob_not_found ({event})stalwart_queue_blob_not_found_totalMessage blob not found
queue.rate-limit-exceededcountstalwart.queue.rate_limit_exceeded ({event})stalwart_queue_rate_limit_exceeded_totalRate limit exceeded
queue.concurrency-limit-exceededcountstalwart.queue.concurrency_limit_exceeded ({event})stalwart_queue_concurrency_limit_exceeded_totalConcurrency limit exceeded
queue.quota-exceededcountstalwart.queue.quota_exceeded ({event})stalwart_queue_quota_exceeded_totalQuota exceeded
queue.back-pressurecountstalwart.queue.back_pressure ({event})stalwart_queue_back_pressure_totalQueue backpressure detected
MetricUnitOpenTelemetryPrometheusDescription
resource.not-foundcountstalwart.resource.not_found ({event})stalwart_resource_not_found_totalResource not found
resource.bad-parameterscountstalwart.resource.bad_parameters ({event})stalwart_resource_bad_parameters_totalBad resource parameters
resource.errorcountstalwart.resource.error ({event})stalwart_resource_error_totalResource error
MetricUnitOpenTelemetryPrometheusDescription
search-index.index-timemillisecondsstalwart.search_index.index_time (s)stalwart_search_index_index_time_secondsTime to build and write one batch of documents to the full-text index
search-index.pending-emaildocumentsstalwart.search_index.pending_email ({document})stalwart_search_index_pending_emailE-mail messages waiting to be indexed
search-index.pending-calendardocumentsstalwart.search_index.pending_calendar ({document})stalwart_search_index_pending_calendarCalendar events waiting to be indexed
search-index.pending-contactsdocumentsstalwart.search_index.pending_contacts ({document})stalwart_search_index_pending_contactsContacts waiting to be indexed
search-index.pending-filedocumentsstalwart.search_index.pending_file ({document})stalwart_search_index_pending_fileFiles waiting to be indexed
search-index.pending-tracingdocumentsstalwart.search_index.pending_tracing ({document})stalwart_search_index_pending_tracingTraces waiting to be indexed
search-index.partition-retrycountstalwart.search_index.partition_retry ({event})stalwart_search_index_partition_retry_totalIndex partition will be retried
search-index.batch-indexedcountstalwart.search_index.batch_indexed ({event})stalwart_search_index_batch_indexed_totalSearch index batch written
search-index.document-truncatedcountstalwart.search_index.document_truncated ({event})stalwart_search_index_document_truncated_totalSearch document truncated
MetricUnitOpenTelemetryPrometheusDescription
security.authentication-bancountstalwart.security.authentication_ban ({event})stalwart_security_authentication_ban_totalBanned due to authentication errors
security.abuse-bancountstalwart.security.abuse_ban ({event})stalwart_security_abuse_ban_totalBanned due to abuse
security.scan-bancountstalwart.security.scan_ban ({event})stalwart_security_scan_ban_totalBanned due to scan
security.loiter-bancountstalwart.security.loiter_ban ({event})stalwart_security_loiter_ban_totalBanned due to loitering
security.ip-blockedcountstalwart.security.ip_blocked ({event})stalwart_security_ip_blocked_totalBlocked IP address
security.unauthorizedcountstalwart.security.unauthorized ({event})stalwart_security_unauthorized_totalUnauthorized access
MetricUnitOpenTelemetryPrometheusDescription
server.memorybytesstalwart.server.memory (By)stalwart_server_memory_bytesServer memory usage
server.buffered-memory-smtpbytesstalwart.server.buffered_memory_smtp (By)stalwart_server_buffered_memory_smtp_bytesMemory reserved for buffering inbound SMTP messages
server.buffered-memory-readbytesstalwart.server.buffered_memory_read (By)stalwart_server_buffered_memory_read_bytesMemory reserved for blobs read from the blob store
server.thread-errorcountstalwart.server.thread_error ({event})stalwart_server_thread_error_totalServer thread error
MetricUnitOpenTelemetryPrometheusDescription
sieve.request-timemillisecondsstalwart.sieve.request_time (s)stalwart_sieve_request_time_secondsManageSieve connection duration
sieve.active-connectionsconnectionsstalwart.sieve.active_connections ({connection})stalwart_sieve_active_connectionsActive ManageSieve connections
sieve.action-acceptcountstalwart.sieve.action_accept ({event})stalwart_sieve_action_accept_totalSieve action: Accept
sieve.action-accept-replacecountstalwart.sieve.action_accept_replace ({event})stalwart_sieve_action_accept_replace_totalSieve action: Accept and replace
sieve.action-discardcountstalwart.sieve.action_discard ({event})stalwart_sieve_action_discard_totalSieve action: Discard
sieve.action-rejectcountstalwart.sieve.action_reject ({event})stalwart_sieve_action_reject_totalSieve action: Reject
sieve.send-messagecountstalwart.sieve.send_message ({event})stalwart_sieve_send_message_totalSieve sending message
sieve.message-too-largecountstalwart.sieve.message_too_large ({event})stalwart_sieve_message_too_large_totalSieve message too large
sieve.runtime-errorcountstalwart.sieve.runtime_error ({event})stalwart_sieve_runtime_error_totalSieve runtime error
sieve.unexpected-errorcountstalwart.sieve.unexpected_error ({event})stalwart_sieve_unexpected_error_totalUnexpected Sieve error
sieve.not-supportedcountstalwart.sieve.not_supported ({event})stalwart_sieve_not_supported_totalSieve action not supported
sieve.quota-exceededcountstalwart.sieve.quota_exceeded ({event})stalwart_sieve_quota_exceeded_totalSieve quota exceeded
MetricUnitOpenTelemetryPrometheusDescription
smtp.request-timemillisecondsstalwart.smtp.request_time (s)stalwart_smtp_request_time_secondsSMTP connection duration
smtp.active-connectionsconnectionsstalwart.smtp.active_connections ({connection})stalwart_smtp_active_connectionsActive SMTP connections
smtp.connection-startcountstalwart.smtp.connection_start ({event})stalwart_smtp_connection_start_totalSMTP connection started
smtp.connection-endcountstalwart.smtp.connection_end ({event})stalwart_smtp_connection_end_totalSMTP connection ended
smtp.errorcountstalwart.smtp.error ({event})stalwart_smtp_error_totalSMTP error occurred
smtp.concurrency-limit-exceededcountstalwart.smtp.concurrency_limit_exceeded ({event})stalwart_smtp_concurrency_limit_exceeded_totalConcurrency limit exceeded
smtp.transfer-limit-exceededcountstalwart.smtp.transfer_limit_exceeded ({event})stalwart_smtp_transfer_limit_exceeded_totalTransfer limit exceeded
smtp.rate-limit-exceededcountstalwart.smtp.rate_limit_exceeded ({event})stalwart_smtp_rate_limit_exceeded_totalRate limit exceeded
smtp.time-limit-exceededcountstalwart.smtp.time_limit_exceeded ({event})stalwart_smtp_time_limit_exceeded_totalTime limit exceeded
smtp.message-parse-failedcountstalwart.smtp.message_parse_failed ({event})stalwart_smtp_message_parse_failed_totalMessage parsing failed
smtp.message-too-largecountstalwart.smtp.message_too_large ({event})stalwart_smtp_message_too_large_totalMessage too large
smtp.loop-detectedcountstalwart.smtp.loop_detected ({event})stalwart_smtp_loop_detected_totalMail loop detected
smtp.multiple-from-domainscountstalwart.smtp.multiple_from_domains ({event})stalwart_smtp_multiple_from_domains_totalMultiple From domains
smtp.dkim-passcountstalwart.smtp.dkim_pass ({event})stalwart_smtp_dkim_pass_totalDKIM verification passed
smtp.dkim-failcountstalwart.smtp.dkim_fail ({event})stalwart_smtp_dkim_fail_totalDKIM verification failed
smtp.dkim2-passcountstalwart.smtp.dkim2_pass ({event})stalwart_smtp_dkim2_pass_totalDKIM2 verification passed
smtp.dkim2-failcountstalwart.smtp.dkim2_fail ({event})stalwart_smtp_dkim2_fail_totalDKIM2 verification failed
smtp.dkim2-dsn-rejectedcountstalwart.smtp.dkim2_dsn_rejected ({event})stalwart_smtp_dkim2_dsn_rejected_totalDKIM2 DSN rejected
smtp.arc-passcountstalwart.smtp.arc_pass ({event})stalwart_smtp_arc_pass_totalARC verification passed
smtp.arc-failcountstalwart.smtp.arc_fail ({event})stalwart_smtp_arc_fail_totalARC verification failed
smtp.spf-ehlo-passcountstalwart.smtp.spf_ehlo_pass ({event})stalwart_smtp_spf_ehlo_pass_totalSPF EHLO check passed
smtp.spf-ehlo-failcountstalwart.smtp.spf_ehlo_fail ({event})stalwart_smtp_spf_ehlo_fail_totalSPF EHLO check failed
smtp.spf-from-passcountstalwart.smtp.spf_from_pass ({event})stalwart_smtp_spf_from_pass_totalSPF From check passed
smtp.spf-from-failcountstalwart.smtp.spf_from_fail ({event})stalwart_smtp_spf_from_fail_totalSPF From check failed
smtp.dmarc-passcountstalwart.smtp.dmarc_pass ({event})stalwart_smtp_dmarc_pass_totalDMARC check passed
smtp.dmarc-failcountstalwart.smtp.dmarc_fail ({event})stalwart_smtp_dmarc_fail_totalDMARC check failed
smtp.iprev-passcountstalwart.smtp.iprev_pass ({event})stalwart_smtp_iprev_pass_totalIPREV check passed
smtp.iprev-failcountstalwart.smtp.iprev_fail ({event})stalwart_smtp_iprev_fail_totalIPREV check failed
smtp.too-many-messagescountstalwart.smtp.too_many_messages ({event})stalwart_smtp_too_many_messages_totalToo many messages
smtp.invalid-ehlocountstalwart.smtp.invalid_ehlo ({event})stalwart_smtp_invalid_ehlo_totalInvalid EHLO command
smtp.did-not-say-ehlocountstalwart.smtp.did_not_say_ehlo ({event})stalwart_smtp_did_not_say_ehlo_totalClient did not say EHLO
smtp.mail-from-unauthenticatedcountstalwart.smtp.mail_from_unauthenticated ({event})stalwart_smtp_mail_from_unauthenticated_totalMAIL FROM without authentication
smtp.mail-from-unauthorizedcountstalwart.smtp.mail_from_unauthorized ({event})stalwart_smtp_mail_from_unauthorized_totalMAIL FROM unauthorized
smtp.mail-from-missingcountstalwart.smtp.mail_from_missing ({event})stalwart_smtp_mail_from_missing_totalMAIL FROM address missing
smtp.multiple-mail-fromcountstalwart.smtp.multiple_mail_from ({event})stalwart_smtp_multiple_mail_from_totalMultiple MAIL FROM commands
smtp.mailbox-does-not-existcountstalwart.smtp.mailbox_does_not_exist ({event})stalwart_smtp_mailbox_does_not_exist_totalMailbox does not exist
smtp.relay-not-allowedcountstalwart.smtp.relay_not_allowed ({event})stalwart_smtp_relay_not_allowed_totalRelay not allowed
smtp.rcpt-to-duplicatecountstalwart.smtp.rcpt_to_duplicate ({event})stalwart_smtp_rcpt_to_duplicate_totalDuplicate RCPT TO
smtp.rcpt-to-missingcountstalwart.smtp.rcpt_to_missing ({event})stalwart_smtp_rcpt_to_missing_totalRCPT TO address missing
smtp.too-many-recipientscountstalwart.smtp.too_many_recipients ({event})stalwart_smtp_too_many_recipients_totalToo many recipients
smtp.too-many-invalid-rcptcountstalwart.smtp.too_many_invalid_rcpt ({event})stalwart_smtp_too_many_invalid_rcpt_totalToo many invalid recipients
smtp.auth-mechanism-not-supportedcountstalwart.smtp.auth_mechanism_not_supported ({event})stalwart_smtp_auth_mechanism_not_supported_totalAuth mechanism not supported
smtp.auth-exchange-too-longcountstalwart.smtp.auth_exchange_too_long ({event})stalwart_smtp_auth_exchange_too_long_totalAuth exchange too long
smtp.command-not-implementedcountstalwart.smtp.command_not_implemented ({event})stalwart_smtp_command_not_implemented_totalCommand not implemented
smtp.invalid-commandcountstalwart.smtp.invalid_command ({event})stalwart_smtp_invalid_command_totalInvalid command
smtp.syntax-errorcountstalwart.smtp.syntax_error ({event})stalwart_smtp_syntax_error_totalSyntax error
smtp.request-too-largecountstalwart.smtp.request_too_large ({event})stalwart_smtp_request_too_large_totalRequest too large
MetricUnitOpenTelemetryPrometheusDescription
spam.pyzor-errorcountstalwart.spam.pyzor_error ({event})stalwart_spam_pyzor_error_totalPyzor error
spam.dnsbl-errorcountstalwart.spam.dnsbl_error ({event})stalwart_spam_dnsbl_error_totalError querying DNSBL
spam.train-completedcountstalwart.spam.train_completed ({event})stalwart_spam_train_completed_totalSpam classifier training completed
spam.train-sample-addedcountstalwart.spam.train_sample_added ({event})stalwart_spam_train_sample_added_totalNew training sample added
spam.classifycountstalwart.spam.classify ({event})stalwart_spam_classify_totalClassifying message for spam
spam.model-not-readycountstalwart.spam.model_not_ready ({event})stalwart_spam_model_not_ready_totalSpam classifier model not ready
MetricUnitOpenTelemetryPrometheusDescription
spf.passcountstalwart.spf.pass ({event})stalwart_spf_pass_totalSPF check passed
spf.failcountstalwart.spf.fail ({event})stalwart_spf_fail_totalSPF check failed
spf.soft-failcountstalwart.spf.soft_fail ({event})stalwart_spf_soft_fail_totalSPF soft fail
spf.neutralcountstalwart.spf.neutral ({event})stalwart_spf_neutral_totalSPF neutral result
spf.temp-errorcountstalwart.spf.temp_error ({event})stalwart_spf_temp_error_totalSPF temporary error
spf.perm-errorcountstalwart.spf.perm_error ({event})stalwart_spf_perm_error_totalSPF permanent error
spf.nonecountstalwart.spf.none ({event})stalwart_spf_none_totalNo SPF record
MetricUnitOpenTelemetryPrometheusDescription
store.data-read-timemillisecondsstalwart.store.data_read_time (s)stalwart_store_data_read_time_secondsData store read time
store.data-write-timemillisecondsstalwart.store.data_write_time (s)stalwart_store_data_write_time_secondsData store write time
store.blob-read-timemillisecondsstalwart.store.blob_read_time (s)stalwart_store_blob_read_time_secondsBlob store read time
store.blob-write-timemillisecondsstalwart.store.blob_write_time (s)stalwart_store_blob_write_time_secondsBlob store write time
store.assert-value-failedcountstalwart.store.assert_value_failed ({event})stalwart_store_assert_value_failed_totalAnother process modified the record
store.foundationdb-errorcountstalwart.store.foundationdb_error ({event})stalwart_store_foundationdb_error_totalFoundationDB error
store.mysql-errorcountstalwart.store.mysql_error ({event})stalwart_store_mysql_error_totalMySQL error
store.postgresql-errorcountstalwart.store.postgresql_error ({event})stalwart_store_postgresql_error_totalPostgreSQL error
store.rocksdb-errorcountstalwart.store.rocksdb_error ({event})stalwart_store_rocksdb_error_totalRocksDB error
store.sqlite-errorcountstalwart.store.sqlite_error ({event})stalwart_store_sqlite_error_totalSQLite error
store.ldap-errorcountstalwart.store.ldap_error ({event})stalwart_store_ldap_error_totalLDAP error
store.elasticsearch-errorcountstalwart.store.elasticsearch_error ({event})stalwart_store_elasticsearch_error_totalElasticSearch error
store.redis-errorcountstalwart.store.redis_error ({event})stalwart_store_redis_error_totalRedis error
store.s3-errorcountstalwart.store.s3_error ({event})stalwart_store_s3_error_totalS3 error
store.azure-errorcountstalwart.store.azure_error ({event})stalwart_store_azure_error_totalAzure error
store.filesystem-errorcountstalwart.store.filesystem_error ({event})stalwart_store_filesystem_error_totalFilesystem error
store.pool-errorcountstalwart.store.pool_error ({event})stalwart_store_pool_error_totalConnection pool error
store.data-corruptioncountstalwart.store.data_corruption ({event})stalwart_store_data_corruption_totalData corruption detected
store.decompress-errorcountstalwart.store.decompress_error ({event})stalwart_store_decompress_error_totalDecompression error
store.deserialize-errorcountstalwart.store.deserialize_error ({event})stalwart_store_deserialize_error_totalDeserialization error
store.not-foundcountstalwart.store.not_found ({event})stalwart_store_not_found_totalRecord not found in database
store.not-configuredcountstalwart.store.not_configured ({event})stalwart_store_not_configured_totalStore not configured
store.not-supportedcountstalwart.store.not_supported ({event})stalwart_store_not_supported_totalOperation not supported by store
store.unexpected-errorcountstalwart.store.unexpected_error ({event})stalwart_store_unexpected_error_totalUnexpected store error
store.crypto-errorcountstalwart.store.crypto_error ({event})stalwart_store_crypto_error_totalStore crypto error
store.http-store-errorcountstalwart.store.http_store_error ({event})stalwart_store_http_store_error_totalError updating HTTP store
store.blob-missing-markercountstalwart.store.blob_missing_marker ({event})stalwart_store_blob_missing_marker_totalBlob missing marker
store.data-writecountstalwart.store.data_write ({event})stalwart_store_data_write_totalWrite batch operation
store.data-iteratecountstalwart.store.data_iterate ({event})stalwart_store_data_iterate_totalData store iteration operation
store.blob-readcountstalwart.store.blob_read ({event})stalwart_store_blob_read_totalBlob read operation
store.blob-writecountstalwart.store.blob_write ({event})stalwart_store_blob_write_totalBlob write operation
store.blob-deletecountstalwart.store.blob_delete ({event})stalwart_store_blob_delete_totalBlob delete operation
MetricUnitOpenTelemetryPrometheusDescription
task-manager.pendingtasksstalwart.task_manager.pending ({task})stalwart_task_manager_pendingTasks queued in the task manager
task-manager.duetasksstalwart.task_manager.due ({task})stalwart_task_manager_dueTasks due for execution that have not run yet
task-manager.task-failedcountstalwart.task_manager.task_failed ({event})stalwart_task_manager_task_failed_totalTask failed permanently
task-manager.task-retrycountstalwart.task_manager.task_retry ({event})stalwart_task_manager_task_retry_totalTask will be retried
task-manager.task-stalledcountstalwart.task_manager.task_stalled ({event})stalwart_task_manager_task_stalled_totalTask stalled
task-manager.task-expiredcountstalwart.task_manager.task_expired ({event})stalwart_task_manager_task_expired_totalTask expired
task-manager.blob-not-foundcountstalwart.task_manager.blob_not_found ({event})stalwart_task_manager_blob_not_found_totalBlob not found for task
task-manager.metadata-not-foundcountstalwart.task_manager.metadata_not_found ({event})stalwart_task_manager_metadata_not_found_totalMetadata not found for task
MetricUnitOpenTelemetryPrometheusDescription
telemetry.alert-eventcountstalwart.telemetry.alert_event ({event})stalwart_telemetry_alert_event_totalAlert event triggered
telemetry.alert-messagecountstalwart.telemetry.alert_message ({event})stalwart_telemetry_alert_message_totalAlert message sent
telemetry.log-errorcountstalwart.telemetry.log_error ({event})stalwart_telemetry_log_error_totalLog collector error
telemetry.webhook-errorcountstalwart.telemetry.webhook_error ({event})stalwart_telemetry_webhook_error_totalWebhook collector error
telemetry.otel-exporter-errorcountstalwart.telemetry.otel_exporter_error ({event})stalwart_telemetry_otel_exporter_error_totalOpenTelemetry exporter error
telemetry.otel-metrics-exporter-errorcountstalwart.telemetry.otel_metrics_exporter_error ({event})stalwart_telemetry_otel_metrics_exporter_error_totalOpenTelemetry metrics exporter error
telemetry.prometheus-exporter-errorcountstalwart.telemetry.prometheus_exporter_error ({event})stalwart_telemetry_prometheus_exporter_error_totalPrometheus exporter error
telemetry.journal-errorcountstalwart.telemetry.journal_error ({event})stalwart_telemetry_journal_error_totalJournal collector error
telemetry.events-droppedcountstalwart.telemetry.events_dropped ({event})stalwart_telemetry_events_dropped_totalTelemetry events dropped
MetricUnitOpenTelemetryPrometheusDescription
tls.handshake-errorcountstalwart.tls.handshake_error ({event})stalwart_tls_handshake_error_totalTLS handshake error
MetricUnitOpenTelemetryPrometheusDescription
user.countusersstalwart.users ({user})stalwart_usersTotal number of users