@@ -6,6 +6,8 @@ use opentelemetry::{
6
6
use opentelemetry_appender_tracing:: layer:: OpenTelemetryTracingBridge ;
7
7
use opentelemetry_otlp:: WithExportConfig ;
8
8
use opentelemetry_otlp:: { LogExporter , MetricExporter , Protocol , SpanExporter } ;
9
+ #[ cfg( any( feature = "gzip" , feature = "zstd" ) ) ]
10
+ use opentelemetry_otlp:: { Compression , WithHttpConfig } ;
9
11
use opentelemetry_sdk:: Resource ;
10
12
use opentelemetry_sdk:: {
11
13
logs:: SdkLoggerProvider , metrics:: SdkMeterProvider , trace:: SdkTracerProvider ,
@@ -27,9 +29,23 @@ fn get_resource() -> Resource {
27
29
}
28
30
29
31
fn init_logs ( ) -> SdkLoggerProvider {
30
- let exporter = LogExporter :: builder ( )
32
+ let mut exporter_builder = LogExporter :: builder ( )
31
33
. 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
33
49
. build ( )
34
50
. expect ( "Failed to create log exporter" ) ;
35
51
@@ -40,9 +56,23 @@ fn init_logs() -> SdkLoggerProvider {
40
56
}
41
57
42
58
fn init_traces ( ) -> SdkTracerProvider {
43
- let exporter = SpanExporter :: builder ( )
59
+ let mut exporter_builder = SpanExporter :: builder ( )
44
60
. 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
46
76
. build ( )
47
77
. expect ( "Failed to create trace exporter" ) ;
48
78
@@ -53,9 +83,23 @@ fn init_traces() -> SdkTracerProvider {
53
83
}
54
84
55
85
fn init_metrics ( ) -> SdkMeterProvider {
56
- let exporter = MetricExporter :: builder ( )
86
+ let mut exporter_builder = MetricExporter :: builder ( )
57
87
. 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
59
103
. build ( )
60
104
. expect ( "Failed to create metric exporter" ) ;
61
105
0 commit comments