28 releases (14 breaking)
| 0.32.1 | Jan 12, 2026 |
|---|---|
| 0.32.0 | Oct 1, 2025 |
| 0.30.0 | Sep 27, 2025 |
| 0.29.0 | Jun 3, 2025 |
| 0.12.0 | Jul 2, 2023 |
#645 in Profiling
58,169 downloads per month
Used in 4 crates
(2 directly)
49KB
706 lines
tonic-tracing-opentelemetry
Middlewares and tools to integrate tonic + tracing + opentelemetry for client and server.
Really early, missing lot of features, help is welcomed.
- Read OpenTelemetry header from the incoming requests
- Start a new trace if no trace is found in the incoming request
- Trace is attached into tracing's span
For examples, you can look at the examples folder.
Extract of client.rs:
let channel = Channel::from_static("http://127.0.0.1:50051")
.connect()
.await?; //Devskim: ignore DS137138
let channel = ServiceBuilder::new()
.layer(OtelGrpcLayer::default())
.service(channel);
let mut client = GreeterClient::new(channel);
//...
opentelemetry::global::shutdown_tracer_provider();
Extract of server.rs:
Server::builder()
// create trace for every request including health_service
.layer(server::OtelGrpcLayer::default().filter(filters::reject_healthcheck))
.add_service(health_service)
.add_service(reflection_service)
//.add_service(GreeterServer::new(greeter))
.add_service(GreeterServer::new(greeter))
.serve_with_shutdown(addr, shutdown_signal())
.await?;
TODO
- add test
- add documentation
- add examples
- validate with [opentelemetry-specification/rpc.md at main · open-telemetry/opentelemetry-specification · GitHub]
Changelog - History
Dependencies
~16MB
~188K SLoC