39 releases (20 breaking)
0.24.1 | Nov 24, 2024 |
---|---|
0.23.0 | Nov 5, 2024 |
0.19.0 | Jun 30, 2024 |
0.18.0 | Mar 9, 2024 |
0.2.1 | Jun 11, 2022 |
#243 in Debugging
255,162 downloads per month
Used in 8 crates
(7 directly)
50KB
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 at the source to make your own
let _guard = 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()).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
}
For more info about how to initialize, you can look at crate init-tracing-opentelemetry
or tracing-opentelemetry
.
Changelog - History
Dependencies
~8.5MB
~147K SLoC