Skip to content

Commit 6c3dc78

Browse files
authored
Add jaeger tracing example to main examples (#1345)
1 parent ab969bf commit 6c3dc78

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ members = [
2929
"examples/logs-basic",
3030
"examples/traceresponse",
3131
"examples/tracing-grpc",
32+
"examples/tracing-jaeger",
3233
"stress",
3334
]
3435
resolver = "2"

examples/tracing-jaeger/Cargo.toml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "tracing-jaeger"
3+
version = "0.1.0"
4+
edition = "2021"
5+
license = "Apache-2.0"
6+
publish = false
7+
8+
[dependencies]
9+
opentelemetry = { path = "../../opentelemetry" }
10+
opentelemetry-jaeger = { path = "../../opentelemetry-jaeger" }
11+
opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["rt-tokio"] }
12+
opentelemetry-otlp = { path = "../../opentelemetry-otlp", features = ["tonic"] }
13+
tokio = { version = "1.0", features = ["full"] }

examples/tracing-jaeger/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Exporting traces to Jaeger
2+
3+
This example shows how to export spans to Jaeger agent using OTLPExporter.
4+
5+
## Usage
6+
7+
Launch the example app with Jaeger running in background via docker:
8+
9+
```shell
10+
11+
# Run jaeger in background with native OTLP Ingestion
12+
$ docker run -d -p16686:16686 -p4317:4317 -e COLLECTOR_OTLP_ENABLED=true jaegertracing/all-in-one:latest
13+
14+
# Run the app
15+
$ cargo run
16+
17+
# View spans
18+
$ firefox http://localhost:16686/
19+
```

examples/tracing-jaeger/src/main.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use opentelemetry::global::shutdown_tracer_provider;
2+
use opentelemetry::{
3+
global,
4+
trace::{TraceContextExt, TraceError, Tracer},
5+
KeyValue,
6+
};
7+
use opentelemetry_otlp::WithExportConfig;
8+
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
9+
use std::error::Error;
10+
11+
fn init_tracer() -> Result<opentelemetry_sdk::trace::Tracer, TraceError> {
12+
opentelemetry_otlp::new_pipeline()
13+
.tracing()
14+
.with_exporter(
15+
opentelemetry_otlp::new_exporter()
16+
.tonic()
17+
.with_endpoint("http://localhost:4317"),
18+
)
19+
.with_trace_config(
20+
sdktrace::config().with_resource(Resource::new(vec![KeyValue::new(
21+
"service.name",
22+
"tracing-jaeger",
23+
)])),
24+
)
25+
.install_batch(runtime::Tokio)
26+
}
27+
28+
#[tokio::main]
29+
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
30+
let _tracer = init_tracer().expect("Failed to initialize tracer.");
31+
32+
let tracer = global::tracer("tracing-jaeger");
33+
tracer.in_span("main-operation", |cx| {
34+
let span = cx.span();
35+
span.set_attribute(KeyValue::new("my-attribute", "my-value"));
36+
span.add_event(
37+
"Main span event".to_string(),
38+
vec![KeyValue::new("foo", "1")],
39+
);
40+
tracer.in_span("child-operation...", |cx| {
41+
let span = cx.span();
42+
span.add_event("Sub span event", vec![KeyValue::new("bar", "1")]);
43+
});
44+
});
45+
46+
shutdown_tracer_provider();
47+
Ok(())
48+
}

0 commit comments

Comments
 (0)