@@ -6,6 +6,8 @@ use opentelemetry::{
66use opentelemetry_appender_tracing:: layer:: OpenTelemetryTracingBridge ;
77use opentelemetry_otlp:: WithExportConfig ;
88use opentelemetry_otlp:: { LogExporter , MetricExporter , Protocol , SpanExporter } ;
9+ #[ cfg( any( feature = "gzip" , feature = "zstd" ) ) ]
10+ use opentelemetry_otlp:: { Compression , WithHttpConfig } ;
911use opentelemetry_sdk:: Resource ;
1012use opentelemetry_sdk:: {
1113 logs:: SdkLoggerProvider , metrics:: SdkMeterProvider , trace:: SdkTracerProvider ,
@@ -27,9 +29,23 @@ fn get_resource() -> Resource {
2729}
2830
2931fn init_logs ( ) -> SdkLoggerProvider {
30- let exporter = LogExporter :: builder ( )
32+ let mut exporter_builder = LogExporter :: builder ( )
3133 . with_http ( )
32- . with_protocol ( Protocol :: HttpBinary )
34+ . with_protocol ( Protocol :: HttpBinary ) ;
35+
36+ #[ cfg( feature = "gzip" ) ]
37+ {
38+ exporter_builder = exporter_builder. with_compression ( Compression :: Gzip ) ;
39+ println ! ( "Using gzip compression for logs" ) ;
40+ }
41+
42+ #[ cfg( all( feature = "zstd" , not( feature = "gzip" ) ) ) ]
43+ {
44+ exporter_builder = exporter_builder. with_compression ( Compression :: Zstd ) ;
45+ println ! ( "Using zstd compression for logs" ) ;
46+ }
47+
48+ let exporter = exporter_builder
3349 . build ( )
3450 . expect ( "Failed to create log exporter" ) ;
3551
@@ -40,9 +56,23 @@ fn init_logs() -> SdkLoggerProvider {
4056}
4157
4258fn init_traces ( ) -> SdkTracerProvider {
43- let exporter = SpanExporter :: builder ( )
59+ let mut exporter_builder = SpanExporter :: builder ( )
4460 . with_http ( )
45- . with_protocol ( Protocol :: HttpBinary ) //can be changed to `Protocol::HttpJson` to export in JSON format
61+ . with_protocol ( Protocol :: HttpBinary ) ; //can be changed to `Protocol::HttpJson` to export in JSON format
62+
63+ #[ cfg( feature = "gzip" ) ]
64+ {
65+ exporter_builder = exporter_builder. with_compression ( Compression :: Gzip ) ;
66+ println ! ( "Using gzip compression for traces" ) ;
67+ }
68+
69+ #[ cfg( all( feature = "zstd" , not( feature = "gzip" ) ) ) ]
70+ {
71+ exporter_builder = exporter_builder. with_compression ( Compression :: Zstd ) ;
72+ println ! ( "Using zstd compression for traces" ) ;
73+ }
74+
75+ let exporter = exporter_builder
4676 . build ( )
4777 . expect ( "Failed to create trace exporter" ) ;
4878
@@ -53,9 +83,23 @@ fn init_traces() -> SdkTracerProvider {
5383}
5484
5585fn init_metrics ( ) -> SdkMeterProvider {
56- let exporter = MetricExporter :: builder ( )
86+ let mut exporter_builder = MetricExporter :: builder ( )
5787 . with_http ( )
58- . with_protocol ( Protocol :: HttpBinary ) //can be changed to `Protocol::HttpJson` to export in JSON format
88+ . with_protocol ( Protocol :: HttpBinary ) ; //can be changed to `Protocol::HttpJson` to export in JSON format
89+
90+ #[ cfg( feature = "gzip" ) ]
91+ {
92+ exporter_builder = exporter_builder. with_compression ( Compression :: Gzip ) ;
93+ println ! ( "Using gzip compression for metrics" ) ;
94+ }
95+
96+ #[ cfg( all( feature = "zstd" , not( feature = "gzip" ) ) ) ]
97+ {
98+ exporter_builder = exporter_builder. with_compression ( Compression :: Zstd ) ;
99+ println ! ( "Using zstd compression for metrics" ) ;
100+ }
101+
102+ let exporter = exporter_builder
59103 . build ( )
60104 . expect ( "Failed to create metric exporter" ) ;
61105
0 commit comments