Skip to content

Commit f7ae318

Browse files
committed
Add PeriodicReaderWithOwnThread
1 parent a707bb9 commit f7ae318

File tree

3 files changed

+34
-92
lines changed

3 files changed

+34
-92
lines changed

examples/metrics-basic/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["metrics", "
1111
opentelemetry-stdout = { path = "../../opentelemetry-stdout", features = ["metrics"]}
1212
tokio = { workspace = true, features = ["full"] }
1313
serde_json = { workspace = true }
14+
tracing = { workspace = true, features = ["std"]}
15+
tracing-core = { workspace = true }
16+
tracing-subscriber = { version = "0.3.18", features = ["env-filter","registry", "std"]}
1417

1518
[features]
1619
default = ["otel_unstable"]

examples/metrics-basic/src/main.rs

Lines changed: 29 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
use opentelemetry::global;
22
use opentelemetry::KeyValue;
3+
use opentelemetry_sdk::metrics::data::Temporality;
4+
use opentelemetry_sdk::metrics::PeriodicReaderWithOwnThread;
35
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
46
use opentelemetry_sdk::{runtime, Resource};
7+
use tracing_subscriber::fmt;
8+
use tracing_subscriber::layer::SubscriberExt;
9+
use tracing_subscriber::util::SubscriberInitExt;
10+
use tracing_subscriber::EnvFilter;
11+
use tracing_subscriber::Layer;
512
use std::error::Error;
6-
use std::vec;
13+
use std::time::Duration;
714

815
fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
916
let exporter = opentelemetry_stdout::MetricExporterBuilder::default()
1017
// Build exporter using Delta Temporality (Defaults to Temporality::Cumulative)
11-
// .with_temporality(data::Temporality::Delta)
18+
.with_temporality(Temporality::Delta)
19+
.build();
20+
let reader = PeriodicReaderWithOwnThread::builder(exporter)
21+
.with_interval(Duration::from_secs(10))
1222
.build();
13-
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
1423
let provider = SdkMeterProvider::builder()
1524
.with_reader(reader)
1625
.with_resource(Resource::new([KeyValue::new(
@@ -24,24 +33,16 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
2433

2534
#[tokio::main]
2635
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
36+
tracing_subscriber::registry()
37+
.with(fmt::layer().with_thread_names(true))
38+
.init();
39+
2740
// Initialize the MeterProvider with the stdout Exporter.
2841
let meter_provider = init_meter_provider();
2942

3043
// Create a meter from the above MeterProvider.
3144
let meter = global::meter("mylibraryname");
3245

33-
// Create a Counter Instrument.
34-
let counter = meter.u64_counter("my_counter").build();
35-
36-
// Record measurements using the Counter instrument.
37-
counter.add(
38-
10,
39-
&[
40-
KeyValue::new("mykey1", "myvalue1"),
41-
KeyValue::new("mykey2", "myvalue2"),
42-
],
43-
);
44-
4546
// Create a ObservableCounter instrument and register a callback that reports the measurement.
4647
let _observable_counter = meter
4748
.u64_observable_counter("my_observable_counter")
@@ -58,84 +59,20 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
5859
})
5960
.build();
6061

61-
// Create a UpCounter Instrument.
62-
let updown_counter = meter.i64_up_down_counter("my_updown_counter").build();
63-
64-
// Record measurements using the UpCounter instrument.
65-
updown_counter.add(
66-
-10,
67-
&[
68-
KeyValue::new("mykey1", "myvalue1"),
69-
KeyValue::new("mykey2", "myvalue2"),
70-
],
71-
);
72-
73-
// Create a Observable UpDownCounter instrument and register a callback that reports the measurement.
74-
let _observable_up_down_counter = meter
75-
.i64_observable_up_down_counter("my_observable_updown_counter")
76-
.with_description("My observable updown counter example description")
77-
.with_unit("myunit")
78-
.with_callback(|observer| {
79-
observer.observe(
80-
100,
81-
&[
82-
KeyValue::new("mykey1", "myvalue1"),
83-
KeyValue::new("mykey2", "myvalue2"),
84-
],
85-
)
86-
})
87-
.build();
88-
89-
// Create a Histogram Instrument.
90-
let histogram = meter
91-
.f64_histogram("my_histogram")
92-
.with_description("My histogram example description")
93-
// Setting boundaries is optional. By default, the boundaries are set to
94-
// [0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0]
95-
.with_boundaries(vec![0.0, 5.0, 10.0, 15.0, 20.0, 25.0])
96-
.build();
97-
98-
// Record measurements using the histogram instrument.
99-
histogram.record(
100-
10.5,
101-
&[
102-
KeyValue::new("mykey1", "myvalue1"),
103-
KeyValue::new("mykey2", "myvalue2"),
104-
],
105-
);
106-
107-
// Note that there is no ObservableHistogram instrument.
108-
109-
// Create a Gauge Instrument.
110-
let gauge = meter
111-
.f64_gauge("my_gauge")
112-
.with_description("A gauge set to 1.0")
113-
.with_unit("myunit")
114-
.build();
115-
116-
gauge.record(
117-
1.0,
118-
&[
119-
KeyValue::new("mykey1", "myvalue1"),
120-
KeyValue::new("mykey2", "myvalue2"),
121-
],
122-
);
62+
// Create a Counter Instrument.
63+
let counter = meter.u64_counter("my_counter").build();
12364

124-
// Create a ObservableGauge instrument and register a callback that reports the measurement.
125-
let _observable_gauge = meter
126-
.f64_observable_gauge("my_observable_gauge")
127-
.with_description("An observable gauge set to 1.0")
128-
.with_unit("myunit")
129-
.with_callback(|observer| {
130-
observer.observe(
131-
1.0,
132-
&[
133-
KeyValue::new("mykey1", "myvalue1"),
134-
KeyValue::new("mykey2", "myvalue2"),
135-
],
136-
)
137-
})
138-
.build();
65+
loop {
66+
// Record measurements using the Counter instrument.
67+
counter.add(
68+
10,
69+
&[
70+
KeyValue::new("mykey1", "myvalue1"),
71+
KeyValue::new("mykey2", "myvalue2"),
72+
],
73+
);
74+
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
75+
}
13976

14077
// Metrics are exported by default every 30 seconds when using stdout exporter,
14178
// however shutting down the MeterProvider here instantly flushes

opentelemetry-sdk/src/metrics/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ pub(crate) mod meter;
5050
mod meter_provider;
5151
pub(crate) mod noop;
5252
pub(crate) mod periodic_reader;
53+
pub(crate) mod periodic_reader_with_own_thread;
5354
pub(crate) mod pipeline;
5455
pub mod reader;
5556
pub(crate) mod view;
@@ -60,6 +61,7 @@ pub use instrument::*;
6061
pub use manual_reader::*;
6162
pub use meter_provider::*;
6263
pub use periodic_reader::*;
64+
pub use periodic_reader_with_own_thread::*;
6365
pub use pipeline::Pipeline;
6466
pub use view::*;
6567

0 commit comments

Comments
 (0)