bench-metrics
is a Prometheus exporter that exports histograms for the duration of queries send to a Prometheus-compatible API (Thanos, VictoriaMetrics, ...).
To install bench-metrics
on your Kubernetes cluster, apply the Kubernetes manifests located in the manifests
folder:
kubectl apply -f manifests/
Alternatively, the application can be compiled with cargo build
.
Configuration is done using environment variables (envrc.example) or config.yaml
.
Start with:
./bench-metrics
The application is listening on port 9898.
bench-metrics
supports the following Prometheus-compatible APIs. Tested with:
- Thanos
- VictoriaMetrics
# HELP benchem_prom_timeseries Number of timeseries return by prometheus.
# TYPE benchem_prom_timeseries gauge
benchem_prom_timeseries{query="count_up"} 1
benchem_prom_timeseries{query="example"} 7
benchem_prom_timeseries{query="memory_usage"} 33
benchem_prom_timeseries{query="min_over_time__up"} 1
benchem_prom_timeseries{query="unavailable_apiservice"} 1
# HELP benchem_prometheus_request_duration_seconds The prometheus request latencies in seconds.
# TYPE benchem_prometheus_request_duration_seconds histogram
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.005"} 0
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.01"} 0
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.025"} 0
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.05"} 3
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.1"} 3
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.25"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="0.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="2.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="10"} 4
benchem_prometheus_request_duration_seconds_bucket{query="count_up",le="+Inf"} 4
benchem_prometheus_request_duration_seconds_sum{query="count_up"} 0.22450714
benchem_prometheus_request_duration_seconds_count{query="count_up"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.005"} 0
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.01"} 0
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.025"} 0
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.05"} 0
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.1"} 1
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.25"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="0.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="2.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="10"} 4
benchem_prometheus_request_duration_seconds_bucket{query="example",le="+Inf"} 4
benchem_prometheus_request_duration_seconds_sum{query="example"} 0.5261183490000001
benchem_prometheus_request_duration_seconds_count{query="example"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.005"} 0
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.01"} 0
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.025"} 0
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.05"} 0
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.1"} 2
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.25"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="0.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="2.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="10"} 4
benchem_prometheus_request_duration_seconds_bucket{query="memory_usage",le="+Inf"} 4
benchem_prometheus_request_duration_seconds_sum{query="memory_usage"} 0.465249465
benchem_prometheus_request_duration_seconds_count{query="memory_usage"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.005"} 0
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.01"} 0
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.025"} 0
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.05"} 3
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.25"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="0.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="2.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="10"} 4
benchem_prometheus_request_duration_seconds_bucket{query="min_over_time__up",le="+Inf"} 4
benchem_prometheus_request_duration_seconds_sum{query="min_over_time__up"} 0.16513146899999998
benchem_prometheus_request_duration_seconds_count{query="min_over_time__up"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.005"} 0
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.01"} 0
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.025"} 0
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.05"} 2
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.25"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="0.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="1"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="2.5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="5"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="10"} 4
benchem_prometheus_request_duration_seconds_bucket{query="unavailable_apiservice",le="+Inf"} 4
benchem_prometheus_request_duration_seconds_sum{query="unavailable_apiservice"} 0.203665646
benchem_prometheus_request_duration_seconds_count{query="unavailable_apiservice"} 4
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 17
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 23588864
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1690617314
# HELP process_threads Number of OS threads in the process.
# TYPE process_threads gauge
process_threads 6
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 371343360
Contributions are welcome! If you find a bug or have a feature request, please open an issue on GitHub. If you want to contribute code, please fork the repository and submit a pull request.
Use lefhook to lint pre-commit. After installation it can be enabled with lefthook install -f
.
bench-metrics
is licensed under the MIT License. See the LICENSE file for details.