PeriodicReader

Struct PeriodicReader 

Source
pub struct PeriodicReader<E: PushMetricExporter> { /* private fields */ }
Available on crate feature metrics only.
Expand description

A MetricReader that periodically collects and exports metrics at a configurable interval.

By default, PeriodicReader collects and exports metrics every 60 seconds. The time taken for export is not included in the interval. Use PeriodicReaderBuilder to customize the interval.

PeriodicReader spawns a background thread to handle metric collection and export. This thread remains active until shutdown() is called.

§Collection Process

“Collection” refers to gathering aggregated metrics from the SDK’s internal storage. During this phase, callbacks from observable instruments are also triggered.

PeriodicReader does not enforce a timeout for collection. If an observable callback takes too long, it may delay the next collection cycle. If a callback never returns, it will stall all metric collection (and exports) indefinitely.

§Exporter Compatibility

When used with the OTLP Exporter, the following transport options are supported:

  • grpc-tonic: Requires MeterProvider to be initialized within a tokio runtime.
  • reqwest-blocking-client: Works with both a standard (main) function and tokio::main.

PeriodicReader does not enforce a timeout for exports either. Instead, the configured exporter is responsible for enforcing timeouts. If an export operation never returns, PeriodicReader will stop exporting new metrics, stalling metric collection.

§Manual Export & Shutdown

Users can manually trigger an export via force_flush(). Calling shutdown() exports any remaining metrics and should be done before application exit to ensure all data is sent.

Warning: If using tokio’s current-thread runtime, calling shutdown() from the main thread may cause a deadlock. To prevent this, call shutdown() from a separate thread or use tokio’s spawn_blocking.

§Example

use opentelemetry_sdk::metrics::PeriodicReader;

let exporter = get_exporter(); // set up a push exporter

let reader = PeriodicReader::builder(exporter).build();

Implementations§

Source§

impl<E: PushMetricExporter> PeriodicReader<E>

Source

pub fn builder(exporter: E) -> PeriodicReaderBuilder<E>

Configuration options for a periodic reader with own thread

Trait Implementations§

Source§

impl<E: PushMetricExporter> Clone for PeriodicReader<E>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<E: PushMetricExporter> Debug for PeriodicReader<E>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<E: PushMetricExporter> MetricReader for PeriodicReader<E>

Source§

fn temporality(&self, kind: InstrumentKind) -> Temporality

Available on crate feature experimental_metrics_custom_reader only.

To construct a MetricReader when setting up an SDK, The output temporality (optional), a function of instrument kind. This function SHOULD be obtained from the exporter.

If not configured, the Cumulative temporality SHOULD be used.

Source§

fn register_pipeline(&self, pipeline: Weak<Pipeline>)

Available on crate feature experimental_metrics_custom_reader only.
Registers a MetricReader with a [Pipeline]. Read more
Source§

fn collect(&self, rm: &mut ResourceMetrics) -> OTelSdkResult

Available on crate feature experimental_metrics_custom_reader only.
Gathers and returns all metric data related to the MetricReader from the SDK and stores it in the provided ResourceMetrics reference. Read more
Source§

fn force_flush(&self) -> OTelSdkResult

Available on crate feature experimental_metrics_custom_reader only.
Flushes all metric measurements held in an export pipeline. Read more
Source§

fn shutdown_with_timeout(&self, _timeout: Duration) -> OTelSdkResult

Available on crate feature experimental_metrics_custom_reader only.
Flushes all metric measurements held in an export pipeline and releases any held computational resources. Read more
Source§

fn shutdown(&self) -> OTelSdkResult

Available on crate feature experimental_metrics_custom_reader only.
shutdown with default timeout

Auto Trait Implementations§

§

impl<E> Freeze for PeriodicReader<E>

§

impl<E> RefUnwindSafe for PeriodicReader<E>
where E: RefUnwindSafe,

§

impl<E> Send for PeriodicReader<E>

§

impl<E> Sync for PeriodicReader<E>

§

impl<E> Unpin for PeriodicReader<E>

§

impl<E> UnwindSafe for PeriodicReader<E>
where E: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T