-
Notifications
You must be signed in to change notification settings - Fork 500
/
Copy pathmain.rs
48 lines (41 loc) · 1.41 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use opentelemetry::{
global,
trace::{TraceContextExt, Tracer},
KeyValue,
};
use opentelemetry_sdk::trace::{SdkTracerProvider, TraceError};
use opentelemetry_sdk::Resource;
use std::error::Error;
fn init_tracer_provider() -> Result<opentelemetry_sdk::trace::SdkTracerProvider, TraceError> {
let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_tonic()
.build()?;
Ok(SdkTracerProvider::builder()
.with_batch_exporter(exporter)
.with_resource(
Resource::builder()
.with_service_name("tracing-jaeger")
.build(),
)
.build())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
let tracer_provider = init_tracer_provider().expect("Failed to initialize tracer provider.");
global::set_tracer_provider(tracer_provider.clone());
let tracer = global::tracer("tracing-jaeger");
tracer.in_span("main-operation", |cx| {
let span = cx.span();
span.set_attribute(KeyValue::new("my-attribute", "my-value"));
span.add_event(
"Main span event".to_string(),
vec![KeyValue::new("foo", "1")],
);
tracer.in_span("child-operation...", |cx| {
let span = cx.span();
span.add_event("Sub span event", vec![KeyValue::new("bar", "1")]);
});
});
tracer_provider.shutdown()?;
Ok(())
}