Skip to content

Commit 5e6b3d6

Browse files
authored
Add easier way to add periodicreader to meterprovider (#2597)
1 parent 013d51a commit 5e6b3d6

File tree

6 files changed

+51
-14
lines changed

6 files changed

+51
-14
lines changed

examples/metrics-advanced/src/main.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,12 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
4949
.with_temporality(Temporality::Delta)
5050
.build();
5151

52-
let reader = PeriodicReader::builder(exporter).build();
53-
5452
let resource = Resource::builder()
5553
.with_service_name("metrics-advanced-example")
5654
.build();
5755

5856
let provider = SdkMeterProvider::builder()
59-
.with_reader(reader)
57+
.with_periodic_exporter(exporter)
6058
.with_resource(resource)
6159
.with_view(my_view_rename_and_unit)
6260
.with_view(my_view_drop_attributes)

examples/metrics-basic/src/main.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
1010
// Build exporter using Delta Temporality (Defaults to Temporality::Cumulative)
1111
// .with_temporality(opentelemetry_sdk::metrics::Temporality::Delta)
1212
.build();
13-
let reader = PeriodicReader::builder(exporter).build();
1413
let provider = SdkMeterProvider::builder()
15-
.with_reader(reader)
14+
.with_periodic_exporter(exporter)
1615
.with_resource(
1716
Resource::builder()
1817
.with_service_name("metrics-basic-example")

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,8 @@ fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, Metric
6161
.with_endpoint("http://localhost:4318/v1/metrics")
6262
.build()?;
6363

64-
let reader = opentelemetry_sdk::metrics::PeriodicReader::builder(exporter).build();
65-
6664
Ok(SdkMeterProvider::builder()
67-
.with_reader(reader)
65+
.with_periodic_exporter(exporter)
6866
.with_resource(RESOURCE.clone())
6967
.build())
7068
}

opentelemetry-otlp/examples/basic-otlp/src/main.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,9 @@ fn init_traces() -> Result<sdktrace::TracerProvider, TraceError> {
3333

3434
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
3535
let exporter = MetricExporter::builder().with_tonic().build()?;
36-
let reader = PeriodicReader::builder(exporter).build();
3736

3837
Ok(SdkMeterProvider::builder()
39-
.with_reader(reader)
38+
.with_periodic_exporter(exporter)
4039
.with_resource(RESOURCE.clone())
4140
.build())
4241
}

opentelemetry-sdk/CHANGELOG.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -405,14 +405,33 @@ Released 2024-Nov-27
405405
Migration Guidance:
406406
- These methods are intended for log appenders. Keep the clone of the provider handle, instead of depending on above methods.
407407

408-
409408
- **Bug Fix:** Validates the `with_boundaries` bucket boundaries used in
410409
Histograms. The boundaries provided by the user must not contain `f64::NAN`,
411410
`f64::INFINITY` or `f64::NEG_INFINITY` and must be sorted in strictly
412411
increasing order, and contain no duplicates. Instruments will not record
413412
measurements if the boundaries are invalid.
414413
[#2351](https://github.com/open-telemetry/opentelemetry-rust/pull/2351)
415414

415+
- Added `with_periodic_exporter` method to `MeterProviderBuilder`, allowing
416+
users to easily attach an exporter with a PeriodicReader for automatic metric
417+
export. Retained with_reader() for advanced use cases where a custom
418+
MetricReader configuration is needed.
419+
[2597](https://github.com/open-telemetry/opentelemetry-rust/pull/2597)
420+
Example Usage:
421+
422+
```rust
423+
SdkMeterProvider::builder()
424+
.with_periodic_exporter(exporter)
425+
.build();
426+
```
427+
428+
Using a custom PeriodicReader (advanced use case):
429+
430+
let reader = PeriodicReader::builder(exporter).build();
431+
SdkMeterProvider::builder()
432+
.with_reader(reader)
433+
.build();
434+
416435
## 0.27.0
417436

418437
Released 2024-Nov-11

opentelemetry-sdk/src/metrics/meter_provider.rs

+27-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ use crate::{
1919
};
2020

2121
use super::{
22-
meter::SdkMeter, noop::NoopMeter, pipeline::Pipelines, reader::MetricReader, view::View,
22+
exporter::PushMetricExporter, meter::SdkMeter, noop::NoopMeter, pipeline::Pipelines,
23+
reader::MetricReader, view::View, PeriodicReader,
2324
};
2425

2526
/// Handles the creation and coordination of [Meter]s.
@@ -244,14 +245,37 @@ impl MeterProviderBuilder {
244245
}
245246

246247
/// Associates a [MetricReader] with a [MeterProvider].
248+
/// [`MeterProviderBuilder::with_periodic_exporter()] can be used to add a PeriodicReader which is
249+
/// the most common use case.
247250
///
248-
/// By default, if this option is not used, the [MeterProvider] will perform no
249-
/// operations; no data will be exported without a [MetricReader].
251+
/// A [MeterProvider] will export no metrics without [MetricReader]
252+
/// added.
250253
pub fn with_reader<T: MetricReader>(mut self, reader: T) -> Self {
251254
self.readers.push(Box::new(reader));
252255
self
253256
}
254257

258+
/// Adds a [`PushMetricExporter`] to the [`MeterProvider`] and configures it
259+
/// to export metrics at **fixed** intervals (60 seconds) using a
260+
/// [`PeriodicReader`].
261+
///
262+
/// To customize the export interval, set the
263+
/// **"OTEL_METRIC_EXPORT_INTERVAL"** environment variable (in
264+
/// milliseconds).
265+
///
266+
/// Most users should use this method to attach an exporter. Advanced users
267+
/// who need finer control over the export process can use
268+
/// [`crate::metrics::PeriodicReaderBuilder`] to configure a custom reader and attach it
269+
/// using [`MeterProviderBuilder::with_reader()`].
270+
pub fn with_periodic_exporter<T>(mut self, exporter: T) -> Self
271+
where
272+
T: PushMetricExporter,
273+
{
274+
let reader = PeriodicReader::builder(exporter).build();
275+
self.readers.push(Box::new(reader));
276+
self
277+
}
278+
255279
#[cfg(feature = "spec_unstable_metrics_views")]
256280
/// Associates a [View] with a [MeterProvider].
257281
///

0 commit comments

Comments
 (0)