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, } pub fn get_configuration(config_path: &Path) -> Result { 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> { 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)