@@ -2,7 +2,7 @@ use opentelemetry::{trace::TracerProvider, KeyValue};
22use opentelemetry_otlp:: WithExportConfig ;
33use opentelemetry_sdk:: {
44 propagation:: TraceContextPropagator ,
5- trace:: { RandomIdGenerator , Sampler , BatchConfig } ,
5+ trace:: { RandomIdGenerator , Sampler } ,
66 Resource ,
77} ;
88use 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