Struct opentelemetry_jaeger::config::agent::AgentPipeline
source · pub struct AgentPipeline { /* private fields */ }
Expand description
AgentPipeline config and build a exporter targeting a jaeger agent using UDP as transport layer protocol.
UDP packet max length
The exporter uses UDP to communicate with the agent. UDP requests may be rejected if it’s too long. See UDP packet size for details.
Users can utilise with_max_packet_size
and with_auto_split_batch
to avoid spans loss or UDP requests failure.
The default max_packet_size
is 65000
(why 65000?). If your platform has a smaller limit on UDP packet.
You will need to adjust the max_packet_size
accordingly.
Set auto_split_batch
to true will config the exporter to split the batch based on max_packet_size
automatically. Note that it has a performance overhead as every batch could require multiple requests to export.
For example, OSX UDP packet limit is 9216 by default. You can configure the pipeline as following to avoid UDP packet breaches the limit.
let tracer = opentelemetry_jaeger::new_agent_pipeline()
.with_endpoint("localhost:6831")
.with_service_name("my_app")
.with_max_packet_size(9_216)
.with_auto_split_batch(true)
.install_batch(opentelemetry::runtime::Tokio).unwrap();
Environment variables
The following environment variables are available to configure the agent exporter.
OTEL_EXPORTER_JAEGER_AGENT_HOST
, set the host of the agent. If theOTEL_EXPORTER_JAEGER_AGENT_HOST
is not set, the value will be ignored.OTEL_EXPORTER_JAEGER_AGENT_PORT
, set the port of the agent. If theOTEL_EXPORTER_JAEGER_AGENT_HOST
is not set, the exporter will use 127.0.0.1 as the host.
Implementations§
source§impl AgentPipeline
impl AgentPipeline
sourcepub fn with_endpoint<T: ToSocketAddrs>(self, agent_endpoint: T) -> Self
pub fn with_endpoint<T: ToSocketAddrs>(self, agent_endpoint: T) -> Self
set the endpoint of the agent.
It usually composed by host ip and the port number. Any valid socket address can be used.
Default to be 127.0.0.1:6831
.
sourcepub fn with_max_packet_size(self, max_packet_size: usize) -> Self
pub fn with_max_packet_size(self, max_packet_size: usize) -> Self
Assign the max packet size in bytes.
It should be consistent with the limit of platforms. Otherwise, UDP requests maybe reject with
error like thrift agent failed with transport error
or thrift agent failed with message too long
.
The exporter will cut off spans if the batch is long. To avoid this, set auto_split_batch to true
to split a batch into multiple UDP packets.
Default to be 65000
.
sourcepub fn with_auto_split_batch(self, should_auto_split: bool) -> Self
pub fn with_auto_split_batch(self, should_auto_split: bool) -> Self
Config whether to auto split batches.
When auto split is set to true
, the exporter will try to split the
batch into smaller ones so that there will be minimal data loss. It
will impact the performance.
Note that if the length of one serialized span is longer than the max_packet_size
.
The exporter will return an error as it cannot export the span. Use jaeger collector
instead of jaeger agent may be help in this case as the exporter will use HTTP to communicate
with jaeger collector.
Default to be false
.
sourcepub fn with_service_name<T: Into<String>>(self, service_name: T) -> Self
pub fn with_service_name<T: Into<String>>(self, service_name: T) -> Self
Set the service name of the application. It generally is the name of application.
Critically, Jaeger backend depends on Span.Process.ServiceName
to identify the service
that produced the spans.
Opentelemetry allows set the service name using multiple methods. This functions takes priority over all other methods.
If the service name is not set. It will default to be unknown_service
.
Config whether to export information of instrumentation library.
It’s required to report instrumentation library as span tags. However it does have a overhead on performance, performance sensitive applications can use this function to opt out reporting instrumentation library.
Default to be true
.
sourcepub fn with_trace_config(self, config: Config) -> Self
pub fn with_trace_config(self, config: Config) -> Self
Assign the opentelemetry SDK configurations for the exporter pipeline.
For mapping between opentelemetry configurations and Jaeger spans. Please refer the spec.
Examples
Set service name via resource.
use opentelemetry::{sdk::{self, Resource}, KeyValue};
let pipeline = opentelemetry_jaeger::new_agent_pipeline()
.with_trace_config(
sdk::trace::Config::default()
.with_resource(Resource::new(vec![KeyValue::new("service.name", "my-service")]))
);
sourcepub fn with_batch_processor_config(self, config: BatchConfig) -> Self
pub fn with_batch_processor_config(self, config: BatchConfig) -> Self
Assign the batch span processor for the exporter pipeline.
If a simple span processor is used by install_simple
or build_simple
, then this config will not be ignored.
Examples
Set max queue size.
use opentelemetry::sdk::trace::BatchConfig;
let pipeline = opentelemetry_jaeger::new_agent_pipeline()
.with_batch_processor_config(
BatchConfig::default().with_max_queue_size(200)
);
sourcepub fn build_simple(self) -> Result<TracerProvider, TraceError>
pub fn build_simple(self) -> Result<TracerProvider, TraceError>
Build a TracerProvider
using a blocking exporter and configurations from the pipeline.
The exporter will send each span to the agent upon the span ends.
sourcepub fn build_batch<R>(self, runtime: R) -> Result<TracerProvider, TraceError>where
R: JaegerTraceRuntime,
pub fn build_batch<R>(self, runtime: R) -> Result<TracerProvider, TraceError>where R: JaegerTraceRuntime,
Build a TracerProvider
using a async exporter and configurations from the pipeline.
The exporter will collect spans in a batch and send them to the agent.
It’s possible to lose spans up to a batch when the application shuts down. So users should
use shut_down_tracer_provider
to block the shut down process until
all remaining spans have been sent.
Commonly used runtime are provided via rt-tokio
, rt-tokio-current-thread
, rt-async-std
features.
sourcepub fn install_simple(self) -> Result<Tracer, TraceError>
pub fn install_simple(self) -> Result<Tracer, TraceError>
Similar to build_simple
but also returns a tracer from the
tracer provider.
The tracer name is opentelemetry-jaeger
. The tracer version will be the version of this crate.
sourcepub fn install_batch<R>(self, runtime: R) -> Result<Tracer, TraceError>where
R: JaegerTraceRuntime,
pub fn install_batch<R>(self, runtime: R) -> Result<Tracer, TraceError>where R: JaegerTraceRuntime,
Similar to build_batch
but also returns a tracer from the
tracer provider.
The tracer name is opentelemetry-jaeger
. The tracer version will be the version of this crate.
sourcepub fn build_async_agent_exporter<R>(
self,
runtime: R
) -> Result<Exporter, TraceError>where
R: JaegerTraceRuntime,
pub fn build_async_agent_exporter<R>( self, runtime: R ) -> Result<Exporter, TraceError>where R: JaegerTraceRuntime,
Build an jaeger exporter targeting a jaeger agent and running on the async runtime.
sourcepub fn build_sync_agent_exporter(self) -> Result<Exporter, TraceError>
pub fn build_sync_agent_exporter(self) -> Result<Exporter, TraceError>
Build an jaeger exporter targeting a jaeger agent and running on the sync runtime.
Trait Implementations§
source§impl Debug for AgentPipeline
impl Debug for AgentPipeline
Auto Trait Implementations§
impl !RefUnwindSafe for AgentPipeline
impl Send for AgentPipeline
impl Sync for AgentPipeline
impl Unpin for AgentPipeline
impl !UnwindSafe for AgentPipeline
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
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§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> 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::Request