41 lines
1.2 KiB
Rust
41 lines
1.2 KiB
Rust
use metrics_exporter_prometheus::{Matcher, PrometheusBuilder};
|
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
|
use std::time::Duration;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct PrometheusConfig {
|
|
pub port: u16,
|
|
pub host: String,
|
|
}
|
|
|
|
impl Default for PrometheusConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
port: 29000,
|
|
host: "0.0.0.0".to_string(),
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn start_prometheus(config: PrometheusConfig) {
|
|
let duration_matcher = Matcher::Suffix(String::from("duration"));
|
|
let duration_bucket = [
|
|
0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0, 15.0, 30.0, 45.0,
|
|
60.0, 90.0, 120.0, 180.0, 240.0,
|
|
];
|
|
|
|
let ip_addr: IpAddr = config
|
|
.host
|
|
.parse()
|
|
.unwrap_or(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)));
|
|
let socket_addr = SocketAddr::new(ip_addr, config.port);
|
|
|
|
PrometheusBuilder::new()
|
|
.with_http_listener(socket_addr)
|
|
.upkeep_timeout(Duration::from_secs(5 * 60))
|
|
.set_buckets_for_metric(duration_matcher, &duration_bucket)
|
|
.expect("failed to set duration bucket")
|
|
.install()
|
|
.expect("failed to install Prometheus metrics exporter");
|
|
}
|