public final class BatchSpanProcessor extends Object implements SpanProcessor
SpanProcessor
that batches spans exported by the SDK then pushes
them to the exporter pipeline.
All spans reported by the SDK implementation are first added to a synchronized queue (with a
maxQueueSize
maximum size, after the size is reached spans are dropped) and exported
every scheduleDelayMillis
to the exporter pipeline in batches of maxExportBatchSize
.
If the queue gets half full a preemptive notification is sent to the worker thread that exports the spans to wake up and start a new export cycle.
This batch SpanProcessor
can cause high contention in a very high traffic service.
TODO: Add a link to the SpanProcessor that uses Disruptor as alternative with low contention.
Configuration options for BatchSpanProcessor
can be read from system properties,
environment variables, or Properties
objects.
For system properties and Properties
objects, BatchSpanProcessor
will look for the following names:
otel.bsp.schedule.delay
: sets the delay interval between two consecutive exports.
otel.bsp.max.queue
: sets the maximum queue size.
otel.bsp.max.export.batch
: sets the maximum batch size.
otel.bsp.export.timeout
: sets the maximum allowed time to export data.
otel.bsp.export.sampled
: sets whether only sampled spans should be exported.
For environment variables, BatchSpanProcessor
will look for the following names:
OTEL_BSP_SCHEDULE_DELAY
: sets the delay interval between two consecutive exports.
OTEL_BSP_MAX_QUEUE
: sets the maximum queue size.
OTEL_BSP_MAX_EXPORT_BATCH
: sets the maximum batch size.
OTEL_BSP_EXPORT_TIMEOUT
: sets the maximum allowed time to export data.
OTEL_BSP_EXPORT_SAMPLED
: sets whether only sampled spans should be exported.
Modifier and Type | Class and Description |
---|---|
static class |
BatchSpanProcessor.Builder
Builder class for
BatchSpanProcessor . |
Modifier and Type | Method and Description |
---|---|
void |
forceFlush()
Processes all span events that have not yet been processed.
|
boolean |
isEndRequired()
Returns
true if this SpanProcessor requires end events. |
boolean |
isStartRequired()
Returns
true if this SpanProcessor requires start events. |
static BatchSpanProcessor.Builder |
newBuilder(SpanExporter spanExporter)
Returns a new Builder for
BatchSpanProcessor . |
void |
onEnd(ReadableSpan span)
Called when a
Span is ended, if the Span.isRecording()
returns true. |
void |
onStart(ReadableSpan span)
Called when a
Span is started, if the Span.isRecording()
returns true. |
void |
shutdown()
Called when
TracerSdkProvider.shutdown() is called. |
public void onStart(ReadableSpan span)
SpanProcessor
Span
is started, if the Span.isRecording()
returns true.
This method is called synchronously on the execution thread, should not throw or block the execution thread.
onStart
in interface SpanProcessor
span
- the ReadableSpan
that just started.public boolean isStartRequired()
SpanProcessor
true
if this SpanProcessor
requires start events.isStartRequired
in interface SpanProcessor
true
if this SpanProcessor
requires start events.public void onEnd(ReadableSpan span)
SpanProcessor
Span
is ended, if the Span.isRecording()
returns true.
This method is called synchronously on the execution thread, should not throw or block the execution thread.
onEnd
in interface SpanProcessor
span
- the ReadableSpan
that just ended.public boolean isEndRequired()
SpanProcessor
true
if this SpanProcessor
requires end events.isEndRequired
in interface SpanProcessor
true
if this SpanProcessor
requires end events.public void shutdown()
SpanProcessor
TracerSdkProvider.shutdown()
is called.
Implementations must ensure that all span events are processed before returning.
shutdown
in interface SpanProcessor
public void forceFlush()
SpanProcessor
This method is executed synchronously on the calling thread, and should not throw exceptions.
forceFlush
in interface SpanProcessor
public static BatchSpanProcessor.Builder newBuilder(SpanExporter spanExporter)
BatchSpanProcessor
.spanExporter
- the SpanExporter
to where the Spans are pushed.BatchSpanProcessor
.NullPointerException
- if the spanExporter
is null
.