-
Notifications
You must be signed in to change notification settings - Fork 384
/
main.rs
64 lines (53 loc) · 2.15 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use opentelemetry::global::{self, shutdown_tracer_provider};
use opentelemetry::sdk::export::trace::stdout::Exporter as StdoutExporter;
use opentelemetry::sdk::trace::{BatchSpanProcessor, TracerProvider};
use opentelemetry::trace::{mark_span_as_active, TraceError, Tracer};
use opentelemetry::KeyValue;
use std::io::stdout;
use std::time::Duration;
fn init_tracer() -> Result<(), TraceError> {
// build a jaeger batch span processor
let jaeger_processor = BatchSpanProcessor::builder(
opentelemetry_jaeger::new_pipeline()
.with_service_name("trace-demo")
.with_tags(vec![KeyValue::new("exporter", "jaeger")])
.init_exporter()?,
opentelemetry::runtime::Tokio,
)
.build();
// build a zipkin exporter
let zipkin_exporter = opentelemetry_zipkin::new_pipeline()
.with_service_name("trace-demo")
.init_exporter()?;
let provider = TracerProvider::builder()
// We can build a span processor and pass it into provider.
.with_span_processor(jaeger_processor)
// For batch span processor, we can also provide the exporter and runtime and use this
// helper function to build a batch span processor
.with_batch_exporter(zipkin_exporter, opentelemetry::runtime::Tokio)
// Same helper function is also available to build a simple span processor.
.with_simple_exporter(StdoutExporter::new(stdout(), true))
.build();
let _ = global::set_tracer_provider(provider);
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
init_tracer()?;
let tracer = global::tracer("jaeger-and-zipkin");
{
let span = tracer.start("first span");
let _guard = mark_span_as_active(span);
{
let _inner = tracer.start("first sub span");
tokio::time::sleep(Duration::from_millis(15)).await;
}
{
let _inner = tracer.start("second sub span");
tokio::time::sleep(Duration::from_millis(15)).await;
}
}
tokio::time::sleep(Duration::from_millis(15)).await;
shutdown_tracer_provider();
Ok(())
}