opentelemetry_sdk::metrics

Struct PeriodicReader

Source
pub struct PeriodicReader { /* 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 PeriodicReader

Source

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

Configuration options for a periodic reader with own thread

Trait Implementations§

Source§

impl Clone for PeriodicReader

Source§

fn clone(&self) -> PeriodicReader

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 Debug for PeriodicReader

Source§

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

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

impl MetricReader for PeriodicReader

Source§

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

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>)

Registers a MetricReader with a [Pipeline]. Read more
Source§

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

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

Flushes all metric measurements held in an export pipeline. Read more
Source§

fn shutdown(&self) -> OTelSdkResult

Flushes all metric measurements held in an export pipeline and releases any held computational resources. Read more

Auto Trait Implementations§

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