Skip to content

GET /metrics

Exports various counters, gauges and other metrics using the Prometheus Text Exposition Format.

Access to this endpoint requires Trusted IP authentication. HTTP authentication is not permitted.

See also metrics.json.

Since: Version 2024.06.10-84e84b89

The functionality described in this outlined box requires version 2024.06.10-84e84b89 of KumoMTA, or a more recent version.


You may specify an optional prefix GET parameter to have the reported metric names be prefixed with a string. For example, you might use http://localhost:8000/metrics?prefix=kumomta_. This can be helpful when it comes to matching or discovering kumomta specific metrics, especially in a busy prometheus instance.

Example data

Here's an example of the shape of the data. The precise set of counters will vary as we continue to enhance KumoMTA.

There are currently more than 100 available metrics. You can see the current list by querying the endpoint with no arguments:

curl http://localhost:8000/metrics
# HELP connection_count number of active connections
# TYPE connection_count gauge
connection_count{service="esmtp_listener"} 0
# HELP disk_free_bytes number of available bytes in a monitored location
# TYPE disk_free_bytes gauge
disk_free_bytes{name="data spool"} 15658725376
disk_free_bytes{name="log dir /var/log/kumomta"} 15658725376
disk_free_bytes{name="meta spool"} 15658725376
# HELP disk_free_inodes number of available inodes in a monitored location
# TYPE disk_free_inodes gauge
disk_free_inodes{name="data spool"} 3056405
disk_free_inodes{name="log dir /var/log/kumomta"} 3056405
disk_free_inodes{name="meta spool"} 3056405
# HELP disk_free_inodes_percent percentage of available inodes in a monitored location
# TYPE disk_free_inodes_percent gauge
disk_free_inodes_percent{name="data spool"} 94
disk_free_inodes_percent{name="log dir /var/log/kumomta"} 94
disk_free_inodes_percent{name="meta spool"} 94
# HELP disk_free_percent percentage of available bytes in a monitored location
# TYPE disk_free_percent gauge
disk_free_percent{name="data spool"} 60
disk_free_percent{name="log dir /var/log/kumomta"} 60
disk_free_percent{name="meta spool"} 60
# HELP log_submit_latency latency of log event submission operations
# TYPE log_submit_latency histogram
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.005"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.01"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.025"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.05"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.1"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.25"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="0.5"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="1"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="2.5"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="5"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="10"} 0
log_submit_latency_bucket{logger="dir-/var/log/kumomta",le="+Inf"} 0
log_submit_latency_sum{logger="dir-/var/log/kumomta"} 0
log_submit_latency_count{logger="dir-/var/log/kumomta"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.005"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.01"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.025"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.05"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.1"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.25"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="0.5"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="1"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="2.5"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="5"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="10"} 0
log_submit_latency_bucket{logger="hook-http://127.0.0.1:8008.tsa.kumomta",le="+Inf"} 0
log_submit_latency_sum{logger="hook-http://127.0.0.1:8008.tsa.kumomta"} 0
log_submit_latency_count{logger="hook-http://127.0.0.1:8008.tsa.kumomta"} 0
# HELP lua_count the number of lua contexts currently alive
# TYPE lua_count gauge
lua_count 1
# HELP lua_event_latency how long a given lua event callback took
# TYPE lua_event_latency histogram
lua_event_latency_bucket{event="context-creation",le="0.005"} 0
lua_event_latency_bucket{event="context-creation",le="0.01"} 3
lua_event_latency_bucket{event="context-creation",le="0.025"} 3
lua_event_latency_bucket{event="context-creation",le="0.05"} 3
lua_event_latency_bucket{event="context-creation",le="0.1"} 3
lua_event_latency_bucket{event="context-creation",le="0.25"} 3
lua_event_latency_bucket{event="context-creation",le="0.5"} 3
lua_event_latency_bucket{event="context-creation",le="1"} 3
lua_event_latency_bucket{event="context-creation",le="2.5"} 3
lua_event_latency_bucket{event="context-creation",le="5"} 3
lua_event_latency_bucket{event="context-creation",le="10"} 3
lua_event_latency_bucket{event="context-creation",le="+Inf"} 3
lua_event_latency_sum{event="context-creation"} 0.017253747
lua_event_latency_count{event="context-creation"} 3
lua_event_latency_bucket{event="init",le="0.005"} 0
lua_event_latency_bucket{event="init",le="0.01"} 0
lua_event_latency_bucket{event="init",le="0.025"} 0
lua_event_latency_bucket{event="init",le="0.05"} 0
lua_event_latency_bucket{event="init",le="0.1"} 0
lua_event_latency_bucket{event="init",le="0.25"} 0
lua_event_latency_bucket{event="init",le="0.5"} 1
lua_event_latency_bucket{event="init",le="1"} 1
lua_event_latency_bucket{event="init",le="2.5"} 1
lua_event_latency_bucket{event="init",le="5"} 1
lua_event_latency_bucket{event="init",le="10"} 1
lua_event_latency_bucket{event="init",le="+Inf"} 1
lua_event_latency_sum{event="init"} 0.442427973
lua_event_latency_count{event="init"} 1
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.005"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.01"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.025"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.05"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.1"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.25"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="0.5"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="1"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="2.5"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="5"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="10"} 0
lua_event_latency_bucket{event="kumo.tsa.suspension.subscriber",le="+Inf"} 0
lua_event_latency_sum{event="kumo.tsa.suspension.subscriber"} 0
lua_event_latency_count{event="kumo.tsa.suspension.subscriber"} 0
# HELP lua_load_count how many times the policy lua script has been loaded into a new context
# TYPE lua_load_count counter
lua_load_count 3
# HELP lua_spare_count the number of lua contexts available for reuse in the pool
# TYPE lua_spare_count gauge
lua_spare_count 0
# HELP memory_limit soft memory limit measured in bytes
# TYPE memory_limit gauge
memory_limit 1538067456
# HELP memory_usage number of bytes of used memory
# TYPE memory_usage gauge
memory_usage 320516096
# HELP thread_pool_parked number of parked(idle) threads in a thread pool
# TYPE thread_pool_parked gauge
thread_pool_parked{pool="localset"} 0
thread_pool_parked{pool="logging"} 1
# HELP thread_pool_size number of threads in a thread pool
# TYPE thread_pool_size gauge
thread_pool_size{pool="localset"} 1
thread_pool_size{pool="logging"} 1
# HELP tokio_budget_forced_yield_count Returns the number of times that tasks have been forced to yield back to the scheduler after exhausting their task budgets.
# TYPE tokio_budget_forced_yield_count counter
tokio_budget_forced_yield_count 0
# HELP tokio_elapsed Total amount of time elapsed since observing runtime metrics.
# TYPE tokio_elapsed counter
tokio_elapsed 1057.312763632
# HELP tokio_injection_queue_depth The number of tasks currently scheduled in the runtime’s injection queue.
# TYPE tokio_injection_queue_depth gauge
tokio_injection_queue_depth 0
# HELP tokio_io_driver_ready_count Returns the number of ready events processed by the runtime’s I/O driver.
# TYPE tokio_io_driver_ready_count counter
tokio_io_driver_ready_count 0
# HELP tokio_num_remote_schedules The number of tasks scheduled from outside of the runtime.
# TYPE tokio_num_remote_schedules counter
tokio_num_remote_schedules 0
# HELP tokio_total_busy_duration The amount of time worker threads were busy.
# TYPE tokio_total_busy_duration counter
tokio_total_busy_duration 0
# HELP tokio_total_local_queue_depth The total number of tasks currently scheduled in workers’ local queues.
# TYPE tokio_total_local_queue_depth gauge
tokio_total_local_queue_depth 0
# HELP tokio_total_local_schedule_count The number of tasks scheduled from worker threads.
# TYPE tokio_total_local_schedule_count counter
tokio_total_local_schedule_count 0
# HELP tokio_total_noop_count The number of times worker threads unparked but performed no work before parking again.
# TYPE tokio_total_noop_count counter
tokio_total_noop_count 0
# HELP tokio_total_overflow_count The number of times worker threads saturated their local queues.
# TYPE tokio_total_overflow_count counter
tokio_total_overflow_count 0
# HELP tokio_total_park_count The number of times worker threads parked.
# TYPE tokio_total_park_count counter
tokio_total_park_count 0
# HELP tokio_total_polls_count The number of tasks that have been polled across all worker threads.
# TYPE tokio_total_polls_count counter
tokio_total_polls_count 0
# HELP tokio_total_steal_count The number of tasks worker threads stole from another worker thread.
# TYPE tokio_total_steal_count counter
tokio_total_steal_count 0
# HELP tokio_total_steal_operations The number of times worker threads stole tasks from another worker thread.
# TYPE tokio_total_steal_operations counter
tokio_total_steal_operations 0
# HELP tokio_workers_count The number of worker threads used by the runtime.
# TYPE tokio_workers_count gauge
tokio_workers_count 1
# HELP total_connections_denied total number of connections rejected due to load shedding or concurrency limits
# TYPE total_connections_denied counter
total_connections_denied{service="esmtp_listener"} 0