Struct PeriodicReader

Source
pub struct PeriodicReader<E: PushMetricExporter> { /* private fields */ }
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 copy 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

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, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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