5
5
Result,
6
6
},
7
7
clap::Parser,
8
+ opentelemetry::KeyValue,
9
+ opentelemetry_otlp::WithExportConfig,
8
10
pyth_agent::agent::{
9
11
config::Config,
10
12
Agent,
11
13
},
12
14
std::{
13
15
io::IsTerminal,
14
16
path::PathBuf,
17
+ time::Duration,
15
18
},
19
+ tracing_subscriber::prelude::*,
16
20
};
17
21
18
22
#[derive(Parser, Debug)]
@@ -31,18 +35,38 @@ struct Arguments {
31
35
#[tokio::main]
32
36
async fn main() -> Result<()> {
33
37
// Initialize a Tracing Subscriber
34
- let fmt_builder = tracing_subscriber::fmt()
38
+ let fmt_layer = tracing_subscriber::fmt::layer ()
35
39
.with_file(false)
36
40
.with_line_number(true)
37
41
.with_thread_ids(true)
38
- .with_env_filter(tracing_subscriber::EnvFilter::from_default_env() )
42
+ .with_target(true )
39
43
.with_ansi(std::io::stderr().is_terminal());
40
44
45
+ // Set up the OpenTelemetry exporter, defaults to 127.0.0.1:4317
46
+ let otlp_exporter = opentelemetry_otlp::new_exporter()
47
+ .tonic()
48
+ .with_timeout(Duration::from_secs(3));
49
+
50
+ // Set up the OpenTelemetry tracer
51
+ let tracer = opentelemetry_otlp::new_pipeline()
52
+ .tracing()
53
+ .with_exporter(otlp_exporter)
54
+ .with_trace_config(opentelemetry_sdk::trace::config().with_resource(
55
+ opentelemetry_sdk::Resource::new(vec![KeyValue::new("service.name", "pyth-agent")]),
56
+ ))
57
+ .install_batch(opentelemetry_sdk::runtime::Tokio)
58
+ .map_err(|e| anyhow::anyhow!("Error initializing open telemetry: {}", e))?;
59
+
60
+ // Set up the telemetry layer
61
+ let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
62
+
63
+ let registry = tracing_subscriber::registry().with(telemetry);
64
+
41
65
// Use the compact formatter if we're in a terminal, otherwise use the JSON formatter.
42
66
if std::io::stderr().is_terminal() {
43
- tracing::subscriber::set_global_default(fmt_builder .compact().finish())? ;
67
+ registry.with(fmt_layer .compact()).init() ;
44
68
} else {
45
- tracing::subscriber::set_global_default(fmt_builder .json().finish())? ;
69
+ registry.with(fmt_layer .json()).init() ;
46
70
}
47
71
48
72
let args = Arguments::parse();
0 commit comments