36 releases (18 breaking)
0.21.1 | Sep 23, 2024 |
---|---|
0.19.1 | Aug 31, 2024 |
0.19.0 | Jun 30, 2024 |
0.18.0 | Mar 9, 2024 |
0.2.1 | Jun 11, 2022 |
#333 in Debugging
190,370 downloads per month
Used in 8 crates
(7 directly)
51KB
722 lines
axum-tracing-opentelemetry
Middlewares to integrate axum + tracing + opentelemetry.
- Read OpenTelemetry header from incoming request
- Start a new trace if no trace found in the incoming request
- Trace is attached into tracing'span
- OpenTelemetry Span is created on close of the tracing's span (behavior from [tracing-opentelemetry])
For examples, you can look at the examples folder.
//...
use axum_tracing_opentelemetry::opentelemetry_tracing_layer;
#[tokio::main]
async fn main() -> Result<(), axum::BoxError> {
// very opinionated init of tracing, look as is source to make your own
init_tracing_opentelemetry::tracing_subscriber_ext::init_subscribers()?;
let app = app();
// run it
let addr = &"0.0.0.0:3000".parse::<SocketAddr>()?;
tracing::warn!("listening on {}", addr);
let listener = tokio::net::TcpListener::bind(addr).await?;
axum::serve(listener, app.into_make_service())
//FIXME .with_graceful_shutdown(shutdown_signal())
.await?;
Ok(())
}
fn app() -> Router {
Router::new()
.route("/", get(index)) // request processed inside span
// include trace context as header into the response
.layer(OtelInResponseLayer::default())
//start OpenTelemetry trace on incoming request
.layer(OtelAxumLayer::default())
.route("/health", get(health)) // request processed without span / trace
}
async fn shutdown_signal() {
//...
opentelemetry::global::shutdown_tracer_provider();
}
For more info about how to initialize, you can look at crate init-tracing-opentelemetry
or tracing-opentelemetry
.
Changelog - History
Dependencies
~8.5MB
~146K SLoC