Skip to content

Commit ed3d5ec

Browse files
committed
1 parent 91397fc commit ed3d5ec

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

examples/broken_traces/Cargo.toml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "broken_traces"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
opentelemetry = "0.22.0"
8+
opentelemetry-stdout = { version = "0.3.0", features = ["trace"] }
9+
opentelemetry_sdk = "0.22.1"
10+
serde_json = "1.0.116"
11+
tracing = "0.1.40"
12+
tracing-opentelemetry = "0.23.0"
13+
tracing-subscriber = "0.3.18"

examples/broken_traces/src/main.rs

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use opentelemetry::{
2+
trace::{Span, Tracer, TracerProvider as _},
3+
KeyValue,
4+
};
5+
6+
use opentelemetry_sdk::{
7+
resource,
8+
trace::{config, Config, TracerProvider},
9+
Resource,
10+
};
11+
use opentelemetry_stdout::SpanExporterBuilder;
12+
use tracing::span;
13+
use tracing_opentelemetry::OpenTelemetrySpanExt;
14+
use tracing_subscriber::{layer::SubscriberExt, Registry};
15+
16+
fn main() {
17+
println!("Hello, world!");
18+
let stdout_exporter = SpanExporterBuilder::default()
19+
.with_encoder(|writer, data| {
20+
serde_json::to_writer_pretty(writer, &data).unwrap();
21+
Ok(())
22+
})
23+
.build();
24+
let provider = TracerProvider::builder()
25+
.with_config(Config::default().with_resource(Resource::new(vec![])))
26+
.with_simple_exporter(stdout_exporter)
27+
.build();
28+
let tracer = provider.tracer("tracing-opentelemetry");
29+
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
30+
let subscriber = Registry::default().with(telemetry);
31+
32+
tracing::subscriber::with_default(subscriber, || {
33+
let tracer = provider.tracer("otel-tracing");
34+
35+
// this is the root span created using tokio tracing api
36+
let root = span!(tracing::Level::TRACE, "tokio-tracing-span-parent");
37+
let _enter = root.enter();
38+
39+
// this is a child span created using tokio tracing api
40+
// this correctly parented to the root span
41+
let child = span!(tracing::Level::TRACE, "tokio-tracing-span-child");
42+
let _enter_child = child.enter();
43+
44+
// this is another child, created using otel tracing api
45+
// but this is *NOT* parented to the above spans
46+
// demonstrating broken traces when mixing and matching tracing and opentelemetry apis
47+
// let mut span = tracer
48+
// .start_with_context("otel-tracing-span", &child.context());
49+
let mut span = tracer
50+
.start("otel-tracing-span");
51+
span.end();
52+
});
53+
}

0 commit comments

Comments
 (0)