Utilities for adding [OpenTelemetry] interoperability to [tracing
].
[tracing
] is a framework for instrumenting Rust programs to collect
structured, event-based diagnostic information. This crate provides a layer
that connects spans from multiple systems into a trace and emits them to
[OpenTelemetry]-compatible distributed tracing systems for processing and
visualization.
The crate provides the following types:
OpenTelemetryLayer
] adds OpenTelemetry context to all tracing
[span]s.OpenTelemetrySpanExt
] allows OpenTelemetry parent trace information to be
injected and extracted from a tracing
[span].```rust use opentelemetry::{api::Provider, sdk}; use tracing::{error, span}; use tracingsubscriber::layer::SubscriberExt; use tracingsubscriber::Registry;
fn main() { // Create a new tracer let tracer = sdk::Provider::default().gettracer("componentname");
// Create a new OpenTelemetry tracing layer
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
let subscriber = Registry::default().with(telemetry);
// Trace executed code
tracing::subscriber::with_default(subscriber, || {
let root = span!(tracing::Level::TRACE, "app_start", work_units = 2);
let _enter = root.enter();
error!("This event will be logged in the root span.");
});
} ```
```console
$ docker run -d -p6831:6831/udp -p6832:6832/udp -p16686:16686 jaegertracing/all-in-one:latest
$ cargo run --example opentelemetry
$ firefox http://localhost:16686/ ```
This project is licensed under the MIT license.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Tracing by you, shall be licensed as MIT, without any additional terms or conditions.