From 518fba0ef540e7eef820927dc734667d798f428e Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 6 May 2025 20:26:02 -0400 Subject: [PATCH] Add missing otel.rs --- src/otel.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/otel.rs diff --git a/src/otel.rs b/src/otel.rs new file mode 100644 index 0000000..cc6af16 --- /dev/null +++ b/src/otel.rs @@ -0,0 +1,61 @@ +use opentelemetry::global::BoxedTracer; +use opentelemetry::{global, KeyValue}; +use opentelemetry_appender_log::OpenTelemetryLogBridge; +use opentelemetry_otlp::WithExportConfig; +use opentelemetry_sdk::logs::{BatchLogProcessor, SdkLoggerProvider}; +use opentelemetry_sdk::Resource; + +pub fn global_tracer() -> BoxedTracer { + global::tracer("image-server") +} + +pub fn init_tracing() { + let resources = Resource::builder() + .with_attributes([ + KeyValue::new("service.name", "image-server"), + //TODO: Get this from somewhere + KeyValue::new("service.version", "1.0"), + ]) + .build(); + + let span_exporter = opentelemetry_otlp::SpanExporter::builder() + .with_tonic() + .with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap()) + .build() + .unwrap(); + + let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() + .with_batch_exporter(span_exporter) + .with_resource(resources) + .build(); + + global::set_tracer_provider(tracer_provider); +} + +pub fn init_logs() { + let otlp_exporter = opentelemetry_otlp::LogExporter::builder() + .with_tonic() + .with_endpoint(std::env::var("OTLP_OTLS_ENDPOINT").unwrap()) + .build() + .unwrap(); + + let exporter = opentelemetry_stdout::LogExporter::default(); + + let resources = Resource::builder() + .with_attributes([ + KeyValue::new("service.name", "image-server"), + KeyValue::new("service.version", "1.0"), + ]) + .build(); + + let log_provider = SdkLoggerProvider::builder() + .with_log_processor(BatchLogProcessor::builder(exporter).build()) + .with_log_processor(BatchLogProcessor::builder(otlp_exporter).build()) + .with_resource(resources) + .build(); + + let otel_log_appender = OpenTelemetryLogBridge::new(&log_provider); + log::set_boxed_logger(Box::new(otel_log_appender)).expect("Unable to set boxed logger"); + //TODO: Still set this with the env? Ideally we still have a clean/simple local logger for local dev + log::set_max_level(log::LevelFilter::Info); +}