use std::time::Duration; use axum_otel_metrics::{HttpMetricsLayer, HttpMetricsLayerBuilder}; use opentelemetry::global; use opentelemetry_otlp::MetricExporter; use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider, Temporality}; const EXPORT_INTERVAL: Duration = Duration::from_secs(30); pub fn init_meter_provider() -> Result { let exporter = MetricExporter::builder() .with_http() .with_temporality(Temporality::default()) .build() .map_err(|e| e.to_string())?; let reader = PeriodicReader::builder(exporter) .with_interval(EXPORT_INTERVAL) .build(); let provider = SdkMeterProvider::builder().with_reader(reader).build(); global::set_meter_provider(provider.clone()); Ok(provider) } pub fn metrics_layer() -> HttpMetricsLayer { HttpMetricsLayerBuilder::new().build() }