Skip to content
Clone
e50e272
28 lines 888 B Rust
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<SdkMeterProvider, String> {
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()
}