Crate axum_otel_metrics

Crate axum_otel_metrics 

Source
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§

HttpMetrics
the service wrapper
HttpMetricsLayer
HttpMetricsLayerBuilder
Metric
the metrics we used in the middleware
MetricState
PathSkipper
A helper that instructs the metrics layer to ignore certain paths.
ResponseFuture
Response future for HttpMetrics Service.