forked from open-telemetry/opentelemetry-rust
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbasic.rs
56 lines (48 loc) · 1.69 KB
/
basic.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
//! run with `$ cargo run --example basic --all-features
#[cfg(all(feature = "metrics", feature = "trace"))]
use opentelemetry::{
global,
trace::{Span, Tracer, TracerProvider as _},
KeyValue,
};
#[cfg(all(feature = "metrics", feature = "trace"))]
use opentelemetry_sdk::{
metrics::{PeriodicReader, SdkMeterProvider},
runtime,
trace::TracerProvider,
};
#[cfg(all(feature = "metrics", feature = "trace"))]
fn init_trace() -> TracerProvider {
let exporter = opentelemetry_stdout::SpanExporter::default();
TracerProvider::builder()
.with_simple_exporter(exporter)
.build()
}
#[cfg(all(feature = "metrics", feature = "trace"))]
fn init_metrics() {
let exporter = opentelemetry_stdout::MetricsExporter::default();
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
let provider = SdkMeterProvider::builder().with_reader(reader).build();
global::set_meter_provider(provider);
}
#[tokio::main]
#[cfg(all(feature = "metrics", feature = "trace"))]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let tracer_provider = init_trace();
init_metrics();
let tracer = tracer_provider.tracer("stdout-test");
let mut span = tracer.start("test_span");
span.set_attribute(KeyValue::new("test_key", "test_value"));
span.add_event(
"test_event",
vec![KeyValue::new("test_event_key", "test_event_value")],
);
span.end();
let meter = global::meter("stdout-test");
let c = meter.u64_counter("test_events").init();
c.add(1, &[KeyValue::new("test_key", "test_value")]);
global::shutdown_meter_provider();
Ok(())
}
#[cfg(not(all(feature = "metrics", feature = "trace")))]
fn main() {}