]> Untitled Git - lemmy.git/blob - src/telemetry.rs
Sanitize html (#3708)
[lemmy.git] / src / telemetry.rs
1 use console_subscriber::ConsoleLayer;
2 use lemmy_utils::error::LemmyError;
3 use opentelemetry::{
4   sdk::{propagation::TraceContextPropagator, Resource},
5   KeyValue,
6 };
7 use opentelemetry_otlp::WithExportConfig;
8 use tracing::{subscriber::set_global_default, Subscriber};
9 use tracing_subscriber::{filter::Targets, layer::SubscriberExt, registry::LookupSpan, Layer};
10
11 pub fn init_tracing<S>(
12   opentelemetry_url: &str,
13   subscriber: S,
14   targets: Targets,
15 ) -> Result<(), LemmyError>
16 where
17   S: Subscriber + for<'a> LookupSpan<'a> + Send + Sync + 'static,
18 {
19   opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new());
20
21   let console_layer = ConsoleLayer::builder()
22     .with_default_env()
23     .server_addr(([0, 0, 0, 0], 6669))
24     .event_buffer_capacity(1024 * 1024)
25     .spawn();
26
27   let subscriber = subscriber.with(console_layer);
28
29   let tracer = opentelemetry_otlp::new_pipeline()
30     .tracing()
31     .with_trace_config(
32       opentelemetry::sdk::trace::config()
33         .with_resource(Resource::new(vec![KeyValue::new("service.name", "lemmy")])),
34     )
35     .with_exporter(
36       opentelemetry_otlp::new_exporter()
37         .tonic()
38         .with_endpoint(opentelemetry_url),
39     )
40     .install_batch(opentelemetry::runtime::Tokio)?;
41
42   let otel_layer = tracing_opentelemetry::layer()
43     .with_tracer(tracer)
44     .with_filter(targets);
45
46   let subscriber = subscriber.with(otel_layer);
47
48   set_global_default(subscriber)?;
49
50   Ok(())
51 }