pub struct TelemetryBuilder { /* private fields */ }Expand description
Builder for configuring and creating a Telemetry instance.
Use this builder to combine configuration-based setup with programmatic customization. Exporters and processors added via the builder are used in addition to those specified in the configuration.
You can register telemetry providers globally using:
with_global_tracer_provider()with_global_meter_provider()with_log_bridge()with_tracing_bridge()with_global_propagator()
Or use with_globals() to enable all of them at once.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
let config = OpenTelemetryConfig::default();
let telemetry = Telemetry::builder(config).with_globals().build()?;Implementations§
Source§impl TelemetryBuilder
impl TelemetryBuilder
Sourcepub fn new(config: OpenTelemetryConfig) -> Self
pub fn new(config: OpenTelemetryConfig) -> Self
Create a new builder with the given configuration.
By default, nothing is registered globally. Use with_globals()
to opt in to all global registrations, or individual methods to opt in selectively.
Sourcepub fn with_global_tracer_provider(self) -> Self
pub fn with_global_tracer_provider(self) -> Self
Register the tracer provider as the global tracer provider.
When enabled, you can use opentelemetry::global::tracer() to obtain
tracers anywhere in your application.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry::global;
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_global_tracer_provider()
.build()?;
// Now you can get tracers from anywhere
let tracer = global::tracer("my-component");Sourcepub fn with_global_meter_provider(self) -> Self
pub fn with_global_meter_provider(self) -> Self
Register the meter provider as the global meter provider.
When enabled, you can use opentelemetry::global::meter() to obtain
meters anywhere in your application.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry::global;
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_global_meter_provider()
.build()?;
// Now you can get meters from anywhere
let meter = global::meter("my-component");Sourcepub fn with_global_propagator(self) -> Self
pub fn with_global_propagator(self) -> Self
Register the propagator configuration as the global text map propagator.
When enabled, tower middleware such as http_server_propagation() and
http_client_propagation() automatically use the configured propagator.
Sourcepub fn with_globals(self) -> Self
pub fn with_globals(self) -> Self
Enable all global registrations at once.
Equivalent to calling with_global_tracer_provider(),
with_global_meter_provider(),
with_log_bridge(),
with_tracing_bridge(), and
with_global_propagator().
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_globals()
.build()?;Sourcepub fn with_log_bridge(self) -> Self
pub fn with_log_bridge(self) -> Self
Enable the log bridge to route log crate macros to OpenTelemetry.
When enabled, calls to log::info!(), log::error!(), etc. will be
exported as OpenTelemetry log records through the configured logger provider.
The bridge respects the RUST_LOG environment variable for filtering.
If RUST_LOG is not set, defaults to info level.
Note: This sets the global logger, so it can only be called once per process.
Calling build() will fail if another logger is already installed.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_log_bridge()
.build()?;
// Now log macros are routed to OpenTelemetry
log::info!("This goes to OpenTelemetry");Sourcepub fn with_tracing_bridge(self) -> Self
pub fn with_tracing_bridge(self) -> Self
Enable the tracing bridge to route tracing crate spans and events to OpenTelemetry.
When enabled, tracing::info!(), tracing::span!(), etc. will be exported
as OpenTelemetry log records and traces through the configured providers.
The bridge respects the RUST_LOG environment variable for filtering.
If RUST_LOG is not set, defaults to info level.
Note: This sets the global tracing subscriber, so it can only be called once
per process. Calling build() will fail if another subscriber is already installed.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
let telemetry = Telemetry::builder(OpenTelemetryConfig::logs_to_stderr())
.with_tracing_bridge()
.build()?;
// Now tracing macros are routed to OpenTelemetry
tracing::info!("This goes to OpenTelemetry");Sourcepub fn with_resource_builder(self, builder: ResourceBuilder) -> Self
pub fn with_resource_builder(self, builder: ResourceBuilder) -> Self
Set the resource builder for configuring resource attributes.
Resource attributes provide identifying information about the entity producing telemetry (e.g., service name, version, deployment environment).
Attributes from the builder are merged with any resource configuration
from the config file. On conflicts, builder values take precedence,
allowing you to override specific attributes like service.name while
keeping other config-defined attributes.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry_sdk::Resource;
use opentelemetry::KeyValue;
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_resource_builder(
Resource::builder()
.with_service_name("my-service")
.with_attributes([
KeyValue::new("service.version", "1.0.0"),
KeyValue::new("deployment.environment", "production"),
])
)
.build()?;Sourcepub fn with_span_processor<T: SpanProcessor + 'static>(
self,
processor: T,
) -> Self
pub fn with_span_processor<T: SpanProcessor + 'static>( self, processor: T, ) -> Self
Add a custom span processor to the tracer provider.
Span processors receive spans as they are started and ended, allowing for custom processing logic such as filtering, enrichment, or routing to multiple exporters.
This is added in addition to any processors configured via the configuration file.
Sourcepub fn with_batch_span_exporter<T: SpanExporter + 'static>(
self,
exporter: T,
) -> Self
pub fn with_batch_span_exporter<T: SpanExporter + 'static>( self, exporter: T, ) -> Self
Add a span exporter with batch processing.
Batch processing buffers spans and exports them in batches, which is more efficient for production use. This is the recommended approach for most applications.
This is added in addition to any exporters configured via the configuration file.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry_otlp::SpanExporter;
let exporter = SpanExporter::builder()
.with_http()
.with_endpoint("http://localhost:4318")
.build()
.unwrap();
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_batch_span_exporter(exporter)
.build()
.unwrap();Sourcepub fn with_simple_span_exporter<T: SpanExporter + 'static>(
self,
exporter: T,
) -> Self
pub fn with_simple_span_exporter<T: SpanExporter + 'static>( self, exporter: T, ) -> Self
Add a span exporter with simple (synchronous) processing.
Simple processing exports spans immediately as they complete. This is useful for development and debugging but may impact performance in production.
This is added in addition to any exporters configured via the configuration file.
Sourcepub fn with_view<F>(self, view: F) -> Self
pub fn with_view<F>(self, view: F) -> Self
Add a metric view for customizing metric aggregation.
Views allow you to customize how metrics are collected and reported.
The view function receives instrument metadata and can return a
Stream configuration to modify the instrument’s behavior.
Return Some(Stream) to apply customizations, or None to use
the default behavior.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry_sdk::metrics::{Instrument, Stream};
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_view(|instrument: &Instrument| {
// Customize high-cardinality metrics
if instrument.name().contains("debug") {
Some(Stream::default())
} else {
None // Use default behavior
}
})
.build()?;Sourcepub fn with_periodic_reader<E>(self, reader: PeriodicReader<E>) -> Selfwhere
E: PushMetricExporter,
pub fn with_periodic_reader<E>(self, reader: PeriodicReader<E>) -> Selfwhere
E: PushMetricExporter,
Add a periodic reader for push-based metric export.
A PeriodicReader collects metrics at regular intervals and pushes
them to the configured exporter. Use PeriodicReaderBuilder for
custom interval and timeout settings.
This is added in addition to any readers configured via the configuration file.
§Example
use apollo_opentelemetry::{OpenTelemetryConfig, Telemetry};
use opentelemetry_sdk::metrics::PeriodicReader;
use opentelemetry_otlp::MetricExporter;
use std::time::Duration;
let exporter = MetricExporter::builder().with_http().build()?;
let reader = PeriodicReader::builder(exporter)
.with_interval(Duration::from_secs(30))
.build();
let telemetry = Telemetry::builder(OpenTelemetryConfig::default())
.with_periodic_reader(reader)
.build()?;Sourcepub fn with_batch_log_exporter<T>(self, exporter: T) -> Selfwhere
T: LogExporter + 'static,
pub fn with_batch_log_exporter<T>(self, exporter: T) -> Selfwhere
T: LogExporter + 'static,
Add a log exporter with batch processing.
Batch processing buffers log records and exports them in batches, which is more efficient for production use.
This is added in addition to any exporters configured via the configuration file.
Sourcepub fn with_simple_log_exporter<T>(self, exporter: T) -> Selfwhere
T: LogExporter + 'static,
pub fn with_simple_log_exporter<T>(self, exporter: T) -> Selfwhere
T: LogExporter + 'static,
Add a log exporter with simple (synchronous) processing.
Simple processing exports log records immediately. This is useful for development and debugging but may impact performance in production.
This is added in addition to any exporters configured via the configuration file.
Sourcepub fn build(self) -> Result<Telemetry, InitError>
pub fn build(self) -> Result<Telemetry, InitError>
Build the Telemetry instance.
This initializes the OpenTelemetry providers based on the configuration and any programmatic customizations. Providers are only created if they are configured or have programmatic additions.
§Errors
Returns an error if exporter initialization fails (e.g., invalid endpoint, missing credentials, or required feature not enabled).
Auto Trait Implementations§
impl !RefUnwindSafe for TelemetryBuilder
impl !UnwindSafe for TelemetryBuilder
impl Freeze for TelemetryBuilder
impl Send for TelemetryBuilder
impl Sync for TelemetryBuilder
impl Unpin for TelemetryBuilder
impl UnsafeUnpin for TelemetryBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more