OtelSdkBuilder

Struct OtelSdkBuilder 

Source
pub struct OtelSdkBuilder { /* private fields */ }
Expand description

Builder for configuring and initialising the OpenTelemetry SDK.

§Example

use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

fn main() -> Result<(), SdkError> {
    // Simple case - uses defaults (localhost:4318 for HTTP)
    let _guard = OtelSdkBuilder::new().build()?;

    // With environment variables
    let _guard = OtelSdkBuilder::new()
        .with_env("OTEL_")
        .build()?;

    // Full configuration
    let _guard = OtelSdkBuilder::new()
        .with_file("/var/task/otel-config.toml")
        .with_env("OTEL_")
        .endpoint("http://collector:4318")
        .service_name("my-lambda")
        .build()?;

    Ok(())
}

Implementations§

Source§

impl OtelSdkBuilder

Source

pub fn new() -> OtelSdkBuilder

Creates a new builder with default configuration.

Defaults include:

  • Protocol: HTTP with protobuf encoding
  • Endpoint: http://localhost:4318 (or 4317 for gRPC)
  • All signals enabled (traces, metrics, logs)
  • Tracing subscriber initialisation enabled
  • Lambda resource detection enabled
Source

pub fn from_figment(figment: Figment) -> OtelSdkBuilder

Creates a builder from an existing figment.

This allows power users to construct complex configuration chains before passing them to the SDK builder.

§Example
use figment::{Figment, providers::{Env, Format, Toml}};
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let figment = Figment::new()
    .merge(Toml::file("/etc/otel-defaults.toml"))
    .merge(Toml::file("/var/task/otel-config.toml"))
    .merge(Env::prefixed("OTEL_").split("_"));

let _guard = OtelSdkBuilder::from_figment(figment)
    .service_name("my-lambda")
    .build()?;
Source

pub fn with_file<P>(self, path: P) -> OtelSdkBuilder
where P: AsRef<Path>,

Merges configuration from a TOML file.

If the file doesn’t exist, it’s silently skipped. This allows optional configuration files that may or may not be present.

§Example
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let _guard = OtelSdkBuilder::new()
    .with_file("/var/task/otel-config.toml")  // Optional
    .with_file("./otel-local.toml")           // For development
    .build()?;
Source

pub fn with_env(self, prefix: &str) -> OtelSdkBuilder

Merges configuration from environment variables with the given prefix.

Environment variables are split on underscores to match nested config. For example, with prefix OTEL_:

  • OTEL_ENDPOINT_URLendpoint.url
  • OTEL_ENDPOINT_PROTOCOLendpoint.protocol
  • OTEL_TRACES_ENABLEDtraces.enabled
  • OTEL_RESOURCE_SERVICE_NAMEresource.service_name
§Example
export OTEL_ENDPOINT_URL=http://collector:4318
export OTEL_ENDPOINT_PROTOCOL=grpc
export OTEL_TRACES_ENABLED=true
export OTEL_RESOURCE_SERVICE_NAME=my-lambda
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let _guard = OtelSdkBuilder::new()
    .with_env("OTEL_")
    .build()?;
Source

pub fn with_standard_env(self) -> OtelSdkBuilder

Merges configuration from standard OpenTelemetry environment variables.

This reads the standard OTEL_* environment variables as defined by the OpenTelemetry specification:

  • OTEL_EXPORTER_OTLP_ENDPOINT → endpoint URL
  • OTEL_EXPORTER_OTLP_PROTOCOL → protocol (grpc, http/protobuf, http/json)
  • OTEL_SERVICE_NAME → service name
  • OTEL_TRACES_EXPORTER → traces exporter (otlp, none)
  • OTEL_METRICS_EXPORTER → metrics exporter (otlp, none)
  • OTEL_LOGS_EXPORTER → logs exporter (otlp, none)
Source

pub fn endpoint(self, url: impl Into<String>) -> OtelSdkBuilder

Sets the OTLP endpoint URL explicitly.

This overrides any configuration from files or environment variables.

For HTTP protocols, signal-specific paths (/v1/traces, /v1/metrics, /v1/logs) are appended automatically.

§Example
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let _guard = OtelSdkBuilder::new()
    .endpoint("http://collector.internal:4318")
    .build()?;
Source

pub fn protocol(self, protocol: Protocol) -> OtelSdkBuilder

Sets the export protocol.

This overrides any configuration from files or environment variables.

The default endpoint changes based on protocol:

  • Protocol::Grpchttp://localhost:4317
  • Protocol::HttpBinaryhttp://localhost:4318
  • Protocol::HttpJsonhttp://localhost:4318
Source

pub fn service_name(self, name: impl Into<String>) -> OtelSdkBuilder

Sets the service name resource attribute.

This is the most commonly configured resource attribute and identifies your service in the telemetry backend.

Source

pub fn service_version(self, version: impl Into<String>) -> OtelSdkBuilder

Sets the service version resource attribute.

Source

pub fn deployment_environment(self, env: impl Into<String>) -> OtelSdkBuilder

Sets the deployment environment resource attribute.

Source

pub fn resource_attribute( self, key: impl Into<String>, value: impl Into<String>, ) -> OtelSdkBuilder

Adds a resource attribute.

Source

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

Provides a pre-built OpenTelemetry Resource.

This takes precedence over individual resource configuration. Use this when you need fine-grained control over resource construction.

Source

pub fn resource<F>(self, f: F) -> OtelSdkBuilder

Configures the resource using a builder function.

§Example
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let _guard = OtelSdkBuilder::new()
    .resource(|r| r
        .service_name("my-lambda")
        .service_version(env!("CARGO_PKG_VERSION"))
        .deployment_environment("production"))
    .build()?;
Source

pub fn traces(self, enabled: bool) -> OtelSdkBuilder

Enables or disables trace collection.

Default: enabled

Source

pub fn metrics(self, enabled: bool) -> OtelSdkBuilder

Enables or disables metrics collection.

Default: enabled

Source

pub fn logs(self, enabled: bool) -> OtelSdkBuilder

Enables or disables log collection.

Default: enabled

Source

pub fn without_tracing_subscriber(self) -> OtelSdkBuilder

Disables automatic tracing subscriber initialisation.

By default, the SDK sets up a tracing-subscriber with tracing-opentelemetry and opentelemetry-appender-tracing integration. Disable this if you want to configure the subscriber yourself.

Source

pub fn fallback(self, fallback: ExportFallback) -> OtelSdkBuilder

Sets the fallback strategy for failed exports (planned feature).

Note: The fallback API is defined but not yet wired into the export pipeline. The handler will be stored but not invoked on export failures. Full implementation is planned for a future release.

When implemented, the fallback handler will be called when an export fails after all retry attempts have been exhausted. It will receive the original OTLP request payload, which can be preserved via alternative transport.

§Example
use opentelemetry_configuration::{OtelSdkBuilder, ExportFallback, SdkError};

let _guard = OtelSdkBuilder::new()
    .fallback(ExportFallback::Stdout)
    .build()?;
Source

pub fn with_fallback<F>(self, f: F) -> OtelSdkBuilder
where F: Fn(ExportFailure) -> Result<(), Box<dyn Error + Sync + Send>> + Send + Sync + 'static,

Sets a custom fallback handler using a closure (planned feature).

Note: The fallback API is defined but not yet wired into the export pipeline. The handler will be stored but not invoked on export failures. Full implementation is planned for a future release.

When implemented, the closure will receive the full ExportFailure including the original OTLP request payload.

§Example
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

let _guard = OtelSdkBuilder::new()
    .with_fallback(|failure| {
        // Write the protobuf payload to S3, a queue, etc.
        let bytes = failure.request.to_protobuf();
        eprintln!(
            "Failed to export {} ({} bytes): {}",
            failure.request.signal_type(),
            bytes.len(),
            failure.error
        );
        Ok(())
    })
    .build()?;
Source

pub fn header( self, key: impl Into<String>, value: impl Into<String>, ) -> OtelSdkBuilder

Adds an HTTP header to all export requests.

Useful for authentication or custom routing.

Source

pub fn extract_config(&self) -> Result<OtelSdkConfig, SdkError>

Extracts the configuration for inspection or debugging.

§Errors

Returns an error if configuration extraction fails or if the endpoint URL is invalid.

Source

pub fn build(self) -> Result<OtelGuard, SdkError>

Builds and initialises the OpenTelemetry SDK.

Returns an OtelGuard that manages provider lifecycle. When the guard is dropped, all providers are flushed and shut down.

§Errors

Returns an error if:

  • Configuration extraction fails
  • Provider initialisation fails
  • Tracing subscriber initialisation fails
§Example
use opentelemetry_configuration::{OtelSdkBuilder, SdkError};

fn main() -> Result<(), SdkError> {
    let _guard = OtelSdkBuilder::new()
        .with_env("OTEL_")
        .service_name("my-lambda")
        .build()?;

    tracing::info!("Application started");

    // Guard automatically shuts down providers on drop
    Ok(())
}

Trait Implementations§

Source§

impl Default for OtelSdkBuilder

Source§

fn default() -> OtelSdkBuilder

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

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

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

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

Source§

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
Source§

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