diff --git a/quickwit/quickwit-telemetry-exporters/Cargo.toml b/quickwit/quickwit-telemetry-exporters/Cargo.toml index 616ca25972b..bef73e65b44 100644 --- a/quickwit/quickwit-telemetry-exporters/Cargo.toml +++ b/quickwit/quickwit-telemetry-exporters/Cargo.toml @@ -13,13 +13,17 @@ license.workspace = true [dependencies] anyhow = { workspace = true } metrics = { workspace = true } -metrics-opentelemetry = { workspace = true } metrics-exporter-prometheus = { workspace = true } +metrics-opentelemetry = { workspace = true } metrics-util = { workspace = true } opentelemetry = { workspace = true } opentelemetry-appender-tracing = { workspace = true } opentelemetry-otlp = { workspace = true, features = ["experimental-grpc-retry", "experimental-http-retry"] } -opentelemetry_sdk = { workspace = true } +opentelemetry_sdk = { workspace = true, features = [ + "experimental_logs_batch_log_processor_with_async_runtime", + "experimental_metrics_periodicreader_with_async_runtime", + "experimental_trace_batch_span_processor_with_async_runtime", +] } serde_json = { workspace = true } time = { workspace = true, features = ["parsing"] } tracing = { workspace = true } diff --git a/quickwit/quickwit-telemetry-exporters/src/otlp/logs.rs b/quickwit/quickwit-telemetry-exporters/src/otlp/logs.rs index 4f2949bb612..bc02e260731 100644 --- a/quickwit/quickwit-telemetry-exporters/src/otlp/logs.rs +++ b/quickwit/quickwit-telemetry-exporters/src/otlp/logs.rs @@ -16,8 +16,9 @@ use anyhow::Context; use opentelemetry_otlp::{ LogExporter, Protocol as OtlpWireProtocol, WithExportConfig, WithHttpConfig, WithTonicConfig, }; -use opentelemetry_sdk::Resource; use opentelemetry_sdk::logs::SdkLoggerProvider; +use opentelemetry_sdk::logs::log_processor_with_async_runtime::BatchLogProcessor; +use opentelemetry_sdk::{Resource, runtime}; use crate::otlp::{OtlpExporterConfig, OtlpProtocol}; @@ -43,14 +44,16 @@ impl OtlpProtocol { } } +/// Builds the OTLP logger provider. pub(crate) fn init_logger_provider( otlp_config: &OtlpExporterConfig, resource: Resource, ) -> anyhow::Result { let logs_protocol = otlp_config.logs_protocol()?; let log_exporter = logs_protocol.log_exporter()?; + let log_processor = BatchLogProcessor::builder(log_exporter, runtime::Tokio).build(); Ok(SdkLoggerProvider::builder() .with_resource(resource) - .with_batch_exporter(log_exporter) + .with_log_processor(log_processor) .build()) } diff --git a/quickwit/quickwit-telemetry-exporters/src/otlp/metrics.rs b/quickwit/quickwit-telemetry-exporters/src/otlp/metrics.rs index d43eb3dceb0..793b8b56b98 100644 --- a/quickwit/quickwit-telemetry-exporters/src/otlp/metrics.rs +++ b/quickwit/quickwit-telemetry-exporters/src/otlp/metrics.rs @@ -19,6 +19,8 @@ use opentelemetry_otlp::{ MetricExporter, Protocol as OtlpWireProtocol, WithExportConfig, WithHttpConfig, WithTonicConfig, }; use opentelemetry_sdk::metrics::SdkMeterProvider; +use opentelemetry_sdk::metrics::periodic_reader_with_async_runtime::PeriodicReader; +use opentelemetry_sdk::runtime; use crate::otlp::{OtlpExporterConfig, OtlpProtocol, quickwit_resource}; @@ -44,15 +46,17 @@ impl OtlpProtocol { } } +/// Builds the OTLP metrics recorder and its meter provider. pub(crate) fn build_recorder( service_version: &str, otlp_config: &OtlpExporterConfig, ) -> anyhow::Result<(OpenTelemetryRecorder, SdkMeterProvider)> { let metrics_protocol = otlp_config.metrics_protocol()?; let metric_exporter = metrics_protocol.metric_exporter()?; + let metric_reader = PeriodicReader::builder(metric_exporter, runtime::Tokio).build(); let metrics_provider = SdkMeterProvider::builder() .with_resource(quickwit_resource(service_version)) - .with_periodic_exporter(metric_exporter) + .with_reader(metric_reader) .build(); let meter = metrics_provider.meter("quickwit"); diff --git a/quickwit/quickwit-telemetry-exporters/src/otlp/traces.rs b/quickwit/quickwit-telemetry-exporters/src/otlp/traces.rs index 67b5db32e18..7bb6879779f 100644 --- a/quickwit/quickwit-telemetry-exporters/src/otlp/traces.rs +++ b/quickwit/quickwit-telemetry-exporters/src/otlp/traces.rs @@ -16,8 +16,9 @@ use anyhow::Context; use opentelemetry_otlp::{ Protocol as OtlpWireProtocol, SpanExporter, WithExportConfig, WithHttpConfig, WithTonicConfig, }; +use opentelemetry_sdk::trace::span_processor_with_async_runtime::BatchSpanProcessor; use opentelemetry_sdk::trace::{BatchConfigBuilder, SdkTracerProvider}; -use opentelemetry_sdk::{Resource, trace}; +use opentelemetry_sdk::{Resource, runtime}; use crate::otlp::{OtlpExporterConfig, OtlpProtocol}; @@ -43,13 +44,14 @@ impl OtlpProtocol { } } +/// Builds the OTLP tracer provider. pub(crate) fn init_tracer_provider( otlp_config: &OtlpExporterConfig, resource: Resource, ) -> anyhow::Result { let traces_protocol = otlp_config.traces_protocol()?; let span_exporter = traces_protocol.span_exporter()?; - let span_processor = trace::BatchSpanProcessor::builder(span_exporter) + let span_processor = BatchSpanProcessor::builder(span_exporter, runtime::Tokio) .with_batch_config( BatchConfigBuilder::default() // Quickwit can generate a lot of spans, especially in debug mode, and the