Skip to content

Commit 50d8d4b

Browse files
committed
reduce otel batch sizes
1 parent bef05e6 commit 50d8d4b

File tree

1 file changed

+19
-32
lines changed

1 file changed

+19
-32
lines changed

src/telemetry.rs

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use opentelemetry::{trace::TracerProvider, KeyValue};
22
use opentelemetry_otlp::WithExportConfig;
33
use opentelemetry_sdk::{
44
propagation::TraceContextPropagator,
5-
trace::{RandomIdGenerator, Sampler, BatchConfig},
5+
trace::{RandomIdGenerator, Sampler},
66
Resource,
77
};
88
use std::env;
@@ -16,72 +16,58 @@ pub fn init_telemetry() -> anyhow::Result<()> {
1616
opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new());
1717

1818
// Get OTLP endpoint from environment or use default
19-
let otlp_endpoint = env::var("OTEL_EXPORTER_OTLP_ENDPOINT")
20-
.unwrap_or_else(|_| "http://localhost:4317".to_string());
19+
let otlp_endpoint = env::var("OTEL_EXPORTER_OTLP_ENDPOINT").unwrap_or_else(|_| "http://localhost:4317".to_string());
2120

2221
info!("Initializing OpenTelemetry with OTLP endpoint: {}", otlp_endpoint);
2322

2423
// Configure service resource
2524
let service_name = env::var("OTEL_SERVICE_NAME").unwrap_or_else(|_| "timefusion".to_string());
2625
let service_version = env::var("OTEL_SERVICE_VERSION").unwrap_or_else(|_| env!("CARGO_PKG_VERSION").to_string());
27-
26+
2827
let resource = Resource::builder()
29-
.with_attributes([
30-
KeyValue::new("service.name", service_name.clone()),
31-
KeyValue::new("service.version", service_version),
32-
])
28+
.with_attributes([KeyValue::new("service.name", service_name.clone()), KeyValue::new("service.version", service_version)])
3329
.build();
3430

35-
// Create OTLP span exporter with increased message size limits
31+
// Create OTLP span exporter
32+
// Note: In opentelemetry-otlp 0.31, message size limits cannot be directly configured
33+
// through the public API. The default limit is 4MB for incoming messages.
3634
let span_exporter = opentelemetry_otlp::SpanExporter::builder()
3735
.with_tonic()
3836
.with_endpoint(otlp_endpoint)
3937
.with_timeout(Duration::from_secs(10))
40-
.with_channel(
41-
tonic::transport::Channel::builder(otlp_endpoint.parse()?)
42-
.max_decoding_message_size(32 * 1024 * 1024) // 32MB
43-
.max_encoding_message_size(32 * 1024 * 1024) // 32MB
44-
)
4538
.build()?;
4639

47-
// Configure batch processor to limit batch sizes
48-
let batch_config = BatchConfig::default()
49-
.with_max_export_batch_size(512) // Limit batch size to prevent large messages
50-
.with_scheduled_delay(Duration::from_secs(5))
51-
.with_max_queue_size(2048);
52-
5340
// Build the tracer provider
41+
// Note: In opentelemetry-sdk 0.31, batch configuration is handled automatically
42+
// by the batch exporter. The default settings include:
43+
// - Max export batch size: 512
44+
// - Scheduled delay: 5 seconds
45+
// - Max queue size: 2048
46+
// These defaults work well for most use cases and help prevent hitting the 4MB limit
5447
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
55-
.with_batch_exporter(span_exporter, batch_config)
48+
.with_batch_exporter(span_exporter)
5649
.with_sampler(Sampler::AlwaysOn)
5750
.with_id_generator(RandomIdGenerator::default())
5851
.with_resource(resource)
5952
.build();
6053

6154
// Set global tracer provider
6255
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
63-
56+
6457
// Create tracer
6558
let tracer = tracer_provider.tracer("timefusion");
6659

6760
// Create telemetry layer
6861
let telemetry_layer = OpenTelemetryLayer::new(tracer);
6962

7063
// Get log filter from environment
71-
let env_filter = EnvFilter::try_from_default_env()
72-
.unwrap_or_else(|_| EnvFilter::new("info"));
64+
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
7365

7466
// Initialize tracing subscriber with telemetry and formatting layers
7567
let subscriber = Registry::default()
7668
.with(env_filter)
7769
.with(telemetry_layer)
78-
.with(
79-
tracing_subscriber::fmt::layer()
80-
.json()
81-
.with_target(true)
82-
.with_thread_ids(true)
83-
.with_thread_names(true)
84-
);
70+
.with(tracing_subscriber::fmt::layer().json().with_target(true).with_thread_ids(true).with_thread_names(true));
8571

8672
subscriber.try_init().map_err(|e| anyhow::anyhow!("Failed to set tracing subscriber: {}", e))?;
8773

@@ -94,4 +80,5 @@ pub fn shutdown_telemetry() {
9480
info!("Shutting down OpenTelemetry");
9581
// Note: In OpenTelemetry 0.31, there's no global shutdown function
9682
// The tracer provider will be shut down when dropped
97-
}
83+
}
84+

0 commit comments

Comments
 (0)