Files
kumomta/docs/reference/proxy-server-metrics.json
2026-03-04 08:03:21 +00:00

567 lines
19 KiB
JSON

[
{
"name": "disk_free_bytes",
"help": "number of available bytes in a monitored location",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "disk_free_inodes",
"help": "number of available inodes in a monitored location",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "disk_free_inodes_percent",
"help": "percentage of available inodes in a monitored location",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "disk_free_percent",
"help": "percentage of available bytes in a monitored location",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "dns_mx_resolve_cache_hit",
"help": "Total number of MailExchanger::resolve calls satisfied by level 1 cache.",
"doc": "Redundant with the newer [lruttl_hit_count{cache_name=\"dns_resolver_mx\"}](lruttl_hit_count.md)\nmetric.",
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "dns_mx_resolve_cache_miss",
"help": "Total number of MailExchanger::resolve calls that resulted in an MX DNS request to the next level of cache",
"doc": "Redundant with the newer [lruttl_miss_count{cache_name=\"dns_resolver_mx\"}](lruttl_miss_count.md)\nmetric.",
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "dns_mx_resolve_in_progress",
"help": "number of `MailExchanger::resolve` calls currently in progress.",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "dns_mx_resolve_status_fail",
"help": "Total number of failed `MailExchanger::resolve` calls.",
"doc": "Spikes may indicate an issue with your DNS configuration\nor infrastructure, or may simply indicate that the traffic\nis destined for bogus addresses.",
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "dns_mx_resolve_status_ok",
"help": "Total number of successful `MailExchanger::resolve` calls",
"doc": null,
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_cache_size",
"help": "The number of items currently contained in an lruttl cache.",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Gauge",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_error_count",
"help": "how many times a lruttl cache population resulted in an error",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_evict_count",
"help": "how many times a lruttl cache evicted an item due to capacity constraints",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_expire_count",
"help": "how many times a lruttl cache removed an item due to ttl expiration",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_hit_count",
"help": "how many times a lruttl cache lookup was a hit for a given cache",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_insert_count",
"help": "how many times a lruttl cache was populated via unconditional insert",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_lookup_count",
"help": "How many times a lruttl cache lookup was initiated for a given cache.",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_miss_count",
"help": "how many times a lruttl cache lookup was a miss for a given cache",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_populated_count",
"help": "how many times a lruttl cache lookup resulted in performing the work to populate the entry",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_stale_count",
"help": "how many times a lruttl cache population was satisfied by a stale value",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lruttl_waiting_populate",
"help": "how many tasks are currently waiting for a cache entry to populate",
"doc": "The `cache_name` label identifies which cache. See [kumo.set_lruttl_cache_capacity](../../kumo/set_lruttl_cache_capacity.md) for a list of caches.",
"metric_type": "Gauge",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lua_count",
"help": "the number of lua contexts currently alive",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lua_event_latency",
"help": "how long a given lua event callback took",
"doc": null,
"metric_type": "Histogram",
"label_names": [
"event"
],
"buckets": [
0.005,
0.01,
0.025,
0.05,
0.1,
0.25,
0.5,
1.0,
2.5,
5.0,
10.0
],
"pruning": "NonPruning"
},
{
"name": "lua_event_started",
"help": "Incremented each time we start to call a lua event callback. Use lua_event_latency_count to track completed events",
"doc": null,
"metric_type": "Counter",
"label_names": [
"event"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lua_load_count",
"help": "how many times the policy lua script has been loaded into a new context",
"doc": null,
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "lua_spare_count",
"help": "the number of lua contexts available for reuse in the pool",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memoize_cache_hit_count",
"help": "How many times a memoize cache lookup was a hit for a given cache.",
"doc": "Redundant with the newer [lruttl_hit_count](lruttl_hit_count.md) metric.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memoize_cache_lookup_count",
"help": "How many times a memoize cache lookup was initiated for a given cache.",
"doc": "Redundant with the newer [lruttl_lookup_count](lruttl_lookup_count.md) metric.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memoize_cache_miss_count",
"help": "How many times a memoize cache lookup was a miss for a given cache",
"doc": "Redundant with the newer [lruttl_miss_count](lruttl_miss_count.md) metric.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memoize_cache_populated_count",
"help": "How many times a memoize cache lookup resulted in performing the work to populate the entry",
"doc": "Redundant with the newer [lruttl_populated_count](lruttl_populated_count.md) metric.",
"metric_type": "Counter",
"label_names": [
"cache_name"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_limit",
"help": "soft memory limit measured in bytes",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_low_count",
"help": "How many times the low memory threshold was exceeded.",
"doc": null,
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_low_thresh",
"help": "low memory threshold measured in bytes",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_over_limit_count",
"help": "how many times the soft memory limit was exceeded",
"doc": null,
"metric_type": "Counter",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_usage",
"help": "number of bytes of used memory (Resident Set Size)",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "memory_usage_rust",
"help": "number of bytes of used memory (allocated by Rust)",
"doc": null,
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "process_cpu_usage_normalized",
"help": "The sum of the process CPU usage for each CPU in the system, divided by the number of CPUs.",
"doc": "100% in this metric indicates that all CPU cores are 100% busy.\n\nThis metric is scoped to the service process, reflecting the CPU used only\nby the process and not the system as a whole.",
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "process_cpu_usage_sum",
"help": "The sum of the process CPU usage for each CPU in the system, can add up to more than 100%.",
"doc": "Each CPU has a value from 0-100% busy; a value of 100% in this metric\nindicates that the load is equivalent to one fully utilized CPU.\n\nA multi-CPU system can report more than 100% in this metric; a dual-CPU\nsystem reporting 200% indicates that both CPUs are fully utilized.\n\nSee process_cpu_usage_normalized for a version of this metric that scales from\n0% (totally idle) to 100% (totally saturated).\n\nThis metric is scoped to the service process, reflecting the CPU used only\nby the process and not the system as a whole.",
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_active_connections",
"help": "Current number of active proxy connections.",
"doc": "This gauge shows the number of connections currently being proxied.\nIt increments when a connection is accepted and decrements when\nthe connection closes (successfully or with error).",
"metric_type": "Gauge",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "Pruning"
},
{
"name": "proxy_bytes_client_to_dest_total",
"help": "Total bytes transferred from client to destination.",
"doc": "This counter tracks the total number of bytes flowing from proxy clients\nto their intended destinations (upstream direction).",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_bytes_dest_to_client_total",
"help": "Total bytes transferred from destination to client.",
"doc": "This counter tracks the total number of bytes flowing from destinations\nback to proxy clients (downstream direction).",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_connections_accepted_total",
"help": "Total number of incoming connections accepted by the proxy.",
"doc": "This counter increments each time a new client connection is accepted\nby a proxy listener, before any SOCKS5 handshake begins.",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_connections_completed_total",
"help": "Total number of proxy sessions that completed successfully.",
"doc": "This counter increments when a proxy session completes without error,\nmeaning the client connected, was proxied to the destination, and\nboth sides closed cleanly.",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_connections_failed_total",
"help": "Total number of connections that failed during handshake or proxying.",
"doc": "This counter increments when a connection fails due to handshake errors,\nauthentication failures, timeouts, or I/O errors during proxying.",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "proxy_outbound_connections_total",
"help": "Total number of outbound connections made to destinations.",
"doc": "This counter tracks connections by destination IP address.\nNote: This can create high cardinality if your proxy connects to many\nunique destinations. The metric uses a pruning counter registry to\nmitigate memory impact.",
"metric_type": "Counter",
"label_names": [
"listener",
"destination"
],
"buckets": [],
"pruning": "Pruning"
},
{
"name": "proxy_tls_handshake_failures_total",
"help": "Total number of TLS handshake failures.",
"doc": "This counter increments when TLS is enabled on a listener and\nthe TLS handshake with a client fails.",
"metric_type": "Counter",
"label_names": [
"listener"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "redis_operation_latency",
"help": "The latency of an operation talking to Redis.",
"doc": "{{since('2026.03.04-bb93ecb1')}}\n\nThe `service` key represents the redis server/service. It is not\na direct match to a server name as it is really a hash of the\noverall redis configuration information used in the client.\nIt might look something like:\n`redis://127.0.0.1:24419,redis://127.0.0.1:7779,redis://127.0.0.1:29469-2ce79dd1`\nfor a cluster configuration, or `redis://127.0.0.1:16267-f4da6e64`\nfor a single node cluster configuration.\nYou should anticipate that the `-HEX` suffix can and will change\nin an unspecified way as you vary the redis connection parameters.\n\nThe `operation` key indicates the operation, which can be a `ping`,\na `query` or a `script`.\n\n`status` will be either `ok` or `error` to indicate whether this\nis tracking a successful or failed operation.\n\nSince histograms track a count of operations, you can track the\nrate of `redis_operation_latency_count` where `status=error`\nto have an indication of the failure rate of redis operations.",
"metric_type": "Histogram",
"label_names": [
"service",
"operation",
"status"
],
"buckets": [
0.005,
0.01,
0.025,
0.05,
0.1,
0.25,
0.5,
1.0,
2.5,
5.0,
10.0
],
"pruning": "NonPruning"
},
{
"name": "system_cpu_usage_normalized",
"help": "The sum of the system-wide CPU usage for each CPU in the system, divided by the number of CPUs.",
"doc": "100% in this metric indicates that all CPU cores are 100% busy.\n\nThis metric is scoped to the system, reflecting the total load on the\nsystem, not just from the kumo related process(es).",
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "system_cpu_usage_sum",
"help": "The sum of the system-wide CPU usage for each CPU in the system, can add up to more than 100%.",
"doc": "Each CPU has a value from 0-100% busy; a value of 100% in this metric\nindicates that the load is equivalent to one fully utilized CPU.\n\nA multi-CPU system can report more than 100% in this metric; a dual-CPU\nsystem reporting 200% indicates that both CPUs are fully utilized.\n\nSee system_cpu_usage_normalized for a version of this metric that scales from\n0% (totally idle) to 100% (totally saturated).\n\nThis metric is scoped to the system, reflecting the total load on the\nsystem, not just from the kumo related process(es).",
"metric_type": "Gauge",
"label_names": [],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "thread_pool_parked",
"help": "number of parked (idle) threads in a thread pool",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"pool"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "thread_pool_size",
"help": "number of threads in a thread pool",
"doc": null,
"metric_type": "Gauge",
"label_names": [
"pool"
],
"buckets": [],
"pruning": "NonPruning"
},
{
"name": "user_lua_latency",
"help": "How many seconds something user-defined took to run in your lua policy.",
"doc": "This histogram is updated by policy scripts that employ the\n[kumo.time.start_timer](../../kumo.time/start_timer.md) function\nto record a duration in the policy.\n\nThe `label` is whatever you specified as the label(s) to the various\n`kumo.time.start_timer` calls in the policy.",
"metric_type": "Histogram",
"label_names": [
"label"
],
"buckets": [
0.005,
0.01,
0.025,
0.05,
0.1,
0.25,
0.5,
1.0,
2.5,
5.0,
10.0
],
"pruning": "NonPruning"
}
]