1
+ use synd_o11y:: { opentelemetry:: OpenTelemetryGuard , tracing_subscriber:: otel_metrics} ;
1
2
use tracing:: { error, info} ;
2
3
3
4
use synd_api:: { args, config, dependency:: Dependency , serve:: listen_and_serve} ;
4
5
5
- fn init_tracing ( ) {
6
+ fn init_tracing ( ) -> Option < OpenTelemetryGuard > {
6
7
use synd_o11y:: {
7
8
opentelemetry:: init_propagation,
8
- tracing_subscriber:: { audit, otel_log} ,
9
+ tracing_subscriber:: { audit, otel_log, otel_trace } ,
9
10
} ;
10
11
use tracing_subscriber:: {
11
12
filter:: EnvFilter , fmt, layer:: SubscriberExt , util:: SubscriberInitExt as _, Layer as _,
@@ -19,14 +20,25 @@ fn init_tracing() {
19
20
let show_src = true ;
20
21
let show_target = !show_src;
21
22
22
- let otel_log_layer = std:: env:: var ( "OTEL_EXPORTER_OTLP_ENDPOINT" )
23
- . ok ( )
24
- . filter ( |endpoint| !endpoint. is_empty ( ) )
25
- . map ( |endpoint| {
26
- let resource =
27
- synd_o11y:: opentelemetry:: resource ( config:: NAME , config:: VERSION , "local" ) ;
28
- otel_log:: layer ( endpoint, resource)
29
- } ) ;
23
+ let ( opentelemetry_layers, guard) = {
24
+ match std:: env:: var ( "OTEL_EXPORTER_OTLP_ENDPOINT" ) . ok ( ) {
25
+ None => ( None , None ) ,
26
+ Some ( endpoint) if endpoint. is_empty ( ) => ( None , None ) ,
27
+ Some ( endpoint) => {
28
+ let resource =
29
+ synd_o11y:: opentelemetry:: resource ( config:: NAME , config:: VERSION , "local" ) ;
30
+
31
+ let trace_layer = otel_trace:: layer ( resource. clone ( ) ) ;
32
+ let log_layer = otel_log:: layer ( endpoint, resource. clone ( ) ) ;
33
+ let metrics_layer = otel_metrics:: layer ( resource) ;
34
+
35
+ (
36
+ Some ( trace_layer. and_then ( log_layer) . and_then ( metrics_layer) ) ,
37
+ Some ( synd_o11y:: opentelemetry:: OpenTelemetryGuard ) ,
38
+ )
39
+ }
40
+ }
41
+ } ;
30
42
31
43
Registry :: default ( )
32
44
. with (
@@ -36,7 +48,7 @@ fn init_tracing() {
36
48
. with_file ( show_src)
37
49
. with_line_number ( show_src)
38
50
. with_target ( show_target)
39
- . and_then ( otel_log_layer )
51
+ . and_then ( opentelemetry_layers )
40
52
. with_filter (
41
53
EnvFilter :: try_from_default_env ( )
42
54
. or_else ( |_| EnvFilter :: try_new ( "info" ) )
@@ -49,13 +61,15 @@ fn init_tracing() {
49
61
50
62
// Set text map propagator globally
51
63
init_propagation ( ) ;
64
+
65
+ guard
52
66
}
53
67
54
68
#[ tokio:: main]
55
69
async fn main ( ) {
56
70
let args = args:: parse ( ) ;
57
71
58
- init_tracing ( ) ;
72
+ let _guard = init_tracing ( ) ;
59
73
60
74
let dep = Dependency :: new ( args. kvsd ) . await . unwrap ( ) ;
61
75
0 commit comments