From 152f4dd910dbb678fb93ea7233b313f8b382fae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20R=C3=B3=C5=BCa=C5=84ski?= <bartek.roza@gmail.com> Date: Mon, 6 Nov 2023 10:12:49 +0100 Subject: [PATCH] Serve metrics on different port --- certifier/src/configuration.rs | 5 +++-- certifier/src/main.rs | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/certifier/src/configuration.rs b/certifier/src/configuration.rs index 5f78c12d..f34bafa2 100644 --- a/certifier/src/configuration.rs +++ b/certifier/src/configuration.rs @@ -15,8 +15,9 @@ pub struct Config { pub post_cfg: post::config::ProofConfig, pub init_cfg: post::config::InitConfig, - /// Whether to enable metrics on /metrics. - pub metrics: bool, + /// Address to expose metrics on. + /// Metrics are disabled if not configured. + pub metrics: Option<std::net::SocketAddr>, } pub fn get_configuration(config_path: &Path) -> Result<Config, config::ConfigError> { diff --git a/certifier/src/main.rs b/certifier/src/main.rs index 0b597335..9f228c59 100644 --- a/certifier/src/main.rs +++ b/certifier/src/main.rs @@ -76,16 +76,16 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { let mut app = certifier::certifier::new(config.post_cfg, config.init_cfg, signer); - if config.metrics { - info!("metrics on: {}/metrics", config.listen.to_string()); - let (metric_layer, metric_handle) = PrometheusMetricLayerBuilder::new() + if let Some(addr) = config.metrics { + info!("metrics enabled on: http://{addr:?}/metrics"); + let (layer, handle) = PrometheusMetricLayerBuilder::new() .with_prefix("certifier") - .with_ignore_patterns(&["/metrics"]) .with_default_metrics() .build_pair(); - app = app - .route("/metrics", get(|| async move { metric_handle.render() })) - .layer(metric_layer); + + app = app.layer(layer); + let metrics = axum::Router::new().route("/metrics", get(|| async move { handle.render() })); + tokio::spawn(axum::Server::bind(&addr).serve(metrics.into_make_service())); } axum::Server::bind(&config.listen)