Expand description
Utilities for working with global telemetry primitives
§Global Trace API
The global trace API provides applications access to their configured
TracerProvider instance from anywhere in the codebase. This allows
applications to be less coupled to the specific Open Telemetry SDK while not
manually passing references to each part of the code that needs to create
Spans. Additionally, 3rd party middleware or library code can be
written against this generic API and not constrain users to a specific
implementation choice.
§Usage in Applications
Applications configure their tracer either by installing a trace pipeline,
or calling set_tracer_provider.
use opentelemetry::trace::{Tracer, noop::NoopTracerProvider};
use opentelemetry::global;
fn init_tracer() {
let provider = NoopTracerProvider::new();
// Configure the global `TracerProvider` singleton when your app starts
// (there is a no-op default if this is not set by your application)
let _ = global::set_tracer_provider(provider);
}
fn do_something_tracked() {
// Then you can get a named tracer instance anywhere in your codebase.
let tracer = global::tracer("my-component");
tracer.in_span("doing_work", |cx| {
// Traced app logic here...
});
}
// in main or other app start
let _ = init_tracer();
do_something_tracked();§Usage in Libraries
use opentelemetry::trace::{Tracer, TracerProvider};
use opentelemetry::global;
pub fn my_traced_library_function() {
// End users of your library will configure their global tracer provider
// so you can use the global tracer without any setup
let tracer = global::tracer_provider().versioned_tracer(
"my-library-name",
Some(env!("CARGO_PKG_VERSION")),
None,
);
tracer.in_span("doing_library_work", |cx| {
// Traced library logic here...
});
}§Global Metrics API
The global metrics API provides applications access to their configured
MeterProvider instance from anywhere in the codebase. This allows
applications to be less coupled to the specific Open Telemetry SDK while not
manually passing references to each part of the code that needs to create
metric instruments. Additionally, 3rd party middleware or library code can be
written against this generic API and not constrain users to a specific
implementation choice.
§Usage in Applications
Applications configure their meter either by installing a metrics pipeline,
or calling set_meter_provider.
use opentelemetry::metrics::{Meter, noop::NoopMeterProvider};
use opentelemetry::{global, KeyValue};
fn init_meter() {
let provider = NoopMeterProvider::new();
// Configure the global `MeterProvider` singleton when your app starts
// (there is a no-op default if this is not set by your application)
global::set_meter_provider(provider)
}
fn do_something_instrumented() {
// Then you can get a named tracer instance anywhere in your codebase.
let meter = global::meter("my-component");
let counter = meter.u64_counter("my_counter").init();
// record metrics
counter.add(1, &[KeyValue::new("mykey", "myvalue")]);
}
// in main or other app start
init_meter();
do_something_instrumented();§Usage in Libraries
use opentelemetry::{global, KeyValue};
pub fn my_traced_library_function() {
// End users of your library will configure their global meter provider
// so you can use the global meter without any setup
let tracer = global::meter("my-library-name");
let counter = tracer.u64_counter("my_counter").init();
// record metrics
counter.add(1, &[KeyValue::new("mykey", "myvalue")]);
}Structs§
- Boxed
Span trace - Wraps the
BoxedTracer’sSpanso it can be used generically by applications without knowing the underlying type. - Boxed
Tracer trace - Wraps the
GlobalTracerProvider’sTracerso it can be used generically by applications without knowing the underlying type. - Global
Meter Provider metrics - Represents the globally configured
MeterProviderinstance for this application. - Global
Tracer Provider trace - Represents the globally configured
TracerProviderinstance for this application. This allows generic tracing through the returnedBoxedTracerinstances.
Enums§
- Error
- Wrapper for error from both tracing and metrics part of open telemetry.
Traits§
- Object
Safe Tracer trace - Allows a specific
Tracerto be used generically byBoxedTracerinstances by mirroring the interface and boxing the return types. - Object
Safe Tracer Provider trace - Allows a specific
TracerProviderto be used generically by theGlobalTracerProviderby mirroring the interface and boxing the return types.
Functions§
- force_
flush_ tracer_ provider trace - Force flush all remaining spans in span processors.
- get_
text_ map_ propagator trace - Executes a closure with a reference to the current global
TextMapPropagatorpropagator. - handle_
error - Handle error using the globally configured error handler.
- meter
metrics - Creates a named
Metervia the configuredGlobalMeterProvider. - meter_
provider metrics - Returns an instance of the currently configured global
MeterProviderthroughGlobalMeterProvider. - meter_
with_ version metrics - Creates a
Meterwith the name and version. - set_
error_ handler - Set global error handler.
- set_
meter_ provider metrics - Sets the given
MeterProviderinstance as the current global meter provider. - set_
text_ map_ propagator trace - Sets the given
TextMapPropagatorpropagator as the current global propagator. - set_
tracer_ provider trace - Sets the given
TracerProviderinstance as the current global provider. - shutdown_
tracer_ provider trace - Shut down the current tracer provider. This will invoke the shutdown method on all span processors. span processors should export remaining spans before return
- tracer
trace - Creates a named instance of
Tracervia the configuredGlobalTracerProvider. - tracer_
provider trace - Returns an instance of the currently configured global
TracerProviderthroughGlobalTracerProvider.