Struct MeterProviderBuilder

pub struct MeterProviderBuilder { /* private fields */ }
Expand description

Configuration options for a MeterProvider.

Implementations§

§

impl MeterProviderBuilder

pub fn with_resource(self, resource: Resource) -> MeterProviderBuilder

Associates a Resource with a MeterProvider.

This Resource represents the entity producing telemetry and is associated with all Meters the MeterProvider will create.

By default, if this option is not used, the default Resource will be used.

Note: Calls to this method are additive, each call merges the provided resource with the previous one.

pub fn with_reader<T>(self, reader: T) -> MeterProviderBuilder
where T: MetricReader,

Associates a [MetricReader] with a MeterProvider. `MeterProviderBuilder::with_periodic_exporter() can be used to add a PeriodicReader which is the most common use case.

A MeterProvider will export no metrics without [MetricReader] added.

pub fn with_periodic_exporter<T>(self, exporter: T) -> MeterProviderBuilder

Adds a PushMetricExporter to the MeterProvider and configures it to export metrics at fixed intervals (60 seconds) using a PeriodicReader.

To customize the export interval, set the “OTEL_METRIC_EXPORT_INTERVAL” environment variable (in milliseconds).

Most users should use this method to attach an exporter. Advanced users who need finer control over the export process can use crate::metrics::PeriodicReaderBuilder to configure a custom reader and attach it using MeterProviderBuilder::with_reader().

pub fn with_view<T>(self, view: T) -> MeterProviderBuilder
where T: Fn(&Instrument) -> Option<Stream> + Send + Sync + 'static,

Adds a view to the MeterProvider.

Views allow you to customize how metrics are aggregated, renamed, or otherwise transformed before export, without modifying instrument definitions in your application or library code.

You can pass any function or closure matching the signature Fn(&Instrument) -> Option<Stream> + Send + Sync + 'static. The function receives a reference to the Instrument and can return an Option of Stream to specify how matching instruments should be exported. Returning None means the view does not apply to the given instrument, and the default behavior will be used.

§Examples

Renaming a metric:

let view_rename = |i: &Instrument| {
    if i.name() == "my_counter" {
        Some(Stream::builder().with_name("my_counter_renamed").build().expect("Stream should be valid"))
    } else {
        None
    }
};
builder.with_view(view_rename);

Setting a cardinality limit to control resource usage:

let view_change_cardinality = |i: &Instrument| {
    if i.name() == "my_counter" {
        Some(
            Stream::builder()
                .with_cardinality_limit(100).build().expect("Stream should be valid"),
        )
    } else {
        None
    }
};
builder.with_view(view_change_cardinality);

Silently ignoring Stream build errors:

let my_view_change_cardinality = |i: &Instrument| {
    if i.name() == "my_second_histogram" {
        // Note: If Stream is invalid, build() will return `Error` variant.
        // By calling `.ok()`, any such error is ignored and treated as if the view does not match
        // the instrument.
        // If this is not the desired behavior, consider handling the error explicitly.
        Stream::builder().with_cardinality_limit(0).build().ok()
    } else {
        None
    }
};
builder.with_view(my_view_change_cardinality);

If no views are added, the MeterProvider uses the default view.

pub fn build(self) -> SdkMeterProvider

Construct a new MeterProvider with this configuration.

Trait Implementations§

§

impl Debug for MeterProviderBuilder

§

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

Formats the value using the given formatter. Read more
§

impl Default for MeterProviderBuilder

§

fn default() -> MeterProviderBuilder

Returns the “default value” for a type. 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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

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

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

fn with_current_context(self) -> WithContext<Self>

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

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
§

impl<T, U> RamaInto<U> for T
where U: RamaFrom<T>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaInto<U> for T
where U: RamaFrom<T>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaTryInto<U> for T
where U: RamaTryFrom<T>,

§

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

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>

§

impl<T, U> RamaTryInto<U> for T
where U: RamaTryFrom<T>,

§

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

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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