Sgl-router Prometheus metrics endpoint and usage track metrics (#6537)
This commit is contained in:
40
sgl-router/src/prometheus.rs
Normal file
40
sgl-router/src/prometheus.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
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");
|
||||
}
|
||||
Reference in New Issue
Block a user