Server tools to backfill, tail, mirror, and verify PLC logs
1use opentelemetry::trace::TracerProvider as _;
2use opentelemetry_otlp::{Protocol, WithExportConfig};
3use opentelemetry_sdk::trace::{RandomIdGenerator, Sampler, SdkTracer, SdkTracerProvider};
4use tracing::Subscriber;
5use tracing_opentelemetry::OpenTelemetryLayer;
6use tracing_subscriber::registry::LookupSpan;
7
8pub fn otel_layer<S>() -> OpenTelemetryLayer<S, SdkTracer>
9where
10 S: Subscriber + for<'span> LookupSpan<'span>,
11{
12 let exporter = opentelemetry_otlp::SpanExporter::builder()
13 .with_http()
14 .with_protocol(Protocol::HttpBinary)
15 .build()
16 .expect("to build otel otlp exporter");
17
18 let provider = SdkTracerProvider::builder()
19 .with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
20 1.0,
21 ))))
22 .with_id_generator(RandomIdGenerator::default())
23 .with_batch_exporter(exporter)
24 .build();
25
26 let tracer = provider.tracer("tracing-otel-subscriber");
27 tracing_opentelemetry::layer().with_tracer(tracer)
28}