Expand description
axum OpenTelemetry Metrics middleware
§Simple Usage: with otlp exporter
Meter provider should be configured through opentelemetry_sdk global::set_meter_provider.
use axum_otel_metrics::HttpMetricsLayerBuilder;
use axum::{response::Html, routing::get, Router};
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider, Temporality};
use opentelemetry::global;
let exporter = opentelemetry_otlp::MetricExporter::builder()
.with_http()
.with_temporality(Temporality::default())
.build()
.unwrap();
let reader = PeriodicReader::builder(exporter)
.with_interval(std::time::Duration::from_secs(30))
.build();
let provider = opentelemetry_sdk::metrics::SdkMeterProvider::builder()
.with_reader(reader)
.build();
// TODO: ensure defer run `provider.shutdown()?;`
global::set_meter_provider(provider.clone());
let metrics = HttpMetricsLayerBuilder::new()
.build();
let app = Router::<()>::new()
.route("/", get(handler))
.route("/hello", get(handler))
.route("/world", get(handler))
// add the metrics middleware
.layer(metrics);
async fn handler() -> Html<&'static str> {
Html("<h1>Hello, World!</h1>")
}Structs§
- Http
Metrics - the service wrapper
- Http
Metrics Layer - Http
Metrics Layer Builder - Metric
- the metrics we used in the middleware
- Metric
State - Path
Skipper - A helper that instructs the metrics layer to ignore certain paths.
- Response
Future - Response future for
HttpMetricsService.